From 0bbe0da55e98e98ba048b498177b80622f2392a6 Mon Sep 17 00:00:00 2001 From: Albert S Date: Fri, 15 Nov 2019 20:31:02 +0100 Subject: [PATCH] qpdfview 0.4.18.tar.gz release, cc642e7fa74029373ca9b9fbc29adc4883f8b455130a78ad54746d6844a0396c --- CHANGES | 600 ++++ CONTRIBUTORS | 138 + COPYING | 339 ++ README | 36 + TODO | 15 + application.pro | 299 ++ djvu-plugin.pro | 33 + fitz-plugin.pro | 30 + help.qrc | 35 + help/help.html | 299 ++ help/help_az.html | 506 +++ help/help_bg.html | 504 +++ help/help_ca.html | 512 ++++ help/help_cs.html | 520 ++++ help/help_da.html | 504 +++ help/help_de.html | 569 ++++ help/help_en_GB.html | 504 +++ help/help_es.html | 560 ++++ help/help_fa.html | 504 +++ help/help_fi.html | 504 +++ help/help_fr.html | 540 ++++ help/help_gl.html | 504 +++ help/help_it.html | 530 ++++ help/help_ja.html | 439 +++ help/help_ko.html | 504 +++ help/help_ku.html | 504 +++ help/help_lt.html | 504 +++ help/help_ms.html | 518 ++++ help/help_pl.html | 504 +++ help/help_pt.html | 504 +++ help/help_pt_BR.html | 505 +++ help/help_ru.html | 532 ++++ help/help_sk.html | 508 +++ help/help_sr.html | 504 +++ help/help_sv.html | 504 +++ help/help_tr.html | 517 ++++ help/help_uk.html | 588 ++++ help/help_vi.html | 504 +++ help/help_zh_CN.html | 503 +++ help/help_zh_TW.html | 496 +++ icons.qrc | 41 + icons/continuous.svg | 21 + icons/document-open.svg | 86 + icons/document-print.svg | 79 + icons/document-save-as.svg | 97 + icons/document-save.svg | 90 + icons/edit-copy.svg | 41 + icons/edit-find.svg | 101 + icons/fit-to-page-size.svg | 32 + icons/fit-to-page-width.svg | 28 + icons/folder.svg | 1 + icons/go-down.svg | 22 + icons/go-first.svg | 21 + icons/go-jump.svg | 23 + icons/go-last.svg | 21 + icons/go-next.svg | 20 + icons/go-previous.svg | 20 + icons/go-up.svg | 20 + icons/image-loading.svg | 98 + icons/image-missing.svg | 39 + icons/mail-attachment.svg | 16 + icons/media-seek-backward.svg | 30 + icons/media-seek-forward.svg | 30 + icons/multiple-pages.svg | 34 + icons/object-rotate-left.svg | 23 + icons/object-rotate-right.svg | 23 + icons/process-stop.svg | 33 + icons/qpdfview.svg | 173 ++ icons/qpdfview_os2.ico | Bin 0 -> 7824 bytes icons/qpdfview_os2.rc | 1 + icons/qpdfview_win32.ico | Bin 0 -> 8198 bytes icons/qpdfview_win32.rc | 1 + icons/right-to-left.svg | 26 + icons/tab-new.svg | 36 + icons/two-pages-with-cover-page.svg | 25 + icons/two-pages.svg | 21 + icons/view-fullscreen.svg | 38 + icons/view-refresh.svg | 58 + icons/x-office-presentation.svg | 78 + icons/zoom-in.svg | 20 + icons/zoom-original.svg | 20 + icons/zoom-out.svg | 15 + image-plugin.pro | 24 + miscellaneous/qpdfview.1 | 184 ++ miscellaneous/qpdfview.appdata.xml | 39 + miscellaneous/qpdfview.desktop.in | 21 + pdf-plugin.pro | 44 + ps-plugin.pro | 33 + qpdfview.pri | 12 + qpdfview.pro | 73 + sources/annotationwidgets.cpp | 187 ++ sources/annotationwidgets.h | 97 + sources/bookmarkdialog.cpp | 88 + sources/bookmarkdialog.h | 65 + sources/bookmarkmenu.cpp | 122 + sources/bookmarkmenu.h | 74 + sources/bookmarkmodel.cpp | 160 + sources/bookmarkmodel.h | 105 + sources/database.cpp | 1113 +++++++ sources/database.h | 108 + sources/djvumodel.cpp | 1003 ++++++ sources/djvumodel.h | 140 + sources/documentlayout.cpp | 362 +++ sources/documentlayout.h | 143 + sources/documentview.cpp | 3109 +++++++++++++++++++ sources/documentview.h | 390 +++ sources/fitzmodel.cpp | 450 +++ sources/fitzmodel.h | 136 + sources/fontsdialog.cpp | 76 + sources/fontsdialog.h | 53 + sources/formfieldwidgets.cpp | 336 ++ sources/formfieldwidgets.h | 201 ++ sources/global.h | 77 + sources/helpdialog.cpp | 132 + sources/helpdialog.h | 63 + sources/imagemodel.cpp | 209 ++ sources/imagemodel.h | 105 + sources/main.cpp | 509 +++ sources/mainwindow.cpp | 3887 +++++++++++++++++++++++ sources/mainwindow.h | 587 ++++ sources/miscellaneous.cpp | 991 ++++++ sources/miscellaneous.h | 426 +++ sources/model.h | 218 ++ sources/pageitem.cpp | 1321 ++++++++ sources/pageitem.h | 228 ++ sources/pdfmodel.cpp | 1333 ++++++++ sources/pdfmodel.h | 267 ++ sources/pluginhandler.cpp | 640 ++++ sources/pluginhandler.h | 93 + sources/presentationview.cpp | 640 ++++ sources/presentationview.h | 137 + sources/printdialog.cpp | 161 + sources/printdialog.h | 82 + sources/printoptions.h | 84 + sources/psmodel.cpp | 325 ++ sources/psmodel.h | 151 + sources/recentlyclosedmenu.cpp | 95 + sources/recentlyclosedmenu.h | 63 + sources/recentlyusedmenu.cpp | 121 + sources/recentlyusedmenu.h | 64 + sources/renderparam.h | 156 + sources/rendertask.cpp | 542 ++++ sources/rendertask.h | 204 ++ sources/searchitemdelegate.cpp | 144 + sources/searchitemdelegate.h | 49 + sources/searchmodel.cpp | 511 ++++ sources/searchmodel.h | 140 + sources/searchtask.cpp | 157 + sources/searchtask.h | 178 ++ sources/settings.cpp | 1231 ++++++++ sources/settings.h | 706 +++++ sources/settingsdialog.cpp | 878 ++++++ sources/settingsdialog.h | 222 ++ sources/shortcuthandler.cpp | 297 ++ sources/shortcuthandler.h | 96 + sources/signalhandler.cpp | 99 + sources/signalhandler.h | 61 + sources/thumbnailitem.cpp | 193 ++ sources/thumbnailitem.h | 99 + sources/tileitem.cpp | 296 ++ sources/tileitem.h | 101 + synctex/synctex_parser.c | 4412 +++++++++++++++++++++++++++ synctex/synctex_parser.h | 363 +++ synctex/synctex_parser_local.h | 45 + synctex/synctex_parser_readme.txt | 182 ++ synctex/synctex_parser_utils.c | 512 ++++ synctex/synctex_parser_utils.h | 152 + synctex/synctex_parser_version.txt | 1 + translations.qrc | 44 + translations/qpdfview_ast.ts | 1980 ++++++++++++ translations/qpdfview_az.ts | 1980 ++++++++++++ translations/qpdfview_be.ts | 1980 ++++++++++++ translations/qpdfview_bg.ts | 1980 ++++++++++++ translations/qpdfview_bs.ts | 1980 ++++++++++++ translations/qpdfview_ca.ts | 1980 ++++++++++++ translations/qpdfview_cs.ts | 1980 ++++++++++++ translations/qpdfview_da.ts | 1980 ++++++++++++ translations/qpdfview_de.ts | 1980 ++++++++++++ translations/qpdfview_el.ts | 1980 ++++++++++++ translations/qpdfview_en_AU.ts | 2005 ++++++++++++ translations/qpdfview_en_GB.ts | 1980 ++++++++++++ translations/qpdfview_eo.ts | 1980 ++++++++++++ translations/qpdfview_es.ts | 1980 ++++++++++++ translations/qpdfview_eu.ts | 1980 ++++++++++++ translations/qpdfview_fa.ts | 1994 ++++++++++++ translations/qpdfview_fi.ts | 1980 ++++++++++++ translations/qpdfview_fr.ts | 1980 ++++++++++++ translations/qpdfview_gl.ts | 1980 ++++++++++++ translations/qpdfview_he.ts | 1980 ++++++++++++ translations/qpdfview_hr.ts | 1980 ++++++++++++ translations/qpdfview_hu.ts | 1980 ++++++++++++ translations/qpdfview_id.ts | 1980 ++++++++++++ translations/qpdfview_it.ts | 1980 ++++++++++++ translations/qpdfview_ja.ts | 2001 ++++++++++++ translations/qpdfview_kk.ts | 1980 ++++++++++++ translations/qpdfview_ko.ts | 1994 ++++++++++++ translations/qpdfview_ku.ts | 1994 ++++++++++++ translations/qpdfview_ky.ts | 1980 ++++++++++++ translations/qpdfview_lt.ts | 1980 ++++++++++++ translations/qpdfview_lv.ts | 1994 ++++++++++++ translations/qpdfview_ms.ts | 1980 ++++++++++++ translations/qpdfview_my.ts | 1980 ++++++++++++ translations/qpdfview_nb.ts | 1994 ++++++++++++ translations/qpdfview_nds.ts | 1994 ++++++++++++ translations/qpdfview_oc.ts | 2001 ++++++++++++ translations/qpdfview_pl.ts | 1980 ++++++++++++ translations/qpdfview_pt.ts | 1980 ++++++++++++ translations/qpdfview_pt_BR.ts | 1980 ++++++++++++ translations/qpdfview_ro.ts | 1980 ++++++++++++ translations/qpdfview_ru.ts | 1980 ++++++++++++ translations/qpdfview_sk.ts | 1980 ++++++++++++ translations/qpdfview_sr.ts | 2001 ++++++++++++ translations/qpdfview_sv.ts | 1980 ++++++++++++ translations/qpdfview_th.ts | 1980 ++++++++++++ translations/qpdfview_tr.ts | 1980 ++++++++++++ translations/qpdfview_ug.ts | 1980 ++++++++++++ translations/qpdfview_uk.ts | 1980 ++++++++++++ translations/qpdfview_uz.ts | 1994 ++++++++++++ translations/qpdfview_vi.ts | 1980 ++++++++++++ translations/qpdfview_zh_CN.ts | 1980 ++++++++++++ translations/qpdfview_zh_TW.ts | 2001 ++++++++++++ 221 files changed, 156020 insertions(+) create mode 100644 CHANGES create mode 100644 CONTRIBUTORS create mode 100644 COPYING create mode 100644 README create mode 100644 TODO create mode 100644 application.pro create mode 100644 djvu-plugin.pro create mode 100644 fitz-plugin.pro create mode 100644 help.qrc create mode 100644 help/help.html create mode 100644 help/help_az.html create mode 100644 help/help_bg.html create mode 100644 help/help_ca.html create mode 100644 help/help_cs.html create mode 100644 help/help_da.html create mode 100644 help/help_de.html create mode 100644 help/help_en_GB.html create mode 100644 help/help_es.html create mode 100644 help/help_fa.html create mode 100644 help/help_fi.html create mode 100644 help/help_fr.html create mode 100644 help/help_gl.html create mode 100644 help/help_it.html create mode 100644 help/help_ja.html create mode 100644 help/help_ko.html create mode 100644 help/help_ku.html create mode 100644 help/help_lt.html create mode 100644 help/help_ms.html create mode 100644 help/help_pl.html create mode 100644 help/help_pt.html create mode 100644 help/help_pt_BR.html create mode 100644 help/help_ru.html create mode 100644 help/help_sk.html create mode 100644 help/help_sr.html create mode 100644 help/help_sv.html create mode 100644 help/help_tr.html create mode 100644 help/help_uk.html create mode 100644 help/help_vi.html create mode 100644 help/help_zh_CN.html create mode 100644 help/help_zh_TW.html create mode 100644 icons.qrc create mode 100644 icons/continuous.svg create mode 100644 icons/document-open.svg create mode 100644 icons/document-print.svg create mode 100644 icons/document-save-as.svg create mode 100644 icons/document-save.svg create mode 100644 icons/edit-copy.svg create mode 100644 icons/edit-find.svg create mode 100644 icons/fit-to-page-size.svg create mode 100644 icons/fit-to-page-width.svg create mode 100644 icons/folder.svg create mode 100644 icons/go-down.svg create mode 100644 icons/go-first.svg create mode 100644 icons/go-jump.svg create mode 100644 icons/go-last.svg create mode 100644 icons/go-next.svg create mode 100644 icons/go-previous.svg create mode 100644 icons/go-up.svg create mode 100644 icons/image-loading.svg create mode 100644 icons/image-missing.svg create mode 100644 icons/mail-attachment.svg create mode 100644 icons/media-seek-backward.svg create mode 100644 icons/media-seek-forward.svg create mode 100644 icons/multiple-pages.svg create mode 100644 icons/object-rotate-left.svg create mode 100644 icons/object-rotate-right.svg create mode 100644 icons/process-stop.svg create mode 100644 icons/qpdfview.svg create mode 100644 icons/qpdfview_os2.ico create mode 100644 icons/qpdfview_os2.rc create mode 100644 icons/qpdfview_win32.ico create mode 100644 icons/qpdfview_win32.rc create mode 100644 icons/right-to-left.svg create mode 100644 icons/tab-new.svg create mode 100644 icons/two-pages-with-cover-page.svg create mode 100644 icons/two-pages.svg create mode 100644 icons/view-fullscreen.svg create mode 100644 icons/view-refresh.svg create mode 100644 icons/x-office-presentation.svg create mode 100644 icons/zoom-in.svg create mode 100644 icons/zoom-original.svg create mode 100644 icons/zoom-out.svg create mode 100644 image-plugin.pro create mode 100644 miscellaneous/qpdfview.1 create mode 100644 miscellaneous/qpdfview.appdata.xml create mode 100644 miscellaneous/qpdfview.desktop.in create mode 100644 pdf-plugin.pro create mode 100644 ps-plugin.pro create mode 100644 qpdfview.pri create mode 100644 qpdfview.pro create mode 100644 sources/annotationwidgets.cpp create mode 100644 sources/annotationwidgets.h create mode 100644 sources/bookmarkdialog.cpp create mode 100644 sources/bookmarkdialog.h create mode 100644 sources/bookmarkmenu.cpp create mode 100644 sources/bookmarkmenu.h create mode 100644 sources/bookmarkmodel.cpp create mode 100644 sources/bookmarkmodel.h create mode 100644 sources/database.cpp create mode 100644 sources/database.h create mode 100644 sources/djvumodel.cpp create mode 100644 sources/djvumodel.h create mode 100644 sources/documentlayout.cpp create mode 100644 sources/documentlayout.h create mode 100644 sources/documentview.cpp create mode 100644 sources/documentview.h create mode 100644 sources/fitzmodel.cpp create mode 100644 sources/fitzmodel.h create mode 100644 sources/fontsdialog.cpp create mode 100644 sources/fontsdialog.h create mode 100644 sources/formfieldwidgets.cpp create mode 100644 sources/formfieldwidgets.h create mode 100644 sources/global.h create mode 100644 sources/helpdialog.cpp create mode 100644 sources/helpdialog.h create mode 100644 sources/imagemodel.cpp create mode 100644 sources/imagemodel.h create mode 100644 sources/main.cpp create mode 100644 sources/mainwindow.cpp create mode 100644 sources/mainwindow.h create mode 100644 sources/miscellaneous.cpp create mode 100644 sources/miscellaneous.h create mode 100644 sources/model.h create mode 100644 sources/pageitem.cpp create mode 100644 sources/pageitem.h create mode 100644 sources/pdfmodel.cpp create mode 100644 sources/pdfmodel.h create mode 100644 sources/pluginhandler.cpp create mode 100644 sources/pluginhandler.h create mode 100644 sources/presentationview.cpp create mode 100644 sources/presentationview.h create mode 100644 sources/printdialog.cpp create mode 100644 sources/printdialog.h create mode 100644 sources/printoptions.h create mode 100644 sources/psmodel.cpp create mode 100644 sources/psmodel.h create mode 100644 sources/recentlyclosedmenu.cpp create mode 100644 sources/recentlyclosedmenu.h create mode 100644 sources/recentlyusedmenu.cpp create mode 100644 sources/recentlyusedmenu.h create mode 100644 sources/renderparam.h create mode 100644 sources/rendertask.cpp create mode 100644 sources/rendertask.h create mode 100644 sources/searchitemdelegate.cpp create mode 100644 sources/searchitemdelegate.h create mode 100644 sources/searchmodel.cpp create mode 100644 sources/searchmodel.h create mode 100644 sources/searchtask.cpp create mode 100644 sources/searchtask.h create mode 100644 sources/settings.cpp create mode 100644 sources/settings.h create mode 100644 sources/settingsdialog.cpp create mode 100644 sources/settingsdialog.h create mode 100644 sources/shortcuthandler.cpp create mode 100644 sources/shortcuthandler.h create mode 100644 sources/signalhandler.cpp create mode 100644 sources/signalhandler.h create mode 100644 sources/thumbnailitem.cpp create mode 100644 sources/thumbnailitem.h create mode 100644 sources/tileitem.cpp create mode 100644 sources/tileitem.h create mode 100644 synctex/synctex_parser.c create mode 100644 synctex/synctex_parser.h create mode 100644 synctex/synctex_parser_local.h create mode 100644 synctex/synctex_parser_readme.txt create mode 100644 synctex/synctex_parser_utils.c create mode 100644 synctex/synctex_parser_utils.h create mode 100644 synctex/synctex_parser_version.txt create mode 100644 translations.qrc create mode 100644 translations/qpdfview_ast.ts create mode 100644 translations/qpdfview_az.ts create mode 100644 translations/qpdfview_be.ts create mode 100644 translations/qpdfview_bg.ts create mode 100644 translations/qpdfview_bs.ts create mode 100644 translations/qpdfview_ca.ts create mode 100644 translations/qpdfview_cs.ts create mode 100644 translations/qpdfview_da.ts create mode 100644 translations/qpdfview_de.ts create mode 100644 translations/qpdfview_el.ts create mode 100644 translations/qpdfview_en_AU.ts create mode 100644 translations/qpdfview_en_GB.ts create mode 100644 translations/qpdfview_eo.ts create mode 100644 translations/qpdfview_es.ts create mode 100644 translations/qpdfview_eu.ts create mode 100644 translations/qpdfview_fa.ts create mode 100644 translations/qpdfview_fi.ts create mode 100644 translations/qpdfview_fr.ts create mode 100644 translations/qpdfview_gl.ts create mode 100644 translations/qpdfview_he.ts create mode 100644 translations/qpdfview_hr.ts create mode 100644 translations/qpdfview_hu.ts create mode 100644 translations/qpdfview_id.ts create mode 100644 translations/qpdfview_it.ts create mode 100644 translations/qpdfview_ja.ts create mode 100644 translations/qpdfview_kk.ts create mode 100644 translations/qpdfview_ko.ts create mode 100644 translations/qpdfview_ku.ts create mode 100644 translations/qpdfview_ky.ts create mode 100644 translations/qpdfview_lt.ts create mode 100644 translations/qpdfview_lv.ts create mode 100644 translations/qpdfview_ms.ts create mode 100644 translations/qpdfview_my.ts create mode 100644 translations/qpdfview_nb.ts create mode 100644 translations/qpdfview_nds.ts create mode 100644 translations/qpdfview_oc.ts create mode 100644 translations/qpdfview_pl.ts create mode 100644 translations/qpdfview_pt.ts create mode 100644 translations/qpdfview_pt_BR.ts create mode 100644 translations/qpdfview_ro.ts create mode 100644 translations/qpdfview_ru.ts create mode 100644 translations/qpdfview_sk.ts create mode 100644 translations/qpdfview_sr.ts create mode 100644 translations/qpdfview_sv.ts create mode 100644 translations/qpdfview_th.ts create mode 100644 translations/qpdfview_tr.ts create mode 100644 translations/qpdfview_ug.ts create mode 100644 translations/qpdfview_uk.ts create mode 100644 translations/qpdfview_uz.ts create mode 100644 translations/qpdfview_vi.ts create mode 100644 translations/qpdfview_zh_CN.ts create mode 100644 translations/qpdfview_zh_TW.ts diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..9570c5f --- /dev/null +++ b/CHANGES @@ -0,0 +1,600 @@ +Release 0.4.18: + * Fixed various issue w.r.t. statically linked plug-ins and cross builds for Windows. Thanks to Marshall Banana. + * Fixed encoding issues w.r.t. CUPS names. Thanks to Silvan Scherrer. + * Fixed not overwriting page ranges CUPS option when set already by Qt's print dialog. Thanks to Fabio Rossi. + * Fixed refreshing modified documents from disk. + * Added support for nested splitting of document views. + * Added support for transparent decompression of document files. + * Added restoring of tab order and of current tab. + * Added action to open current file in new window. Thanks to Pavel Sanda. + * Updated support for MuPDF to version 1.12 and later. Thanks to S. Razi Alavizadeh. + * Added support for EPUB, XPS, CBZ and FB2 via MuPDF. Thanks to S. Razi Alavizadeh. + * Automated translations import from Launchpad via Travis CI. Thanks to S. Razi Alavizadeh. + * Imported various new and updated translations from Launchpad. Thanks to all Launchpad translators! + +Release 0.4.17: + * Fixed query to populate the instance list for the choose instance dialog. + * Fixed selecting the complete text upon opening a page number dialog. + * Fixed computation of tile sub rect w.r.t. non-unit device pixel ratios. + * Moved loading of interactive elements out of the main event loop. + * Optimize tile rendering event handling by centralizing dispatch. + * The results of the current tab are now automatically expanded in the extended search dock. + * Added support for external document links to the outline view. + * Added optional page-parallel execution of text search. + * Added triggering SyncTeX reverse search using a keyboard modifier. + * Keyboard modifiers for mouse interaction can be disabled. + * Optimizations of the search dock layout w.r.t. vertical/horizontal positioning. + * Added context menu action to move document to a different instance. + * Changed cache size tracking from byte to kilobyte granularity to support more than 2 GB cache. + * Added a save in addition to the save-as action to simplify modifying documents in-place. + * Added Japanese translations. Thanks to Koji Yokota. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Russian translations. Thanks to ned. + * Updated French translations. Thanks to Charles Monzat. + * Updated Lithunian translations. Thanks Moo. + +Release 0.4.16: + * Fixed an incompatibility with FDo's shared MIME type database that broke opening DjVu documents. + * Added function to dynamically fit thumbnails into the viewport. + * Added support to use system SyncTeX parser library. + * Added support to open image formats supported by Qt. + * SyncTeX is available and discoverable within the main view's context menu. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Malay translations. Thanks to abuyop. + * Updated Brazilian Portuguese translations. Thanks to Felipe Braga. + * Updated Russian translations. Thanks to ned. + * Updated British English translations. Thanks to Andi Chandler and Anthony Harrington. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Portuguese translations. Thanks to Sérgio Marques. + * Updated Lithunian translations. Thanks to Moo. + * Updated Spanish translations. Thanks to Guillermo and Adolfo Jayme. + * Updated French translations. Thanks to Charles Monzat. + +Release 0.4.15: + * Fixed compatibility with MuPDF version 1.7. Thanks to Martin Banky. + * Added keeping the page-relative position upon page change. + * Added document properties on PDF version, encryption and linearization. + * Added keyboard navigation to the outline view. Thanks to Bendik R. Opstad. + * Added configurable document and tab context menus. Thanks to S. Razi Alavizadeh. + * Added composition modes to adjust the background of scanned documents. + * Extended the default movement keyboard shortcuts to include the numpad keys. + * Made the trim-margins setting a per-tab property. + * Added Hungarian translations. Thanks to Páder Rezső. + * Updated Polish translations. Thanks to Piotr Strębski. + * Updated Italian translations. Thanks to Claudio Arseni. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated British English translations. Thanks to Anthony Harrington and Andy Chandler. + * Updated Malay translations. Thanks to abuyop. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated French translations. Thanks to Jean Marc. + +Release 0.4.14: + * Fixed keyboard movement not working in annotations and form fields. + * Fixed display of warning dialog upon restoring tabs. + * Fixed compilation using LLVM Clang. Thanks to Franz Fellner. + * Fixed crash upon middle-clicking into empty part of tab bar. + * Fixed a race condition in text extraction within the extended search dock. + * Fixed losing rendering hints after unlocking encrypted PDF documents. + * Improved user interaction of the extended search dock. + * Improved the speed of text extraction within the extended search dock. Thanks to S. Razi Alavizadeh. + * Improved performance at very large scale factors by dynamically adjusting tile size. + * Added restoring of expanded outline items after refresh. Thanks to Bendik R. Opstad. + * Added various smaller user interface enhancements. + * Added whole-words-only search option (depending on Poppler version 0.31 or higher). + * Added optionally searchable tabs and bookmarks menus. + * Improved flexibility of searching DjVu documents. + * Added Finnish translation of online help. Thanks to Timo Seppola. + * Updated settings section of the online help. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Polish translations. Thanks to Piotr Strębski. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Slovak translations. Thanks to DAG Software. + * Updated Spanish translations. Thanks to Adolfo Jayme. + * Updated Simplified Chinese translations. Thanks to electricface. + * Updated Catalan translations. Thanks to VPablo. + * Updated Russian translations. Thanks to ☠Jay ZDLin☠ and Aleksey Kabanov. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Malay translations. Thanks to abuyop. + * Updated French translations. Thanks to Jean Marc. + +Release 0.4.13: + * Fixed a memory leak when processing meta-data in the DjVu plug-in. + * Fixed a crash when loading corrupted DjVu documents. + * Removed the warning dialog about unknown file type to fix the '--quiet' option. + * Added optional extended search dock displaying results from all open tabs. Thanks to S. Razi Alavizadeh. + * Added per-tab setting to convert pages to grayscale after rendering. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Malay translations. Thanks to abuyop. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Kazakh translations. Thanks to Baurzhan Muftakhidinov. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Portuguese translations. Thanks to Sérgio Marques. + * Updated Polish translations. Thanks to Piotr Strębski. + +Release 0.4.12: + * Fixed loading document-supplied view mode defaults. + * Fixed installation location of application icon to use hicolor icon theme. + * Fixed an instability of DjVu meta-data extraction. + * Added function to automatically trim empty page margins. + * Added dock to improved access to bookmarks. Thanks to S. Razi Alavizadeh. + * Added support for document-supplied page label. Thanks to S. Razi Alavizadeh. + * Added context menu to copy link addresses. + * Improved caching, i.e. do not drop pixmaps on scale factor change. Thanks to Martin Spacek. + * Improved rendering by giving a higher priority to rendering visible pages compared to prefetching. Thanks to S. Razi Alavizadeh. + * Improved computation of current page for continuous layouts. Thanks to S. Razi Alavizadeh. + * Improved searching of DjVu documents. Thanks to S. Razi Alavizadeh. + * Extended the D-Bus interface to support more IPC scenarios. + * Updated Italian translations. Thanks to Claudio Arseni. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Slovak translations. Thanks to DAG Software. + * Updated Thai translations. Thanks to Rockworld. + * Updated Russian translations. Thanks to Oleg Koptev. + * Updated Malay translations. Thanks to abuyop. + * Updated Catalan translations. Thanks to VPablo. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Polish translations. Thanks to Mateusz Łukasik. + +Release 0.4.11.1: + * Fix progress and error icons and obsolete pixmaps not working without tiling. + * Fix compilation using Microsoft Visual C++. Thanks to S. Razi Alavizadeh. + +Release 0.4.11: + * Added tiled rendering currently disabled by default. + * Made zooming logarithmic instead of linear. Thanks to Martin Spacek. + * Added displaying various library versions in the about box. Thanks to Martin Spacek. + * Added actions to toggle visibility of tool bars and menu bar. + * Fixed questionably low interval for automatically saving persistent state. Thanks to Martin Spacek. + * Fixed high writing overhead for automatically saving persistent state. Thanks to Boris Popov. + * Fixed building without SQLite support again. Thanks to Sébastien Szymanski. + * Fixed disabling restoring of tabs and bookmarks. Thanks to Benjamin Eltzner. + * Removed extended print options page set and number-up as Qt version 5.2 supports them internally. + * Updated French translations. Thanks to Tubuntu and Sylvie Gallet. + * Updated British English translations. Thanks to A. Kohl, Anthony Harrington and fossfreedom. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Spanish translations. Thanks to Adolfo Jayme. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Catalan translations. Thanks to VPablo. + * Updated Malay translations. Thanks to abuyop. + * Updated Italian translations. Thanks to Claudio Arseni. + * Updated Polish translations. Thanks to Piotr Strębski. + * Updated Russian translations. Thanks to Alexander Volkov. + * Updated Slovak translations. Thanks to DAG Software. + * Added Belarussian translations. Thanks to Yury Yatsynovich. + * Added Thai translations. Thanks to KL. + +Release 0.4.10: + * Fixed race condition when a deleted render task mit tries to emit a signal. Thanks to Benjamin Eltzner. + * Fixed double deletion in recently closed menu. Thanks to Arnaud Schmittbuhl. + * Fixed inconsistency when invoking a unique instance. Thanks to Dorian Scholz. + * Fixed confusing auto-refresh if file is deleted. + * Added using the document title from the meta-data as the tab title. Thanks to Dorian Scholz. + * Added spreading out tabs to fill the whole tab bar. Thanks to Dorian Scholz. + * Added periodically storing persistent state. + * Added opening internal links in a new tab by middle-clicking. + * Added zooming to selection by middle-dragging. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Vietnamese translations. Thanks to Khang Mạnh Tử. + * Updated Indonesian translation. Thanks to Rizal Muttaqin and Trisno Pamuji. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Slovak translations. Thanks to DAG Software. + * Updated Polish translations. Thanks to Piotr Strębski. + * Updated Romainian translations. Thanks to Vlad Paul Paval. + * Updated Portuguese translations. Thanks to Sérgio Marques. + * Updated Malay translations. Thanks abuyop. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Asturian translations. Thanks to Xuacu Saturio. + * Updated Brazilian Portuguese translations. Thanks to Lucas Reis. + +Release 0.4.9: + * Added experimental Fitz plug-in. + * Added action to use text as selection instead of copying to clipboard. + * Added color feedback whether search term was found to help dialog. Thanks to Benjamin Eltzner. + * Added option to switch multiple page layouts into right-to-left mode. Thanks to Abdellah Chelli. + * Added loading of document-supplied defaults. + * Added setting to choose Poppler backend. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Slovak translations. Thanks to DAG Software. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Polish translations. Thanks to Piotr Strębski. + * Updated French translations. Thanks to Pierre Soulat and Arnaud Schmittbuhl. + * Updated Azerbaijani translations. Thanks to Rashid Aliyev. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Malay translations. Thanks to abuyop. + * Updated German translations. Thanks to Benjamin Eltzner. + * Updated Vietnamese translations. Thanks to Khang Mạnh Tử. + * Updated Kazakh translations. Thanks to Baurzhan Muftakhidinov. + * Updated Asturian translations. Thanks to Xuacu Saturio. + * Updated Catalan translations. Thanks to Marc Coll Carrillo and VPablo. + * Updated Spanish translations. Thanks to Aaron Farias. + * Updated Galician translatios. Thanks to Miguel Anxo Bouzada. + * Updated Hebrew translations. Thanks to Yaron Shahrabani. + * Updated Italian translations. Thanks to Claudio Arseni. + +Release 0.4.8: + * Fixed building without SQLite support. Thanks to Franz Fellner. + * Fixed a performance problem when switching to a tab with a fallback outline takes seconds. + * Added optional functionality to restore closed tabs. + * Added zoom functionality to the presentation view. + * Added Vietnamese translations. Thanks to Khang Mạnh Tử. + * Added Swedish translations. Thanks to Martin Linder. + * Updated Bulgarian translations. Thanks to Atanas Kovachki. + * Updated Malay translations. Thanks to abuyop. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated Slovak translations. Thanks to DAG Software. + * Updated Portuguese translations. Thanks to Sérgio Marques. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated Russian translations. Thanks to HsH and Aleksey Kabanov. + * Updated French translations. Thanks to Arnaud Schmittbuhl. + * Updated British English translations. Thanks to Anthony Harrington. + * Updated Catalan translations. Thanks to Marc Coll Carrillo. + * Updated German translations. Thanks to Dennis Baudys. + * Updated Chinese (Simplified) translations. Thanks to Evo Jimmy. + * Updated Malay translations. Thanks to abuyop. + * Updated Azerbaijani translations. Thanks to Rashid Aliyev. + * Updated Polish translations. Thanks to Mateusz Łukasik. + +Release 0.4.7: + * Extended bookmarks storage format to add labelled bookmarks. + * Extended handling of annotations and form fields using overlays. + * Added support for opening execute links and for saving file attachments from annotations. + * Improved parsing of command-line arguments and Workbench integration on AmigaOS. Thanks to Chris Young. + * Improved behaviour of movement keys in certain corner cases. Thanks to Thomas Etter. + * Added keyboard shortcuts to focus current page and scale factor in tool bar. + * Fixed a race condition that could lead to dropping rendered pages. + * Fixed a small issue with adding and removing annotations. + * Added partial Lithunian translation. Thanks to Automatizatorius. + * Added partial Korean translation. Thanks to Litty. + * Updated Czech translations. Thanks to Pavel Fric. + * Updated French translations. Thanks to Arnaud Schmittbuhl, Tubuntu, Pierre Soulat and Teromene. + * Updated Ukrainian translations. Thanks to Yuri Chornoivan. + * Updated British English translations. Thanks to Andi Chandler and Anthony Harrington. + * Updated Malay translations. Thanks to abuyop. + * Updated Italian translations. Thanks to Claudio Arseni. + * Updated Polish translations. Thanks to Mateusz Łukasik and Piotr Strębski. + * Updated Brazilian Portuguese translations. Thanks to Rodrigo Zimmermann. + * Updated German translations. Thanks to Thomas Worofsky, Tobias B. and Benjamin Eltzner. + * Updated Kazakh translations. Thanks to Baurzhan Muftakhidinov. + * Updated Slovak translations. Thanks to DAG Software. + * Updated Bulgarian translations. Thanks to Atanas Kovachki. + * Updated Galician translations. Thanks to Marcos Lans. + * Updated Catalan translations. Thanks to VPablo. + * Updated Greek translations. Thanks to George Christofis. + * Updated Italian translations. Thanks to Giovanni Grieco. + * Updated Spanish translations. Thanks to Adolfo Jayme Barrientos. + * Updated Azerbaijani translations. Thanks to Rashid Aliyev. + +Release 0.4.6: + * Added function that keeps obsolete pixmaps and displays them until final rendering is available. + * Added command-line option that displays a dialog to choose the name of the started instance. + * Added confirmation dialog before closing a modified document. + * Added optional support for device pixel ratios that are unequal to one. + * Added setting to change presentation background. + * Added desktop action for non-unique instances and choosing instances to the desktop entry. + * Fixed loading of translation for Qt dialogs, e.g. the print dialog. + * Added support for translations of online help. Thanks to Yuri Chornoivan. + * Added support for searching of online help. Thanks to Benjamin Eltzner. + * Updated Ukrainian translation and added translation of the online help. Thanks to Yuri Chornoivan. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Galician translation and added partial translation of the online help. Thanks to Marcos Lans. + * Updated Malay translation and added partial translation of the online help. Thanks to abuyop. + * Updated Polish translation and added partial translation of the online help. Thanks to Mateusz Łukasik. + * Updated French translation and added partial translation of the online help. Thanks to Arnaud Schmittbuhl, Pierre Soulat and Pierre Slamich. + * Updated Italian translation and added partial translation of the online help. Thanks to Claudio Arseni. + * Updated Catalan translation. Thanks to Marc Coll Carrillo and VPablo. + * Updated Czech translation and added translation of the online help. Thanks to Pavel Fric. + * Updated Slovak translation and added partial translation of the online help. Thanks to DAG Software. + * Updated Portuguese translation. Thanks to Sérgio Marques. + * Updated British English translation and added partial translation of the online help. Thanks to fossfreedom and Andi Chandler. + * Updated Idonesian translation. Thanks to Trisno Pamuji. + * Updated Azerbaijani translation and added partial translation of the online help. Thanks to Rashid Aliyev. + * Updated Chinese (Simplified) translation and added partial translation of the online help. Thanks to Xiaoxing Ye. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated German translation and added partial translation of the online help. Thanks to Tobias B. and Benjamin Eltzner. + * Added partial Bulgarian translation of the online help. Thanks to Atanas Kovachki. + +Release 0.4.5: + * Fixed an error in drawing the search progress. + * Fixed an error preventing the annotation context menu from being displayed. + * Fixed decorating links when using Qt5. + * Improved the layout of the search widgets. + * Added setting to heuristically synchronize the outline view to the current page. + * Improved thumbnails layout to change between horizontal and vertical according to dock location. + * Updated Malay translation. Thanks to abuyop. + * Updated Ukrainian translation. Thanks to Yuri Chornoivan. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Slovak translation. Thanks to DAG Software. + * Updated German translation. Thanks to A. Kohl. + * Updated Bulgarian translation. Thanks to Blagovest Petrov. + * Updated French translation. Thanks to Arnaud Schmittbuhl. + * Updated Kazakh translation. Thanks to Baurzhan Muftakhidinov. + +Release 0.4.4: + * Improved building on Windows and OS/2 and plug-in handling on all platforms. Thanks to Silvan Scherrer. + * Added button to revert only the settings on the current tab of the settings dialog to their defaults. + * Added tool tip showing paper size to the thumbnails view. + * Added setting for number of entries in the recently used list. + * Updated Russian translation. Thanks to Kyrill Detinov and Rashid Aliyev. + * Updated Azerbaijani translation. Thanks to Rashid Aliyev. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith. + * Updated Spanish translation. Thanks to Adolfo Jayme Barrientos. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Ukrainian translation. Thanks to Yuri Chornoivan. + * Updated Esperanto translation. Thanks to Eliovir. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Galician translation. Thanks to Marcos Lans. + * Updated Romanian translation. Thanks to Vlad Paul Paval. + * Updated Malay translation. Thanks to abuyop. + * Updated British English translation. Thanks to Andi Chandler. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Polish translation. Thanks to Mateusz Łukasik. + * Updated Croatian translation. Thanks to freedomrun. + * Updated French translation. Thanks to Teromene. + * Added Portuguese translation. Thanks to Sérgio Marques. + * Added Kazakh translation. Thanks to Baurzhan Muftakhidinov. + +Release 0.4.3: + * Fixed custom movement shortcuts not being activated after program initialization. + * Fixed default scroll area shortcuts not being shadowed completely. + * Fixed outline view layout on open and refresh and trying to set resize mode of non-existent outline view columns. + * Increased auto-refresh timeout and made auto-refresh and prefetch timeouts configurable. + * Improved drawing of search result highlights and added a setting for the highlight color. + * Added command-line options '--quiet' and '--help'. + * Added support for multiple shortcuts for each action. + * Added option to highlight the current thumbnail. + * Updated Ukrainian translation. Thanks to Yuri Chornoivan. + * Updated Malay translation. Thanks to abuyop. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Croatian translation. Thanks to freedomrun. + * Updated Polish translation. Thanks to Mateusz Łukasik. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated French translation. Thanks to Hélion du Mas des Bourboux and Dorian. + * Updated Catalan translation. Thanks to VPablo. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated Asturian translation. Thanks to Xuacu Saturio. + * Updated British English translation. Thanks to Andi Chandler. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith. + * Updated Romanian translation. Thanks to Vlad Paul Paval. + * Added Galician translation. Thanks to Marcos Lans and Miguel Anxo Bouzada. + +Release 0.4.2: + * Refactoring to improve code size and quality. + * Added restoring and saving of printer settings. + * Added command-line option to initiate a search in the current tab. + * Added setting to determine the color of annotations added. + * Instead of return to page, there is now jump backward and forward. + * Added setting to limit thumbnails to search results. + * Added setting on where to open new tabs. + * Added setting to display the current page in the window title. + * Updated Czech translation. Thanks Pavel Fric. + * Updated Malay translation. Thanks to abuyop. + * Updated French translation. Thanks to Tubuntu and Hélion du Mas des Bourboux. + * Updated Ukrainian translation. Thanks to Yuri Chornoivan. + * Updated Polish translation. Thanks to isamu715 and Mateusz Łukasik. + * Updated Azerbaijani translation. Thanks to Rashid Aliyev. + * Updated Romanian translation. Thanks to Vlad Paul Paval. + * Updated Bulgarian translation. Thanks to Blagovest Petrov. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Russian translation. Thanks to Eugene Marshal and Ivlev Denis. + * Updated British English translation. Thanks to fossfreedom. + * Updated Croatian translation. Thanks to freedomrun and Paolo Pelesk. + * Updated Spanish translation. Thanks to Adolfo Jayme Barrientos and Aaron Farias. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Catalan translation. Thanks to VPablo. + * Updated Chinese (Simplified) translation. Thanks to Wang Dianjin. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith. + +Release 0.4.1: + * Added configurable keyboard shortcuts. + * Added per-plug-in settings for PDF and PS plug-ins. + * Added granular hinting and thin line mode settings for the PDF plug-in. + * Added progress and errors icons for page rendering. + * Added workaround for overwriting a file with itself using a temporary file. + * Added rudimentary text extraction and search support for DjVu documents. + * Changed color inversion to be a per-tab property. + * Improved rotation and color inversion in the presentation view. + * Updated Danish translation. Thanks to Aputsiaq Niels Janussen. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Polish translation. Thanks to Mateusz Łukasik and isamu715. + * Updated Malay translation. Thanks to abuyop. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Russian translation. Thanks to Kyrill Detinov. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith. + * Updated Danish translation. Thanks to Aputsiaq Niels Janussen. + * Updated French translation. Thanks to Sylvie Gallet and Tubuntu. + * Updated Catalan translation. Thanks to VPablo. + * Updated Spanish translation. Thanks to Adolfo Jayme Barrientos. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated Ukrainian translation. Thanks to yurchor. + * Updated British English translation. Thanks to Andi Chandler. + * Added Esperanto translation. Thanks to Donald Rogers. + * Added Bulgarian translation. Thanks to Atanas Kovachki and Blagovest Petrov. + * Added partial Azerbaijani translation. Thanks to Rashid Aliyev. + +Release 0.4: + * Added support for multiple formats. + * Added format detection using libmagic. + * Added support for PostScript. Thanks to Alexander Volkov. + * Added rudimentary support for DjVu. + * Added support for hyperlinks in DjVu documents. Thanks to Alexander Volkov. + * Added support for outline and properties of DjVu documents. + * Added support for UNIX signals. + * Added missing support for links to external documents. + * Small improvements to prefetching. + * Changed presentation view to support rotation, caching and prefetching. + * Dropped support for storing tabs and bookmarks as XML files. + * Improved handling of headers and their interdependencies. Thanks to Alexander Volkov. + * Updated Ukrainian translation. Thanks to Vladimir Smolyar and yurchor. + * Updated Croatian translation. Thanks to freedomrun. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated British English translation. Thanks to Andi Chandler. + * Updated French translation. Thanks to Hélion du Mas des Bourboux. + * Updated Polish translation. Thanks to Mateusz Łukasik and Mike08. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated Catalan translation. Thanks to VPablo. + * Updated Asturian translation. Thanks to Xuacu Saturio. + * Updated French translation. Thanks to Sylvie Gallet and Tanguy Herrmann. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Spanish translation. Thanks to Dante Diaz. + * Updated Russian translation. Thanks to Vladimir Smolyar. + * Updated Bosnian translation. Thanks to Kenan Dervišević. + * Added Malay translation. Thanks to abuyop. + +Release 0.3.7: + * Added persistent per-file settings. + * Separated "Save copy" and "Save as" functionality. + * Added extended print option "page ranges". + * Added configurable background and paper color. + * Added named instances. Thanks to Michał Trybus. + * Refactored settings handling. Thanks to Alexander Volkov. + * Reduced header interdependencies. Thanks to Alexander Volkov. + * Changed searching for data files in the "data" subdirectory of the application directory. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated Italian translation. Thanks to Claudio Arseni. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Brazilian Portuguese translation. Thanks to Átila Camurça and Phillipe Smith. + * Updated Asturian translation. Thanks to Xuacu Saturio. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Danish translation. Thanks to Daniel Ejsing-Duun and Aputsiaq Niels Janussen. + * Updated Romanian translation. Thanks to Vlad Paul Paval. + * Updated Catalan translation. Thanks to VPablo. + * Updated Russian translation. Thanks to Nkolay Parukhin. + * Updated Spanish translation. Thanks to Adolfo Jayme Barrientos. + * Updated Uyghur translation. Thanks to Gheyret T.Kenji and Sahran. + * Updated Croatian translation. Thanks to freedomrun. + * Added Bosnian translation. Thanks to Kenan Dervišević. + * Added Polish translation. Thanks to Michał Trybus. + * Added Basque translation. Thanks to Asier Iturralde Sarasola. + * Added partial Kirgiz translation. Thanks to blacktext. + * Added partial Indonesian translation. Thanks to Abdul Munif Hanafi. + +Release 0.3.6: + * Added a 'multiple pages' layout mode. + * Added support for extended options in the print dialog. + * Added support for multiple returns. + * Added rudimentary form support. + * Fixed handling of boolean CUPS options. + * Exposed render hint 'overprint preview'. + * Added viewport culling for the thumbnails view. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Czech translation. Thanks Pavel Fric. + * Updated Hebrew translation. Thanks to Yaron Shahrabani. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith and Rafael Neri. + * Updated Spanish translation. Thanks to Adolfo Jayme Barrientos, manolox and Daniel Ejsing-Duun. + * Updated Croatian translation. Thanks to freedomrun and gogo. + * Updated French translation. Thanks to Aurélien Ribeiro, Dominique Chomet, Quentin Pagès and Gisele Perreault. + * Updated Greek translation. Thanks to George Christofis. + * Updated Russian translation. Thanks to Kyrill Detinov and Vladimir Smolyar. + * Updated Ukrainian translation. Thanks to Vladimir Smolyar. + * Added Danish translation. Thanks to mjjzf, Ask Hjorth Larsen and Daniel Ejsing-Duun. + * Added partial Uyghur translation. Thanks to Gheyret T.Kenji. + * Added British English translation. Thanks to Andi Chandler. + * Added Italian translation. Thanks to Claudio Arseni. + * Added Romanian translation. Thanks to Vlad Paul Paval. + * Added partial Chinese (Simplified) translation. Thanks to Wang Dianjin. + * Added partial Burmese translation. Thanks to Pyae Sone. + * Added Catalan translation. Thanks to VPablo. + +Release 0.3.5: + * Improved compatibility with older versions of Qt and Poppler. + * Improved the layout of the settings dialog. + * Improved compatibility with other applications using Poppler by cropping text annotations to 24px x 24px @ 72dpi. + * Added searching data files in the application directory to improve compatibility with Windows and OS/2. + * Added a 'save image to file' option to the 'copy to clipboard' pop-up menu. + * Added support for forward and inverse search using SyncTeX. + * Updated Slovak and Czech translations. Thanks to DAG Software and Pavel Fric. + * Updated Brazilian Portuguese translation. Thanks to Phillipe Smith and Fábio Nogueira. + * Updated Russian and Ukrainian translations. Thanks to Vladimir Smolyar. + * Added Hebrew translation. Thanks to Yaron Shahrabani. + * Updated partial Greek translation. Thanks to George Christofis. + * Added Turkish translation. Thanks to Şâkir Aşçı. + * Added partial Croation translation. Thanks to freedomrun. + * Added partial Finnish translation. Thanks to Eetu Aalto. + * Added partial Asturian translation. Thanks to Xuacu Saturio. + * Added partial French translation. Thanks to Baptiste Fontaine, Kévin Peignot, Smonff, Sylvie Gallet, fbn69 and Gisele Perreault. + * Added partial Spanish translation. Thanks to Adolfo Jayme Barrientos, Dante Díaz and Paco Molinero. + +Release 0.3.4: + * Fixed a crash when highlight all is enabled and the document is refreshed. + * Fixed problems with highlight all and find next. + * Added a setting to select the screen used in the presentation view. + * Added a setting to synchronize main view and presentation view. + * Added a 'Two pages with cover page' layout mode. + * Added delayed pop-up menu for 'recently used' to 'open (in new tab)' tool bar action. + * Added Brazilian Portuguese translation. Thanks to Phillipe Smith. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Russian and Ukrainian translations. Thanks to Vladimir Smolyar. + +Release 0.3.3: + * Fixed some rendering artifacts. + * Improved navigation using bookmarks. + * Reorganized settings dialog and made keyboard modifiers for several mouse actions configurable. + * Added menu and tool bar actions to copy texts or images or add annotations. + * Added Ukrainian translation. Thanks to Vladimir Smolyar. + * Updated Slovak translation. Thanks to DAG Software. + * Updated Czech translation. Thanks to Pavel Fric. + * Updated Russian translation. Thanks to Eugene Marshal and Vladimir Smolyar. + +Release 0.3.2: + * Reduced code size and complexity. + * Reduced memory consumption and made caching optional. + * Further interface consolidation. + * Changed the search interface to allow concurrent search processes. + * Replaced the transient bookmarking mechanism in the document view with an optionally persistent bookmarking mechanism in the main window which bookmarks files and pages. + * Added rudimentary annotation support. + * Added '--unique' command-line option to the system-wide launcher. + * Added Czech translation. Thanks to Pavel Fric. + * Added partial Greek translation. Thanks to athmakrigiannis. + * Added partial Russian translation. Thanks to v_2e. + * Added Slovak translation. Thanks to DAG Software. + +Release 0.3.1: + * Fixed several bugs. + * Changed license from GPLv3 to GPLv2 to remove license incompatibilities with poppler. + * Removed French, Ukrainian and Russian translations because of license change. + +Release 0.3: + * Focus on usability of the interface. + * Improved scaling. + * Added printing using CUPS. + * Added configurable tool bars. + * Added build-time options. + * Improved documentation. + * Updated German translation. + * Updated Russian translation. Thanks to Eugene Marshal. + +Release 0.2.2: + * Improved settings dialog. + * Improved thumbnails view. + * Added recenctly used menu. + * Added presentation view. + * Added automatic refresh. + * Added simple transient bookmarks mechanism. + * Added '--unique' command-line option. + * Added some help content and updated the manual page. Thanks to Benjamin Eltzner. + * Updated French translation. Thanks to Fabian Pijcke. + * Added partial Romanian translation. Thanks to Andi Cristian Șerbănescu. + +Release 0.2.1: + * Extensive refactoring. + * Improved search. + * Simplified text-selection. + * Added outline and thumbnails view. + * Added settings dialog. + * Added French translation. Thanks to Glad Deschrijver. + * Added partial Russian, Belorussian and Ukrainian translations. Thanks to Leo Romanovski. + +Release 0.2: + * Complete rewrite introducing background rendering. + * Added rudimentary support for search and text-selection. + * Limited page cache by byte count instead of image count. diff --git a/CONTRIBUTORS b/CONTRIBUTORS new file mode 100644 index 0000000..dd492b7 --- /dev/null +++ b/CONTRIBUTORS @@ -0,0 +1,138 @@ +Eetu Aalto +S. Razi Alavizadeh +Automatizatorius +abuyop +Ganesh Ajjanagadde +Rashid Aliyev +Claudio Arseni +Şâkir Aşçı +athmakrigiannis +Marshall Banana +Martin Banky +Dennis Baudys +Adolfo Jayme Barrientos +blacktext +Felipe Braga +Hélion du Mas des Bourboux +Miguel Anxo Bouzada +Tobias B. +Átila Camurça +Marc Coll Carrillo +Andi Chandler +Abdellah Chelli +Dominique Chomet +Yuri Chornoivan +George Christofis +Consus +DAG Software +Ivlev Denis +Kenan Dervišević +Glad Deschrijver +Kyrill Detinov +Wang Dianjin +Dante Díaz +djcj +Dorian +Daniel Ejsing-Duun +electricface +Eliovir +Benjamin Eltzner +Thomas Etter +Aaron Farias +fbn69 +Baptiste Fontaine +fossfreedom +freedomrun +Franz Fellner +Pavel Fric +Sylvie Gallet +gogo +Giovanni Grieco +Guillermo +Abdul Munif Hanafi +Anthony Harrington +Tanguy Herrmann +HsH +isamu715 +Aputsiaq Niels Janussen +Evo Jimmy +Aleksey Kabanov +KL +A. Kohl +Oleg Koptev +Atanas Kovachki +Marcos Lans +Ask Hjorth Larsen +Jerome Laurens +Martin Linder +Litty +Mateusz Łukasik +manolox +Jean Marc +Eugene Marshal +Sérgio Marques +Mike08 +mjjzf +Charles Monzat +Paco Molinero +Moo +Baurzhan Muftakhidinov +Rizal Muttaqin +ned +Rafael Neri +Fábio Nogueira +Bendik R. Opstad +Sandor Ortegon +Quentin Pagès +Trisno Pamuji +Nkolay Parukhin +Vlad Paul Paval +Kévin Peignot +Paolo Pelesk +Gisele Perreault +Blagovest Petrov +Fabian Pijcke +Eugene Pivnev +Boris Popov +Adam Reichold +Páder Rezső +Lucas Reis +Aurélien Ribeiro +Rockworld +Donald Rogers +Leo Romanovski +Pavel Sanda +Sahran +Asier Iturralde Sarasola +Xuacu Saturio +Timo Seppola +Andi Cristian Șerbănescu +Silvan Scherrer +Arnaud Schmittbuhl +Dorian Scholz +Yaron Shahrabani +Pierre Slamich +Mark Smith +Phillipe Smith +Vladimir Smolyar +Smonff +Pyae Sone +Pierre Soulat +Martin Spacek +Piotr Strębski +Sébastien Szymanski +Teromene +Gheyret T.Kenji +Michał Trybus +Tubuntu +Khang Mạnh Tử +VPablo +Alexander Volkov +Thomas Worofsky +Yury Yatsynovich +Xiaoxing Ye +Koji Yokota +Chris Young +☠Jay ZDLin☠ +Egor Zenkov +Rodrigo Zimmermann diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + 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 Lesser 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 Lesser General +Public License instead of this License. diff --git a/README b/README new file mode 100644 index 0000000..4c3e24c --- /dev/null +++ b/README @@ -0,0 +1,36 @@ +qpdfview is a tabbed document viewer using Poppler, libspectre, DjVuLibre, CUPS and Qt, licensed under GPL version 2 or later. + +The project homepage is "https://launchpad.net/qpdfview". The project maintainer is "Adam Reichold ". + +It depends on libQtCore, libQtGui. It also depends on libQtSvg, libQtSql, libQtDBus, libcups, resp. libz if SVG, SQL, D-Bus, CUPS, resp. SyncTeX support is enabled. It also depends on libmagic if Qt version 4 is used and libmagic support is enabled. The PDF plug-in depends on libQtCore, libQtXml, libQtGui and libpoppler-qt4 or libpoppler-qt5. The PS plug-in depends on libQtCore, libQtGui and libspectre. The DjVu plug-in depends on libQtCore, libQtGui and libdjvulibre. The Fitz plug-in depends on libQtCore, libQtGui and libmupdf. + +The Fitz plug-in is currently considered experimental due to the lack of a maintainer. It also lacks support for various features, e.g. meta-data, encryption, text search, text extraction, form fields and annotations. + +It is built using "lrelease qpdfview.pro", "qmake qpdfview.pro" and "make". It is installed using "make install". The installation paths are defined in "qpdfview.pri". + +The following build-time options are available: + * 'without_svg' disables SVG support, i.e. fallback and application-specific icons will not be available. + * 'without_sql' disables SQL support, i.e. restoring tabs, bookmarks and per-file settings will not be available. + * 'without_dbus' disables D-Bus support, i.e. the '--unique' command-line option will not be available. + * 'without_pkgconfig' disables the use of pkg-config, i.e. compiler and linker options have to be configured manually in "qpdfview.pri". + * 'without_pdf' disables PDF support, i.e. the PDF plug-in using Poppler will not be built. + * 'without_ps' disables PS support, i.e. the PS plug-in using libspectre will not be built. + * 'without_djvu' disables DjVu support, i.e. the DjVu plug-in using DjVuLibre will not be built. + * 'with_fitz' enables Fitz support, i.e. the Fitz plug-in using MuPDF will be built. + * 'without_image' disable image support, i.e. the plug-in using Qt's built-in image I/O will not be built. + * 'static_pdf_plugin' links the PDF plug-in statically (This could lead to linker dependency collisions.) + * 'static_ps_plugin' links the PS plug-in statically. (This could lead to linker dependency collisions.) + * 'static_djvu_plugin' links the DjVu plug-in statically. (This could lead to linker dependency collisions.) + * 'static_fitz_plugin' links the Fitz plug-in statically. (This could lead to linker dependency collisions.) + * 'static_image_plugin' links the image plug-in statically. + * 'without_cups' disables CUPS support, i.e. the program will attempt to rasterize the document instead of requesting CUPS to print the document file. + * 'without_synctex' disables SyncTeX support, i.e. the program will not perform forward and inverse search for sources. + * 'without_magic' disables libmagic support, i.e. the program will determine file type using the file suffix. + * 'without_signals' disabled support for UNIX signals, i.e. the program will not save bookmarks, tabs and per-file settings on receiving SIGINT or SIGTERM. + * 'with_lto' enables link time optimizations for the application binary to reduce its size and improve its performance. + * 'static_resources' to statically embed resources like translations and online help into the application binary. + * 'plugin_resolve_all' to enable early symbol resolution in plug-ins to be more robust when incompatible libraries are installed. + +For example, if one wants to build the program without support for CUPS and PostScript, one could run "qmake CONFIG+="without_cups without_ps" qpdfview.pro" instead of "qmake qpdfview.pro". + +The fallback and application-specific icons are derived from the Tango icon theme available at "http://tango.freedesktop.org". diff --git a/TODO b/TODO new file mode 100644 index 0000000..2f68d0f --- /dev/null +++ b/TODO @@ -0,0 +1,15 @@ +* improve DjVu support +* add DVI support +* add ePUB support +* add CHM support + +* rewrite tool support +* add annotations dock + +* improve text-selection support +* improve link support +* improve annotation support +* improve form support + +* add code documentation +* investigate integration with KDE Frameworks diff --git a/application.pro b/application.pro new file mode 100644 index 0000000..509f6e2 --- /dev/null +++ b/application.pro @@ -0,0 +1,299 @@ +include(qpdfview.pri) + +TARGET = qpdfview +TEMPLATE = app + +OBJECTS_DIR = objects +MOC_DIR = moc + +HEADERS += \ + sources/global.h \ + sources/renderparam.h \ + sources/printoptions.h \ + sources/settings.h \ + sources/model.h \ + sources/pluginhandler.h \ + sources/shortcuthandler.h \ + sources/rendertask.h \ + sources/tileitem.h \ + sources/pageitem.h \ + sources/thumbnailitem.h \ + sources/presentationview.h \ + sources/searchmodel.h \ + sources/searchitemdelegate.h \ + sources/searchtask.h \ + sources/miscellaneous.h \ + sources/documentlayout.h \ + sources/documentview.h \ + sources/printdialog.h \ + sources/settingsdialog.h \ + sources/fontsdialog.h \ + sources/helpdialog.h \ + sources/recentlyusedmenu.h \ + sources/recentlyclosedmenu.h \ + sources/bookmarkmodel.h \ + sources/bookmarkmenu.h \ + sources/bookmarkdialog.h \ + sources/database.h \ + sources/mainwindow.h + +SOURCES += \ + sources/settings.cpp \ + sources/pluginhandler.cpp \ + sources/shortcuthandler.cpp \ + sources/rendertask.cpp \ + sources/tileitem.cpp \ + sources/pageitem.cpp \ + sources/thumbnailitem.cpp \ + sources/presentationview.cpp \ + sources/searchmodel.cpp \ + sources/searchitemdelegate.cpp \ + sources/searchtask.cpp \ + sources/miscellaneous.cpp \ + sources/documentlayout.cpp \ + sources/documentview.cpp \ + sources/printdialog.cpp \ + sources/settingsdialog.cpp \ + sources/fontsdialog.cpp \ + sources/helpdialog.cpp \ + sources/recentlyusedmenu.cpp \ + sources/recentlyclosedmenu.cpp \ + sources/bookmarkmenu.cpp \ + sources/bookmarkdialog.cpp \ + sources/bookmarkmodel.cpp \ + sources/database.cpp \ + sources/mainwindow.cpp \ + sources/main.cpp + +DEFINES += APPLICATION_VERSION=\\\"$${APPLICATION_VERSION}\\\" + +with_lto { + QMAKE_CFLAG += -flto + QMAKE_CXXFLAGS += -flto + QMAKE_LFLAGS += -flto +} + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += concurrent widgets printsupport + +!without_svg { + DEFINES += WITH_SVG + QT += svg + + RESOURCES += icons.qrc +} + +!without_sql { + DEFINES += WITH_SQL + QT += sql +} + +!without_dbus { + DEFINES += WITH_DBUS + QT += dbus +} + +isEmpty(QMAKE_EXTENSION_SHLIB):QMAKE_EXTENSION_SHLIB = "so" +isEmpty(QMAKE_EXTENSION_STATICLIB):QMAKE_EXTENSION_STATICLIB = "a" + +DEFINES += PLUGIN_INSTALL_PATH=\\\"$${PLUGIN_INSTALL_PATH}\\\" + +plugin_resolve_all { + DEFINES += PLUGIN_RESOLVE_ALL +} + +!without_pdf { + DEFINES += WITH_PDF + + !without_pkgconfig:POPPLER_VERSION = $$system(pkg-config --modversion poppler-qt$${QT_MAJOR_VERSION}) + DEFINES += POPPLER_VERSION=\\\"$${POPPLER_VERSION}\\\" + + static_pdf_plugin { + isEmpty(PDF_PLUGIN_NAME):PDF_PLUGIN_NAME = $${QMAKE_PREFIX_STATICLIB}qpdfview_pdf.$${QMAKE_EXTENSION_STATICLIB} + + DEFINES += STATIC_PDF_PLUGIN + LIBS += $$PDF_PLUGIN_NAME $$PDF_PLUGIN_LIBS + PRE_TARGETDEPS += $$PDF_PLUGIN_NAME + + QT += xml + + !without_pkgconfig { + CONFIG += link_pkgconfig + PKGCONFIG += poppler-qt$${QT_MAJOR_VERSION} + } + } else { + isEmpty(PDF_PLUGIN_NAME):PDF_PLUGIN_NAME = $${QMAKE_PREFIX_SHLIB}qpdfview_pdf.$${QMAKE_EXTENSION_SHLIB} + } + + DEFINES += PDF_PLUGIN_NAME=\\\"$${PDF_PLUGIN_NAME}\\\" +} + +!without_ps { + DEFINES += WITH_PS + + !without_pkgconfig:LIBSPECTRE_VERSION = $$system(pkg-config --modversion libspectre) + DEFINES += LIBSPECTRE_VERSION=\\\"$${LIBSPECTRE_VERSION}\\\" + + static_ps_plugin { + isEmpty(PS_PLUGIN_NAME):PS_PLUGIN_NAME = $${QMAKE_PREFIX_STATICLIB}qpdfview_ps.$${QMAKE_EXTENSION_STATICLIB} + + DEFINES += STATIC_PS_PLUGIN + LIBS += $$PS_PLUGIN_NAME $$PS_PLUGIN_LIBS + PRE_TARGETDEPS += $$PS_PLUGIN_NAME + + !without_pkgconfig { + CONFIG += link_pkgconfig + PKGCONFIG += libspectre + } + } else { + isEmpty(PS_PLUGIN_NAME):PS_PLUGIN_NAME = $${QMAKE_PREFIX_SHLIB}qpdfview_ps.$${QMAKE_EXTENSION_SHLIB} + } + + DEFINES += PS_PLUGIN_NAME=\\\"$${PS_PLUGIN_NAME}\\\" +} + +!without_djvu { + DEFINES += WITH_DJVU + + !without_pkgconfig:DJVULIBRE_VERSION = $$system(pkg-config --modversion ddjvuapi) + DEFINES += DJVULIBRE_VERSION=\\\"$${DJVULIBRE_VERSION}\\\" + + static_djvu_plugin { + isEmpty(DJVU_PLUGIN_NAME):DJVU_PLUGIN_NAME = $${QMAKE_PREFIX_STATICLIB}qpdfview_djvu.$${QMAKE_EXTENSION_STATICLIB} + + DEFINES += STATIC_DJVU_PLUGIN + LIBS += $$DJVU_PLUGIN_NAME $$DJVU_PLUGIN_LIBS + PRE_TARGETDEPS += $$DJVU_PLUGIN_NAME + + !without_pkgconfig { + CONFIG += link_pkgconfig + PKGCONFIG += ddjvuapi + } + } else { + isEmpty(DJVU_PLUGIN_NAME):DJVU_PLUGIN_NAME = $${QMAKE_PREFIX_SHLIB}qpdfview_djvu.$${QMAKE_EXTENSION_SHLIB} + } + + DEFINES += DJVU_PLUGIN_NAME=\\\"$${DJVU_PLUGIN_NAME}\\\" +} + +with_fitz { + DEFINES += WITH_FITZ + + DEFINES += FITZ_VERSION=\\\"$${FITZ_VERSION}\\\" + + static_fitz_plugin { + isEmpty(FITZ_PLUGIN_NAME):FITZ_PLUGIN_NAME = $${QMAKE_PREFIX_STATICLIB}qpdfview_fitz.$${QMAKE_EXTENSION_STATICLIB} + + DEFINES += STATIC_FITZ_PLUGIN + LIBS += $$FITZ_PLUGIN_NAME $$FITZ_PLUGIN_LIBS + PRE_TARGETDEPS += $$FITZ_PLUGIN_NAME + + isEmpty(FITZ_PLUGIN_LIBS) { + LIBS += -lmupdf -lfreetype -ljbig2dec -lopenjp2 -ljpeg -lz -lm + } else { + LIBS += $$FITZ_PLUGIN_LIBS + } + } else { + isEmpty(FITZ_PLUGIN_NAME):FITZ_PLUGIN_NAME = $${QMAKE_PREFIX_SHLIB}qpdfview_fitz.$${QMAKE_EXTENSION_SHLIB} + } + + DEFINES += FITZ_PLUGIN_NAME=\\\"$${FITZ_PLUGIN_NAME}\\\" +} + +!without_image { + DEFINES += WITH_IMAGE + + static_image_plugin { + isEmpty(IMAGE_PLUGIN_NAME):IMAGE_PLUGIN_NAME = $${QMAKE_PREFIX_STATICLIB}qpdfview_image.$${QMAKE_EXTENSION_STATICLIB} + + DEFINES += STATIC_IMAGE_PLUGIN + LIBS += $$IMAGE_PLUGIN_NAME $$IMAGE_PLUGIN_LIBS + PRE_TARGETDEPS += $$IMAGE_PLUGIN_NAME + } + else { + isEmpty(IMAGE_PLUGIN_NAME):IMAGE_PLUGIN_NAME = $${QMAKE_PREFIX_SHLIB}qpdfview_image.$${QMAKE_EXTENSION_SHLIB} + } + + DEFINES += IMAGE_PLUGIN_NAME=\\\"$${IMAGE_PLUGIN_NAME}\\\" +} + +!without_cups { + DEFINES += WITH_CUPS + + isEmpty(CUPS_VERSION):CUPS_VERSION = $$system(cups-config --version) + isEmpty(CUPS_LIBS):CUPS_LIBS = $$system(cups-config --libs) + + DEFINES += CUPS_VERSION=\\\"$${CUPS_VERSION}\\\" + LIBS += $$CUPS_LIBS +} + +!without_synctex { + DEFINES += WITH_SYNCTEX + + !without_pkgconfig:system(pkg-config --exists synctex) { + CONFIG += link_pkgconfig + PKGCONFIG += synctex + + system(pkg-config --atleast-version=1.19 synctex):DEFINES += HAS_SYNCTEX_2 + } else { + HEADERS += synctex/synctex_parser.h synctex/synctex_parser_utils.h synctex/synctex_parser_local.h + SOURCES += synctex/synctex_parser.c synctex/synctex_parser_utils.c + + INCLUDEPATH += synctex + LIBS += -lz + } +} + +lessThan(QT_MAJOR_VERSION, 5) : !without_magic { + DEFINES += WITH_MAGIC + LIBS += -lmagic +} + +!without_signals { + DEFINES += WITH_SIGNALS + + HEADERS += sources/signalhandler.h + SOURCES += sources/signalhandler.cpp +} + + +static_resources { + RESOURCES += help.qrc translations.qrc +} + +DEFINES += DATA_INSTALL_PATH=\\\"$${DATA_INSTALL_PATH}\\\" + + +DESKTOP_FILE = miscellaneous/qpdfview.desktop +APPDATA_FILE = miscellaneous/qpdfview.appdata.xml + +!without_pdf|with_fitz:MIME_TYPES += application/pdf application/x-pdf text/pdf text/x-pdf image/pdf image/x-pdf +!without_ps:MIME_TYPES += application/postscript +!without_djvu:MIME_TYPES += image/vnd.djvu image/x-djvu + +system("sed -e \"s:DATA_INSTALL_PATH:$${DATA_INSTALL_PATH}:\" -e \"s:MIME_TYPES:$$join(MIME_TYPES,";","",";"):\" $${DESKTOP_FILE}.in > $${DESKTOP_FILE}") + + +target.path = $${TARGET_INSTALL_PATH} + +data.files = translations/*.qm help/help*.html +data.path = $${DATA_INSTALL_PATH} + +manual.files = miscellaneous/qpdfview.1 +manual.path = $${MANUAL_INSTALL_PATH} + +icon.files = icons/qpdfview.svg +icon.path = $${ICON_INSTALL_PATH} + +launcher.files = $${DESKTOP_FILE} +launcher.path = $${LAUNCHER_INSTALL_PATH} + +appdata.files = $${APPDATA_FILE} +appdata.path = $${APPDATA_INSTALL_PATH} + +INSTALLS += target data manual icon launcher appdata + +INCLUDEPATH += icons +win32:RC_FILE = icons/qpdfview_win32.rc +os2:RC_FILE = icons/qpdfview_os2.rc diff --git a/djvu-plugin.pro b/djvu-plugin.pro new file mode 100644 index 0000000..651f627 --- /dev/null +++ b/djvu-plugin.pro @@ -0,0 +1,33 @@ +include(qpdfview.pri) + +TARGET = qpdfview_djvu +TEMPLATE = lib +CONFIG += plugin +static_djvu_plugin:CONFIG += static + +TARGET_SHORT = qpdfdjvu +!isEmpty(PLUGIN_DESTDIR): DESTDIR = $$PLUGIN_DESTDIR + +OBJECTS_DIR = objects-djvu +MOC_DIR = moc-djvu + +HEADERS = sources/model.h sources/djvumodel.h +SOURCES = sources/djvumodel.cpp + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +!without_pkgconfig { + CONFIG += link_pkgconfig + PKGCONFIG += ddjvuapi +} else { + DEFINES += $$DJVU_PLUGIN_DEFINES + INCLUDEPATH += $$DJVU_PLUGIN_INCLUDEPATH + LIBS += $$DJVU_PLUGIN_LIBS +} + +!static_djvu_plugin { + target.path = $${PLUGIN_INSTALL_PATH} + INSTALLS += target +} diff --git a/fitz-plugin.pro b/fitz-plugin.pro new file mode 100644 index 0000000..48d885b --- /dev/null +++ b/fitz-plugin.pro @@ -0,0 +1,30 @@ +include(qpdfview.pri) + +TARGET = qpdfview_fitz +TEMPLATE = lib +CONFIG += plugin +static_fitz_plugin:CONFIG += static + +TARGET_SHORT = qpdffitz +!isEmpty(PLUGIN_DESTDIR): DESTDIR = $$PLUGIN_DESTDIR + +OBJECTS_DIR = objects-fitz +MOC_DIR = moc-fitz + +HEADERS = sources/model.h sources/fitzmodel.h +SOURCES = sources/fitzmodel.cpp + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +DEFINES += $$FITZ_PLUGIN_DEFINES +INCLUDEPATH += $$FITZ_PLUGIN_INCLUDEPATH + +isEmpty(FITZ_PLUGIN_LIBS):FITZ_PLUGIN_LIBS = -lmupdf -lmupdfthird +LIBS += $$FITZ_PLUGIN_LIBS + +!static_fitz_plugin { + target.path = $${PLUGIN_INSTALL_PATH} + INSTALLS += target +} diff --git a/help.qrc b/help.qrc new file mode 100644 index 0000000..962ad9e --- /dev/null +++ b/help.qrc @@ -0,0 +1,35 @@ + + + help/help_az.html + help/help_bg.html + help/help_ca.html + help/help_cs.html + help/help_da.html + help/help_de.html + help/help_en_GB.html + help/help_es.html + help/help_fa.html + help/help_fi.html + help/help_fr.html + help/help_gl.html + help/help.html + help/help_it.html + help/help_ja.html + help/help_ko.html + help/help_ku.html + help/help_lt.html + help/help_ms.html + help/help_pl.html + help/help_pt_BR.html + help/help_pt.html + help/help_ru.html + help/help_sk.html + help/help_sr.html + help/help_sv.html + help/help_tr.html + help/help_uk.html + help/help_vi.html + help/help_zh_CN.html + help/help_zh_TW.html + + diff --git a/help/help.html b/help/help.html new file mode 100644 index 0000000..666013f --- /dev/null +++ b/help/help.html @@ -0,0 +1,299 @@ + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new tabs.
  • +
  • Recently used Contains a list of the most recently used files (if enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of displayed page.
  • +
  • Search... Opens the search dock below the main view. The search automatically starts two seconds after the last change of the search term or is manually started by pressing the return key. If the Shift modifier is held when the return key is pressed, the search starts in all tabs instead of just the current tab. (This effect is reversed if the extended search dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' will revert all settings on all tabs to their default values. The button labeled 'Defaults on current tab' will revert only the settings on the current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into the text field in the edit tool bar, which can be focused using Ctrl+K, and pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted colors.
  • +
  • Convert to grayscale Determines whether pages are converted to grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after rendering.
  • +
  • Composition Enables the composition of the rendered page with the paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by pressing F12 or escape. The home/end key is used to display the first/last page. Arrow keys right and down, space and the page down key jump to the next page. Arrow keys left and up, backspace and the page up key jump to the previous page. Pressing control and return jumps back to the page before the last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage into the text field in the view tool bar, which can be focused using Ctrl+L, and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by clicking on the corresponding menu item. Tabs can also be closed by middle-clicking. The first nine tabs can also be activated by holding the Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding file is already open. Otherwise the corresponding file is opened in a new tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key skips to the first/last page. The arrow, page up and page down keys scroll the viewport. Pressing control and return jumps to the page before the last jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using the mouse wheel scrolls left and right. Holding CTRL while using the mouse wheel scales the document. Holding SHIFT while using the mouse wheel rotates the document. (Keyboard modifiers can be changed in the settings dialog.) Click and hold the middle mouse button to select a rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click on a link to show the linked page or open the linked URL in the default browser (if enabled in the settings). Middle-click on a link to show the linked page in a new tab. Hovering over a link displays its destination as a tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the settings). Left-click on a form field to edit its contents. Hovering over a form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor using the context menu which optionally contains an item for the first matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left mouse button to drag a frame around the area to copy. Once the mouse button is released, a pop-up menu is displayed to select whether to copy texts or images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse button to drag a frame around the region to annotate. Once the mouse button is released, a pop-up menu is displayed to select whether to add text or highlight annotations. Left-click to edit annotations. Right-click to remove annotations. (Adding and removing annotations requires version 0.20.1 or higher of the Poppler library.) Hovering over an annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using configurable keyboard shortcuts whose default values are "Shift+Alt+T" and "Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the document. A left click on an entry jumps to the respective page in the main view. The context menu can be used to expand/collapse all items below the selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse wheel. Holding Shift and using the Up/Down keys will scroll the view. Holding Shift and using the Left/Right keys will collapse/expand one level of items below the selected item. Holding Control and using the Left/Right keys will completely collapse/expand the selected item and its children. Holding Shift and using the mousel wheel will change the selected item. Holding Control and using the mouse wheel will expand/collapse the selected item.

+ +

The properties view displays additional information contained in the document.

+ +

The thumbnails view displays smaller versions of the pages of the document. A left click on an entry jumps to the respective page in the main view.

+ +

The bookmarks view shows the bookmarks related to the document displayed in the current tab. The context menu contains entries to jump to the previous/next boookmark or to add bookmarks. The context menu of each entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an overview containing the results of all searches being performed in all tabs. It also shows the text surrounding a result with the search term being emphasized. Clicking on a result opens the corresponding tab and jumps to its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and lists as many recently used files as set in the "Recently used count" option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available and lists as many recently closed tabs as set in the "Recently closed count" option. Keeping the tabs available could increase memory usage considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to control the presentation view.
  • +
  • Presentation screen The index of the screen to display the presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight the first entry pointing to the current page whenever the current page changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom factor, cached pixmaps will be used to draw approximations of final pixmaps until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the background.
  • +
  • Decorate links Determines whether links are highlighted by red frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted by blue frames.
  • +
  • Background color Determines the color of the background using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the computation of the background color of the presentation view and is defined using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be displayed as an interactive overlay. Otherwise each annotation will be handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be displayed as an interactive overlay. Otherwise each form field will be handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the recently used menu, if "Track recently used" is enabled. (Effective after restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the recently closed menu, if "Keep recently closed" is enabled. (Effective after restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool bar. Available actions are currentPage, previousPage, nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, search, copyToClipboardMode, addAnnotationMode and separator. (Effective after restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the document's context menu. Available actions are openCopyInNewTab, openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context menu. Available actions are openCopyInNewTab, openCopyInNewWindow, openContainingFolder, moveToInstance, copyFilePath, selectFilePath, closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus scroll instead being laid-out in mutliple columns if they are larger than the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number of pages of the document in the active tab are displayed in the window title.
  • +
  • Instance name in window title If enabled and the current instance is named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is conducted, only the pages where the search term is found are displayed in the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to personal preference. Shortcuts are changed by double-clicking on the shortcut to edit it and entering the new shortcut. Each action can have several shortcuts by entering a semicolon-separated list of them. Names of keys that are not single letters are written out explicitly (e.g. "Alt", "Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut contains modifier keys, the names of the keys are joined by a plus sign and modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a page.
  • +
+ + + + diff --git a/help/help_az.html b/help/help_az.html new file mode 100644 index 0000000..6efcc68 --- /dev/null +++ b/help/help_az.html @@ -0,0 +1,506 @@ + + + + + + + + + Yardım + + + + +

Yardım

+ +

Mündəricat

+
    +
  1. Ana səhifə
  2. +
      +
    1. Fayl
    2. +
    3. Redaktə
    4. +
    5. Görünüş
    6. +
    7. Siğmələr
    8. +
    9. Əlfəcinlər
    10. +
    11. Yardım
    12. +
    +
  3. Əsas görünüş
  4. +
  5. Yardımçı görünüş
  6. +
  7. Seçənəklər
  8. +
      +
    1. Davran;. seçənəkləri
    2. +
    3. Qrafiki seçənəklər
    4. +
    5. İnterfeys seçənəkləri
    6. +
    7. Qısayol seçənəkləri
    8. +
    9. Təyinedici seçənəklər
    10. +
    +
+ +

Giriş

+ +

qpdfview siğməli sənəd baxıcısıdır. O PDF dəstəyi üçün Poppler, PS +dəstəyi üçün libspectre, DjVu dəstəyi üçün DjVuLibre, çap dəstəyi üçün CUPS +və öz interfeyi üçün Qt toolkit-dən istifadə edir.

+ +

Seçənəklər faylı və əmr-sətri ilə əlaqədar məlumatlar üçün istifadəçi +dəstəyi səhifəsindən istifadə edin.

+ +

Ana menyu

+ +

Fayl

+ +
    +
  • Aç... hazırki siğmə üçün faylı açmaq üçündür. Əgər heç bir açığ siğmə +yoxdursa, fayl yeni siğmədə açılır.
  • +
  • Yeni siğmədə aç... Faylı yeni siğmədə açmaq üçün faylı açma dialoq +pəncərəsini çağırır.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Yenilə Hazırkı siğmədə yerləşən faylı yenidən yükləyir.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Çap... Hazılı çap etmək üçün çap dialoq pəncərəsini açır.
  • +
  • Çıxış Bütün tabları bağla və proqramdan çıx.
  • +
+ +

Redaktə

+ +
    +
  • Sənədirn Növbəti/Öncəki/İlk/Sonuncu səhifə Növbətiyə +keç/öncəkinə/ilkə/son səhifəyə.
  • +
  • Səhifəyə keç... Hazırki siğədə keçmək istəiyiniz səhifəyə keçid +dialoq pəncərəsini çağırır.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

Görünüş

+ +
    +
  • Davamedici Səhifənin bütün sətrlərinin hansı halda eyni baxtda +görünəcəyini təyin edir.
  • +
  • İki səhifə Səhifədə iki sütundan istifadə edilməsinə gətirir.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Orijinal ölçü Miqyası orijinal 100%-ə qaytarır.
  • +
  • Səhifənin eninə görə yerləşdir Səhifənin bütövlüklə pəncərədə +yerləşməsi miqyasına gətirir.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Sola döndər Shifəni sola (saat əqrəbi istiqamətinin əksinə) 90 dərəcə +döndərir.
  • +
  • Sola döndər Shifəni sağa (saat əqrəbi istiqamətinə) 90 dərəcə +döndərir.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Alətlər sətri Bu menyu var olan bütün alətlər sətrlərinə tez ulaşmaq +üçün istifadə olunur.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Siğmələr

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Siğməni bağla Aktiv siğməni bağlayır.
  • +
  • Bütün siğmələri bağla Bütün siğmələri bağlayır.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Əfləcinlər

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Qısayol seçənəkləri

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Dəyişdirici seçənəkləri

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_bg.html b/help/help_bg.html new file mode 100644 index 0000000..fdb30b4 --- /dev/null +++ b/help/help_bg.html @@ -0,0 +1,504 @@ + + + + + + + + + Помощ + + + + +

Помощ

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ca.html b/help/help_ca.html new file mode 100644 index 0000000..56bbbd3 --- /dev/null +++ b/help/help_ca.html @@ -0,0 +1,512 @@ + + + + + + + + + Ajuda + + + + +

Ajuda

+ +

Taula de continguts

+
    +
  1. Menú principal
  2. +
      +
    1. Fitxer
    2. +
    3. Edita
    4. +
    5. Visualitza
    6. +
    7. Pestanyes
    8. +
    9. Marcadors
    10. +
    11. Ajuda
    12. +
    +
  3. Visualització principal
  4. +
  5. Visualitzacions auxiliars
  6. +
  7. Ajusts
  8. +
      +
    1. Ajusts del comportament
    2. +
    3. Ajusts gràfics
    4. +
    5. Ajusts de la interfície
    6. +
    7. Ajusts de les dreceres
    8. +
    9. Ajusts dels modificadors
    10. +
    +
+ +

Introducció

+ +

qpdfview és un visualitzador de documents amb pestanyes. Utilitza +Poppler per a la compatibilitat amb PDF, libspectre per a la compatibilitat +amb PS, DjVuLibre per a la compatibilitat amb DjVu, CUPS per a la +compatibilitat amb la impressió i el conjunt d'eines Qt per a la seva +interfície.

+ +

Consulteu la pàgina del manual per obtenir informació sobre les opcions de +la línia d'ordres i els fitxers de configuració.

+ +

Menú principal

+ +

Fitxer

+ +
    +
  • Obre... Obre un diàleg per triar el fitxer que s'ha d'obrir a la +pestanya actual. Si no hi ha cap pestanya, el fitxer s'obre en una pestanya +nova.
  • +
  • Obre en una pestanya nova... Obre un diàleg per triar els fitxers que +s'han d'obrir en pestanyes noves.
  • +
  • Utilitzat recentment Conté una llista dels fitxers utilitzats més +recentment (si està habilitat als ajusts).
  • +
  • Refresca Torna a carregar el fitxer que es mostra a la pestanya +actual.
  • +
  • Desa Desa els canvis a les anotacions i els camps del formulari al +fitxer que es mostra a la pestanya actual.
  • +
  • Anomena i desa Obre un diàleg per desar el fitxer que es mostra a la +pestanya actual, incloent-hi els canvis a les anotacions i els camps del +formulari.
  • +
  • Desa'n una còpia Obre un diàleg per desar una còpia sense modificar +el fitxer que es mostra a la pestanya actual.
  • +
  • Imprimeix... Obre un diàleg per imprimir el fitxer que es mostra a la +pestanya actual.
  • +
  • Surt Tanca totes les pestanyes i finalitza el programa.
  • +
+ +

Edita

+ +
    +
  • Següent/Anterior/Primera/Última pàgina Passa a la +següent,anterior,primera o última pàgina del document.
  • +
  • Salta a la pàgina... Obre un diàleg per introduir la pàgina que s'ha +de mostrar a la pestanya actual.
  • +
  • Salta cap enrere/endavant Salta cap enrere o endavant a la història +de la pàgina que es mostra.
  • +
  • Cerca... Obre l'acoblador de cerca a sota de la visualització +principal. La cerca s'inicia automàticament passats dos segons de l'últim +canvi al terme de cerca o s'inicia manualment en prémer la tecla de +retorn. Si el modificador Maj es manté quan es prem la tecla de retorn, la +cerca s'inicia en totes les pestanyes en lloc de només la pestanya +actual. (Aquest efecte s'inverteix si l'acoblador de cerca ampliada està +habilitat als ajusts).
  • +
  • Troba l'anterior/la següent/ Salta a l'anterior o a la següent +ocurrència del terme de cerca al document.
  • +
  • Cancel·la la cerca Cancel·la la cerca que s'està executant i tanca +l'acoblador de cerca.
  • +
  • Copia al porta-retalls Si es marca, el programa esperarà que +arrossegueu un marc per copiar texts o imatges.
  • +
  • Afegeix anotacions Si es marca, el programa esperarà que arrossegueu +un marc per afegir-hi anotacions.
  • +
  • Ajusts... Obre el diàleg dels ajusts. El botó anomenat "Valors +predeterminats" revertirà tots els ajusts a totes les pestanyes als valors +predeterminats. El botó anomenat "Valors predeterminats a la pestanya +actual" només revertirà els ajusts de la pestanya actual als valors +predeterminats.
  • +
+ +

La pàgina actual es pot canviar introduint la pàgina desitjada al +camp de text a la barra d'eines d'edició, que es pot donar el focus +mitjançant Ctrl+K i prement la tecla de retorn.

+ +

Visualitza

+ +
    +
  • Continu Determina si totes les files del disseny de pàgina estan +visibles alhora.
  • +
  • Dos pàgines Determina si el disseny de pàgina fa servir dues +columnes.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_cs.html b/help/help_cs.html new file mode 100644 index 0000000..fbf70fe --- /dev/null +++ b/help/help_cs.html @@ -0,0 +1,520 @@ + + + + + + + + + Nápověda + + + + +

Nápověda

+ +

Obsah

+
    +
  1. Hlavní nabídka
  2. +
      +
    1. Soubor
    2. +
    3. Úpravy
    4. +
    5. Pohled
    6. +
    7. Karty
    8. +
    9. Záložky
    10. +
    11. Nápověda
    12. +
    +
  3. Hlavní pohled
  4. +
  5. Pomocné pohledy
  6. +
  7. Nastavení
  8. +
      +
    1. Nastavení chování
    2. +
    3. Nastavení grafiky
    4. +
    5. Nastavení rozhraní
    6. +
    7. Nastavení klávesových zkratek
    8. +
    9. Nastavení modifikátorů
    10. +
    +
+ +

Úvod

+ +

qpdfview je prohlížeč dokumentů s kartami. Používá Poppler pro +podporu PDF, libspectre pro podporu PS, DjVuLibre pro podporu DjVu, CUPS pro +podporu tisku a sadu Qt pro své rozhraní.

+ +

Podívejte se, prosím, do manuálových stránek, hledáte-li informace k volbám +příkazového řádku a k souborům s nastavením.

+ +

Hlavní nabídka

+ +

Soubor

+ +
    +
  • Otevřít... Otevře dialog pro výběr souboru k otevření v nynější +kartě. Pokud není žádná karta, soubor je otevřen v nové kartě.
  • +
  • Otevřít v nové kartě... Otevře dialog pro výběr souborů k otevření v +nových kartách.
  • +
  • Nedávno použité Obsahuje seznam naposledy použitých souborů (pokud je +to povoleno v nastavení).
  • +
  • Obnovit Obnoví soubor zobrazený v nynější kartě.
  • +
  • Uložit Uloží změny ve vysvětlivkách a formulářových polí do souboru +zobrazeného v nynější kartě.
  • +
  • Uložit jako... Otevře dialog pro uložení souboru zobrazeného v +nynější kartě včetně změn v poznámkách a formulářových polích.
  • +
  • Uložit kopii... Otevře dialog pro uložení nezměněné kopie souboru +zobrazeného v nynější kartě.
  • +
  • Tisk... Otevře dialog pro vytištění souboru zobrazeného v nynější +kartě.
  • +
  • Ukončit Zavře všechny karty a program ukončí.
  • +
+ +

Úpravy

+ +
    +
  • Další/Předchozí/První/Poslední strana Skočí na +další/předchozí/první/poslední stranu dokumentu.
  • +
  • Přejít na stranu... Otevře dialog pro vstoupení na stranu zobrazenou +v nynější kartě.
  • +
  • Skočit zpět/vpřed Skočí zpět/vpřed v historii zobrazené strany.
  • +
  • Hledat... Otevře panel pro hledání pod hlavním pohledem. Hledání +začne automaticky dvě sekundy po poslední změně v hledaném výrazu nebo je +spuštěno ručně stisknutím klávesy Enter. Pokud je podržen modifikátor Shift +když je stisknuta klávesa Enter, prohledávání začne ve všech kartách místo +pouze v nynější kartě. (Tento účinek je zrušen, pokud je v nastavení povolen +panel pro rozšířené hledání.)
  • +
  • Najít předchozí/další Skočí v dokumentu na předchozí/další výskyt +hledaného pojmu.
  • +
  • Zrušit hledání Zruší nyní probíhající hledání a zavře panel pro +hledání.
  • +
  • Kopírovat do schránky Je-li zaškrtnuto, program počká na vytvoření +rámečku pro zkopírování textu nebo obrázků tažením.
  • +
  • Přidat poznámku Je-li zaškrtnuto, program počká na vytvoření rámečku +pro přidání poznámek tažením.
  • +
  • Nastavení... Otevře dialog pro nastavení. Tlačítko označené Výchozí +vrátí všechna nastavení všech karet zpět na jejich výchozí hodnoty. Tlačítko +označené Výchozí na nynější kartě vrátí zpět na výchozí hodnotu pouze +nastavení nynější karty.
  • +
+ +

Nynější stranu lze změnit zadáním požadované strany do textového +pole v panelu nástrojů pro úpravy, který je možné zaměřit pomocí Ctrl+K, a +stisknutím klávesy Enter.

+ +

Pohled

+ +
    +
  • Průběžně Určuje, zda jsou všechny řádky rozvržení strany viditelné +zároveň.
  • +
  • Dvě strany Určuje, zda rozvržení strany používá dva sloupce
  • +
  • Dvě strany s titulní stranou Určuje, zda rozvržení strany používá dva +sloupce se zalomením po titulní straně.
  • +
  • Více stran Určuje, zda rozvržení strany používá více sloupců. Počet +sloupců lze změnit v dialogu pro nastavení.
  • +
  • Zprava doleva Určuje, jak jsou strany uspořádány v rozvrženích s více +stranami na řádek.
  • +
  • Přiblížit Zvýší násobek měřítka o 10 procent. Největší násobek +měřítka je 5000 procent.
  • +
  • Oddálit Sníží násobek měřítka o 10 procent. Nejmenší násobek měřítka +je 10 procent.
  • +
  • Původní velikost Nastaví násobek zvětšení znovu na 100 procent.
  • +
  • Přizpůsobit šířce strany Určuje násobek zvětšení tak, že se všechny +strany vodorovně zcela vejdou do hlavního pohledu.
  • +
  • Přizpůsobit velikosti strany Určuje násobek zvětšení tak, že se +všechny strany vodorovně i svisle zcela vejdou do hlavního pohledu.
  • +
  • Otočit vlevo Otočí strany doleva/proti směru hodinových ručiček o 90 +stupňů.
  • +
  • Otočit vpravo Otočí strany doprava/po směru hodinových ručiček o 90 +stupňů.
  • +
  • Obrátit barvy Určuje, zda jsou strany kresleny s obrácenými barvami.
  • +
  • Převést na odstíny šedi Určuje, zda jsou strany po vykreslení +převedeny na odstíny šedi.
  • +
  • Oříznout okraje Povolí odstranění prázdných okrajů strany po +vykreslení.
  • +
  • Přizpůsobení barev Povolí přizpůsobení barev vykreslené strany barvě +papíru pro upravení pozadí nasnímaných dokumentů.
  • +
  • Nástrojové panely Tato nabídka obsahuje seznam dostupných +nástrojových panelů pro přístup k často používaným činnostem.
  • +
  • Postranní panely Tato nabídka obsahuje seznam dostupných postranních +panelů pro zobrazení doplňkových informací.
  • +
  • Písma... Otevře dialog uvádějící v seznamu písma použitá v dokumentu.
  • +
  • Celá obrazovka Přepne režim na celou obrazovku, tj. okno je ukázáno +zvětšené a bez dekorace.
  • +
  • Promítání... Vstoupí do režimu promítání, jejž lze opustit stisknutím +klávesy F12 nebo Esc. Klávesa Home/End se používá k zobrazení první/poslední +strany. Klávesy šipek vpravo a dolů, mezerník a Page Down se používají pro +skok na další stranu. Klávesy šipek vlevo a nahoru, Backspace a Page Up se +používají pro skok na předchozí stranu. Stisknutí Ctrl a Enter provede skok +zpět na stranu před posledním skokem.
  • +
+ +

Násobek zvětšení lze změnit zadáním požadovaného procenta do +textového pole v panelu nástrojů pro pohled, který je možné zaměřit pomocí +Ctrl+L, a stisknutím klávesy Enter.

+ +

Karty

+ +
    +
  • Předchozí/Další karta Udělá z předchozí/další karty nynější +kartu. Proběhne na poslední/první kartu, pokud je první/poslední karta +nynější kartou.
  • +
  • Zavřít kartu Zavře nynější kartu.
  • +
  • Zavřít všechny karty Zavře všechny karty.
  • +
  • Zavřít všechny karty kromě nynější karty Zavře všechny karty kromě +nynější karty.
  • +
  • Nedávno zavřené Obsahuje seznam naposledy zavřených karet (pokud je +to povoleno v nastavení).
  • +
+ +

Tato nabídka obsahuje seznam všech karet, ze kterých je možné udělat nynější +kartu klepnutím na odpovídající položku nabídky. Karty lze rovněž zavřít +klepnutím prostředním tlačítkem myši. Prvních devět karet je také možné +zapnout podržením modifikátoru Alt a stisknutím kláves od jedné do devíti.

+ +

Záložky

+ +
    +
  • Předchozí záložka Skočí na nejbližší záložku před nynější stranou.
  • +
  • Další záložka Skočí na nejbližší záložku po nynější straně.
  • +
  • Přidat záložku Přidá záložku pro nynější soubor a stranu.
  • +
  • Odstranit záložku Odstraní záložku pro nynější soubor a stranu.
  • +
  • Odstranit všechny záložky Odstraní všechny záložky.
  • +
  • Otevřít Otevře odpovídající soubor v nynější kartě. Pokud není žádná +karta, soubor je otevřen v nové kartě.
  • +
  • Otevřít v nové kartě Otevře odpovídající soubor v nové kartě.
  • +
  • Jít na stranu Skočí na odpovídající stranu, pokud je odpovídající +soubor již otevřen. Jinak je odpovídající soubor otevřen v nové kartě.
  • +
+ +

Nápověda

+ +
    +
  • Obsah Zobrazí tento dokument.
  • +
  • O programu Zobrazí verzi programu.
  • +
+ +

Hlavní pohled

+ +

Klávesa Backspace/mezerník skočí na předchozí/další stranu. Klávesa Home/End +skočí na první/poslední stranu. Klávesy šipek, Page Up a Page Down posouvají +pohled. Stisknutím Ctrl a Enter se skočí na stranu před posledním skokem.

+ +

Pomocí kolečka myši se provádí posun nahoru a dolů. Podržením Alt +během používání kolečka myši se dělá posun doleva a doprava. Podržením +Ctrl během používání kolečka myši se mění velikost +dokumentu. Podržením Shift během používání kolečka myši se mění +velikost dokument otáčí. (Klávesnicové modifikátory je možné změnit v +dialogu pro nastavení.) Klepněte a podržte prostřední tlačítko myši pro +výběr obdélníkové oblasti a její přiblížení.

+ +

Odkazy jsou zvýrazněny červenými rámečky (pokud je to povoleno v +nastavení). Klepnutí levým tlačítkem myši na odkaz pro ukázání odkazované +stránky nebo pro otevření odkazované adresy (URL) ve výchozím prohlížeči +(pokud je to povoleno v nastavení). Klepnutí prostředním tlačítkem myši na +odkaz pro ukázání odkazované stránky v nové kartě. Přejetí ukazovátkem myši +nad odkazem zobrazí jeho cíl jako nástrojovou radu.

+ +

Formulářová pole jsou zvýrazněna modrými rámečky (pokud je to povoleno v +nastavení). Klepněte levým tlačítkem myši na formulářové pole pro upravení +jeho obsahu. Přejetí nad formulářovým polem zobrazí jeho cíl jako +nástrojovou radu.

+ +

Zdrojový text místa v dokumentu lze otevřít v editoru zdrojového textu +pomocí nabídky souvisejících činností, která volitelně obsahuje položku pro +první odpovídající uzel SyncTeX.

+ +

Pro kopírování textů nebo obrázků podržte Shift, klepněte a +podržte levé tlačítko myši a tažením okolo oblasti ke zkopírování vytvořte +rámeček. Jakmile je tlačítko myši uvolněno, zobrazí se vyskakovací nabídka, +kde se zvolí, zda texty nebo obrázky kopírovat do schránky.

+ +

Pro přidání poznámek podržte klávesu Ctrl, klepněte a +podržte levé tlačítko myši pro vytvoření rámečku tažením okolo oblasti, ke +které se má vytvořit poznámka. Jakmile je tlačítko myši uvolněno, zobrazí se +vyskakovací nabídka, kde se zvolí, zda se má přidat text nebo zvýraznit +poznámka. Klepněte levým tlačítkem myši pro upravení +poznámek. Klepněte pravým tlačítkem myši pro odstranění +poznámek. (Přidávání nebo odstraňování poznámek vyžaduje verzi 0.20.1 +nebo vyšší knihovny Poppler.) Při přejetí ukazovátkem nad poznámkou se její +obsah zobrazí jako nástrojová rada.

+ +

Pro přiblížení výběru podržte klávesu Shift a Ctrl, +klepněte a držte levé tlačítko myši, abyste natáhl rámeček okolo oblasti, +která se má přiblížit.

+ +

Viditelnost nástrojových pruhů a pruhu s hlavní nabídkou lze +přepnout pomocí nastavitelných klávesových zkratek, jejichž výchozími +hodnotami jsou "Shift+Alt+T" a "Shift+Alt+M".

+ +

Pomocné pohledy

+ +

Pohled na osnovu zobrazí přehled obsahu dokumentu. Po klepnutí na +položku levým tlačítkem myši dojde ke skoku na příslušnou stranu v hlavním +pohledu. Nabídku souvisejících činností lze použít k rozbalení/sbalení všech +položek pod vybranou položkou.

+ +

V pohledu na osnovu se také lze pohybovat pomocí klávesnice a kolečka +myši. Při podržení klávesy Shift a za použití kláves šipek nahoru/dolů dojde +k pohybu obrazu. Při podržení klávesy Shift a za použití kláves šipek +vlevo/vpravo se sbalí/rozbalí jedna úroveň položek pod vybranou +položkou. Při podržení klávesy Ctrl a za použití kláves šipek vlevo/vpravo +se úplně sbalí/rozbalí vybraná položka a jí podřízené položky. Při podržení +klávesy Ctrl a za použití kolečka myši se sbalí/rozbalí vybraná položka.

+ +

Pohled na vlastnosti zobrazí dodatečné informace obsažené v +dokumentu.

+ +

Pohled na náhledy zobrazí menší provedení stran dokumentu. Po +klepnutí na položku levým tlačítkem myši dojde ke skoku na příslušnou stranu +v hlavním pohledu.

+ +

Pohled na záložky ukáže záložky související s dokumentem zobrazené +v nynější kartě. Nabídka souvisejících činností obsahuje záznamy pro skok na +předchozí/další záložku nebo pro přidání záložek. Nabídka souvisejících +činností ke každému záznamu také umožňuje záznamy upravovat a mazat.

+ +

Pokud je to povoleno v nastavení panel pro rozšířené hledání ukáže +přehled obsahující výsledky všech hledání provedených ve všech kartách. Také +ukáže text obklopující výsledek se zvýrazněným hledaným pojmem. Klepnutí na +výsledek otevře odpovídající kartu a udělá skok na jeho místo.

+ +

Nastavení

+ +

Nastavení chování

+ +
    +
  • Otevřít adresu (URL) Určuje, zda se odkazy na adresu (URL) otevřou ve +výchozím prohlížeči.
  • +
  • Obnovit automaticky Určuje, zda jsou soubory automaticky nahrány +znovu, když jsou změněny na disku.
  • +
  • Sledovat nedávno použité Je-li povoleno, je dostupná nabídka pro +nedávno použité, v níž je uvedeno tolik nedávno použitých souborů, kolik je +nastaveno volbou Počet nedávno použitých. (Nabude účinnosti po opětovném +spuštění programu.)
  • +
  • Uchovat nedávno zavřené Je-li povoleno, je dostupná nabídka nedávno +zavřených dokumentů, ve které je uváděno právě tolik nedávno zavřených +karet, kolik je jich nastaveno volbou Počet nedávno zavřených. Udržování +dostupnosti karet může vést k povážlivému zvýšení využívání paměti. (Vchází +v účinnost po opětovném spuštění programu.)
  • +
  • Obnovit karty Je-li povoleno, karty a jejich vlastnosti jsou uloženy +při ukončení programu a obnoveny po jeho opětovném spuštění.
  • +
  • Obnovit záložky Je-li povoleno, záložky jsou uloženy při ukončení +programu a obnoveny po jeho opětovném spuštění.
  • +
  • Obnovit nastavení souborů Je-li povoleno, nastavení souboru jsou +uložena/obnovena při otevření/zavření karet.
  • +
  • Uložit databázový interval Doba, po níž jsou karty, záložky nebo +nastavení na soubor uložena do databáze.
  • +
  • Ovládat promítání Je-li povoleno, je možné hlavní pohled použít k +ovládání pohledu na promítání.
  • +
  • Promítací obrazovka Je-li povoleno, je možné hlavní pohled použít k +ovládání pohledu na promítání.
  • +
  • Zvýraznit položku osnovy Je-li povoleno, bude v pohledu na osnovu +zvýrazněna první položka ukazující na nynější stranu, kdykoli se posunutím +nynější strana změní.
  • +
  • Nejmenší posun obrazu Je-li povoleno, zobrazené místo se bude +posunovat jen tehdy, pokud není cílová poloha ještě viditelná.
  • +
  • Násobek zvětšení Číslo, kterým je činitel změny velikosti násoben +případně dělen při přibližování nebo oddalování.
  • +
  • Barva zvýraznění Určuje barvu zvýraznění.
  • +
  • Doba trvání zvýraznění Určuje dobu trvání dočasných zvýraznění.
  • +
  • Barva poznámky Barva poznámek přidaná programem pomocí klíčových slov +barev SVG nebo šestnáctkovým zápisem '#rrggbb'.
  • +
  • Editor zdroje Program, který je spuštěn, aby v něm byly upravovány +zdroje. '%1' je nahrazeno absolutní souborovou cestou. '%2' příp. '%3' je +nahrazeno číslem řádku popřípadě sloupce.
  • +
+ +

Nastavení grafiky

+ +
    +
  • Použít dláždění Strany budou před vykreslením rozděleny do dlaždic a +uloženy do vyrovnávací paměti, aby se zmenšila míra využití paměti.
  • +
  • Zachovat zastaralé pixmapy Je-li povoleno, potom se po změně násobku +zvětšení pixmapy uložené ve vyrovnávací paměti použijí na kreslení +přibližných pixmap konečných pixmap, dokud tyto nebudou dostupné za cenu +zvýšeného využití paměti.
  • +
  • Použít poměr pixelu zařízení Je-li povoleno, používá se při kreslení +fyzického rozlišení a při zobrazování logického rozlišení nejvyšší dostupný +poměr pixelu zařízení.
  • +
  • Obtáhnout strany Určuje, zda jsou strany odděleny od pozadí.
  • +
  • Obtáhnout odkazy Určuje, zda jsou odkazy zvýrazněny červenými +rámečky.
  • +
  • Obtáhnout formulářová pole Určuje, zda jsou formulářová pole +zvýrazněna modrými rámečky.
  • +
  • Barva pozadí Určuje barvu pozadí pomocí klíčových slov barev SVG nebo +šestnáctkovým zápisem '#rrggbb'.
  • +
  • Barva papíru Určuje barvu stran pomocí klíčových slov barev SVG nebo +šestnáctkovým zápisem '#rrggbb'.
  • +
  • Barva pozadí promítání Potlačí barvu papíru ve výpočtu barvy pozadí +pohledu na promítání. Je stanovena pomocí klíčových slov barev SVG nebo +šestnáctkovým zápisem '#rrggbb'.
  • +
  • Stran na řádek Počet stran na řádek v režimu rozvržení na více stran.
  • +
  • Odstup stran Určuje jak svislý tak vodorovný odstup zobrazený mezi +stranami.
  • +
  • Odstup náhledů Určuje jak svislý tak vodorovný odstup zobrazený mezi +náhledy.
  • +
  • Velikost náhledů Určuje velikost náhledů.
  • +
  • Velikost vyrovnávací paměti Program se pokusí o ukládání vykreslených +stran v rámci tohoto omezení do vyrovnávací paměti, čímž dojde ke zvýšení +rychlosti kreslení za cenu zvýšeného využití paměti.
  • +
  • Přednatažení Program se pokusí o vykreslování stran, jež ještě nejsou +viditelné, čímž dojde ke zvýšení rychlosti kreslení za cenu zvýšeného +využití paměti.
  • +
  • Vzdálenost přednatažení Počet řádků za nynějším řádkem a dvakrát +tolik řádků před nynějším řádkem, které jsou přednataženy.
  • +
  • Nastavení PDF +
      +
    • Vyhlazování Zlepšuje jakost zobrazení za cenu výkonu.
    • +
    • Vyhlazování textu Zlepšuje jakost zobrazení textu za cenu výkonu.
    • +
    • Instruování textu U některých písem může zlepšit jakost zobrazení +textu.
    • +
    • Náhled přetisku Je-li povoleno, je zobrazen náhled tisku jedné vrstvy +černě na vrchu jiné.
    • +
    • Režim tenkého řádku Vybere optimalizaci používanou ke kreslení +tenkých řádků.
    • +
    • Jádro Vybere jádro používané ke kreslení stran.
    • +
    +
  • +
  • Nastavení PS +
      +
    • Bity vyhlazování grafiky Určuje množství vyhlazování pro grafiku.
    • +
    • Bity vyhlazování textu Určuje množství vyhlazování pro text.
    • +
    +
  • +
+ +

Nastavení rozhraní

+ +
    +
  • Panel pro rozšířené hledání Je-li povoleno, výchozí panel pro hledání +je rozšířen o přehled ukazující výsledky všech karet. (Účinné po opětovném +spuštění.)
  • +
  • Vložené poznámky Je-li povoleno, všechny poznámky na straně budou +zobrazeny jako interaktivní překrytí. V opačném případě bude s každou +poznámkou zacházeno jako se samostatným oknem.
  • +
  • Vložené formulářové pole Je-li povoleno, všechna formulářová pole na +straně budou zobrazena jako interaktivní překrytí. V opačném případě bude s +každým formulářovým polem zacházeno jako se samostatným oknem.
  • +
  • Umístění karet Stanovuje, při kterém okraji hlavního pohledu budou +karty zobrazeny.
  • +
  • Viditelnost karet Určuje, zda budou karty zobrazeny, v případě že +budou otevřeny méně než dva dokumenty.
  • +
  • Roztáhnout karty Určí, zda se budou karty rozkládat rovnoměrně po +celém pruhu s kartami.
  • +
  • Nová karta vedle nynější karty Je-li povoleno, jsou nové karty +otevřeny napravo od činné karty.
  • +
  • Ukončit po poslední kartě Je-li povoleno, dojde k ukončení programu, +poté co je zavřena poslední karta.
  • +
  • Počet nedávno použitých Nastavuje počet souborů, jež jsou uváděny v +nabídce nedávno použitých, pokud je povoleno Sledovat nedávno +použité. (Začne účinkovat po opětovném spuštění programu.)
  • +
  • Počet nedávno zavřených Nastavuje počet karet, jež jsou uváděny v +nabídce nedávno zavřených, pokud je povoleno Uchovat nedávno zavřené. (Začne +účinkovat po opětovném spuštění programu.)
  • +
  • Panel nástrojů pro soubor Stanovuje, které činnosti jsou viditelné v +panelu nástrojů pro soubor. Dostupné činnosti jsou Otevřít v nové kartě, +Otevřít, Uložit kopii, Uložit jako, Tisk a oddělovač. (Nabude účinnosti po +opětovném spuštění programu.)
  • +
  • Panel nástrojů pro úpravy Stanovuje, které činnosti jsou viditelné v +panelu nástrojů pro úpravy. Dostupné činnosti jsou Nynější strana, Předchozí +strana, Další strana, První strana, Poslední strana, Přejít na stranu, +Skočit zpět, Skočit vpřed, Hledat, Kopírovat do schránky, Přidat poznámku a +oddělovač. (Nabude účinnosti po opětovném spuštění programu.)
  • +
  • Panel nástrojů pro pohled Stanovuje, které činnosti jsou viditelné v +panelu nástrojů pro pohled. Dostupné činnosti jsou Násobek zvětšení, +Přiblížit, Oddálit, Průběžně, Dvě strany, Dvě strany s titulní stranou, Více +stran, Původní velikost, Přizpůsobit šířce strany, Přizpůsobit velikosti +strany, Otočit vlevo, Otočit vpravo, Celá obrazovka, Promítání a +oddělovač. (Nabude účinnosti po opětovném spuštění programu.)
  • +
  • Související nabídka k dokumentu Určuje, které činnosti jsou viditelné +v související nabídce k dokumentu. Dostupnými činnostmi jsou otevření kopie +v nové kartě, otevření kopie v novém okně, otevření obsahující složky, +přechod na instanci, předchozí strana, další strana, první strana, poslední +strana, skok na stranu, skok zpět, skok vpřed, nastavení první strany, +nalezení předchozího, nalezení dalšího, zrušení hledání a oddělovač.
  • +
  • Související nabídka ke kartě Určuje, které činnosti jsou viditelné v +související nabídce ke kartě. Dostupnými činnostmi jsou otevření kopie v +nové kartě, otevření kopie v novém okně, otevření obsahující složky, přechod +na instanci, kopírování cesty k souboru, vybrání cesty k souboru, zavření +všech karet, zavření všech karet až na označenou, zavření všech karet +nalevo, zavření všech karet napravo a oddělovač.
  • +
  • Ubíhající nabídky Přepíše výchozí styl, takže položky v nabídkách při +projíždění ubíhají, místo toho aby byly zobrazeny ve více sloupcích, v +případě že zabírají více místa, než je dostupný prostor na +obrazovce. (Účinné po opětovném spuštění.)
  • +
  • Prohledávatelné nabídky Rozšíří výchozí způsob pohybu v nabídkách s +kartami a záložkami pomocí klávesnice o mechanismus hledání rovnou při +psaní.
  • +
  • Přepnout nástrojové pruhy a pruh s hlavní nabídkou při zobrazení na celou +obrazovku Viditelnost nástrojových pruhů a pruhu s hlavní nabídkou je +přepnuta vždy, když dojde k přepnutí do režimu na celou obrazovku.
  • +
  • Použít popis strany Stanoví, zda se použije popis strany poskytnutý +dokumentem místo čísel stran.
  • +
  • Název dokumentu jako název karty Určí, zda je název karty odvozen z +popisných dat namísto z názvu souboru.
  • +
  • Nynější strana v názvu okna Je-li povoleno, jsou nynější strana a +počet stran dokumentu v činné kartě zobrazeny v názvu okna.
  • +
  • Název instance v názvu okna Je-li povoleno a má-li nynější instance +přidělen název, její název je zobrazen v okně.
  • +
  • Zvýraznit nynější náhled Je-li povoleno, bude nynější strana +zvýrazněna v pohledu na náhledy
  • +
  • Omezit náhledy na výsledky Je-li povolena tato volba a je prováděno +hledání, budou v pohledu na náhledy zobrazeny jen ty strany, kde byl hledaný +pojem nalezen.
  • +
+ +

Nastavení klávesových zkratek

+ +

Nastavení zkratek umožňuje přizpůsobení klávesových zkratek podle osobních +voleb. Zkratky jsou měněny dvojitým klepnutím na zkratku pro její upravení a +zadáním nové zkratky. Každá činnost může mít několik zkratek pomocí seznamu, +v němž jsou jednotlivé zkratky odděleny středníkem. Názvy kláves, jež nejsou +jednopísmenné, jsou uvedeny výslovně (např. "Alt", "Ctrl", "PgDown"), +přičemž se nerozlišují velká a malá písmena. Pokud zkratka obsahuje +modifikátorové klávesy, názvy kláves jsou spojeny znaménkem plus a +modifikátorové klávesy se musí uvést jako první, např. "Ctrl+A" nebo +"Ctrl++".

+ +

Nastavení modifikátorů

+ +
    +
  • Zvětšení Klávesy modifikátorů pro zvětšování pomocí kolečka myši v +hlavním pohledu.
  • +
  • Otáčení Klávesy modifikátorů pro otáčení pomocí kolečka myši v +hlavním pohledu.
  • +
  • Posunování Klávesy modifikátorů pro posunování pomocí kolečka myši v +hlavním pohledu.
  • +
  • Kopírovat do schránky Klávesy modifikátorů pro kopírování textů nebo +obrázků ze strany do schránky.
  • +
  • Přidat poznámku Klávesy modifikátorů pro přidání poznámek ke straně.
  • +
  • Přiblížit výběr Klávesové modifikátory pro přiblížení výběru na +straně.
  • +
+ + + + diff --git a/help/help_da.html b/help/help_da.html new file mode 100644 index 0000000..7eeaea7 --- /dev/null +++ b/help/help_da.html @@ -0,0 +1,504 @@ + + + + + + + + + Hjælp + + + + +

Hjælp

+ +

Indholdsfortegnelse

+
    +
  1. Hovedmenu
  2. +
      +
    1. Fil
    2. +
    3. Rediger
    4. +
    5. Vis
    6. +
    7. Faneblade
    8. +
    9. Bogmærker
    10. +
    11. Hjælp
    12. +
    +
  3. Hovedvisning
  4. +
  5. Auxiliary views
  6. +
  7. Indstillinger
  8. +
      +
    1. Opførselsindstillinger
    2. +
    3. Grafikindstillinger
    4. +
    5. Grænsefladeindstillinger
    6. +
    7. Genvejsindstillinger
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduktion

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Hovedmenu

+ +

Fil

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Afslut Luk alle faneblade of afslut programmet.
  • +
+ +

Rediger

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_de.html b/help/help_de.html new file mode 100644 index 0000000..7dd96f3 --- /dev/null +++ b/help/help_de.html @@ -0,0 +1,569 @@ + + + + + + + + + Hilfe + + + + +

Hilfe

+ +

Inhaltsverzeichnis

+
    +
  1. Hauptmenü
  2. +
      +
    1. Datei
    2. +
    3. Bearbeiten
    4. +
    5. Ansicht
    6. +
    7. Reiter
    8. +
    9. Lesezeichen
    10. +
    11. Hilfe
    12. +
    +
  3. Hauptansicht
  4. +
  5. Hilfsansichten
  6. +
  7. Einstellungen
  8. +
      +
    1. Verhalten
    2. +
    3. Grafik
    4. +
    5. Oberfläche
    6. +
    7. Tastenkürzel
    8. +
    9. Modifikatoren
    10. +
    +
+ +

Einleitung

+ +

qpdfview ist ein Programm zum Anzeigen von Dokumenten mit +Reitern. Es verwendet Poppler für PDF-Unterstützung, libspectre für +PS-Unterstützung, DjVuLibre für DjVu-Unterstützung, CUPS zum Drucken und den +Qt-Werkzeugsatz für die Benutzeroberfläche.

+ +

Informationen über Kommandozeilenoptionen und Konfigurationsdateien sind in +der Kommandozeilenanleitung zu finden.

+ +

Hauptmenü

+ +

Datei

+ +
    +
  • Öffnen... Öffnet einen Auswahldialog zum Öffnen einer Datei im +aktuellen Reiter. Falls kein Reiter vorhanden ist, wird die Datei in einem +neuen Reiter geöffnet.
  • +
  • In neuem Reiter öffnen... Öffnet einen Auswahldialog zum Öffnen von +Dateien in neuen Reitern.
  • +
  • Zuletzt verwendet Enthält eine Liste der zuletzt verwendeten Dateien +(falls dies in den Einstellungen eingeschaltet ist).
  • +
  • Aktualisieren Lädt die Datei neu, die im aktuellen Reiter angezeigt +wird.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Speichern unter... Öffnet einen Auswahldialog zum Speichern einer +Kopie der im aktuellen Reiter angezeigten Datei mit allen Änderungen an +Anmerkungen und Formularfeldern.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Drucken... Öffnet einen Druckdialog für die im aktuellen Reiter +angezeigte Datei.
  • +
  • Beenden Schließt alle Reiter und beendet das Programm.
  • +
+ +

Bearbeiten

+ +
    +
  • Vorige/Nächste/Erste/Letzte Seite Springt zur +vorigen/nächsten/ersten/letzten Seite des Dokuments.
  • +
  • Zu Seite springen... Öffnet einen Dialog zur Eingabe einer Seite zur +Anzeige im aktuellen Reiter.
  • +
  • Springe rückwärts/vorwärts Springt rückwärts/vorwärts in der Chronik +der angezeigten Seiten.
  • +
  • Suchen... Öffnet die Suchansicht unter der Hauptansicht. Die Suche +beginnt automatisch zwei Sekunden nach der letzten Änderung des Suchbegriffs +oder wird manuell mit der Eingabetaste gestartet. Falls die Umschalttaste +gehalten wird, während die Eingabetaste gedrückt wird, startet die Suche in +allen Reitern anstatt nur dem aktuellen Reiter. (Dieser Effekt wird +umgekehrt falls die erweiterte Suchansicht verwendet wird.)
  • +
  • Rückwärts/Vorwärts suchen Springt zur vorigen/nächsten Fundstelle des +Suchbegriffs im Dokument.
  • +
  • Suche abbrechen Bricht die aktuelle laufende Suche ab und schließt +die Suchansicht.
  • +
  • In Zwischenablage kopieren Wenn aktiviert, wird das Programm darauf +warten, dass zum Kopieren ein Rahmen um Text oder Bilder gezogen wird.
  • +
  • Anmerkung hinzufügen Wenn aktiviert, wird das Programm darauf warten, +dass ein Rahmen gezogen wird um Anmerkungen hinzuzufügen.
  • +
  • Einstellungen... Öffnet den Einstellungsdialog. Die Schaltflächen mit +der Aufschrift 'Vorgaben' setzt alle Einstellungen in allen Reitern des +Einstellungsdialogs auf ihre Vorgabewerte. Die Schaltfläche 'Vorgaben auf +aktuellem Reiter' setzt nur die Einstellungen im aktuellen Reiter des +Einstellungsdialogs auf ihre Vorgabewerte.
  • +
+ +

Die aktuelle Seite kann geändert werden, indem die Zielseite in das +Textfeld in der Bearbeiten-Werkzeugleiste eingegeben wird. Das Textfeld kann +durch Druck von Strg+K und Bestätigung mit der Eingabetaste fokussiert +werden.

+ +

Ansicht

+ +
    +
  • Fortlaufend Legt fest, ob die Seiten fortlaufend in Reihen +übereinander angezeigt werden.
  • +
  • Zweiseitig Legt fest, ob die Seitenanzeige zweispaltig ist.
  • +
  • Zweiseitig mit Titelseite Legt fest, ob die Seitenanzeige zweispaltig +ist und die Titelseite einzeln anzeigt.
  • +
  • Mehrere Seiten Legt fest, ob die Seitenanzeige mehrspaltig ist. Die +Anzahl der Spalten für diese Anzeigeart kann im Einstellungsdialog geändert +werden.
  • +
  • Rechts nach links Bestimmt wie die Seiten in Darstellungen mit +mehreren Seiten pro Reihe angeordnet werden.
  • +
  • Vergrößern Vergrößert den Skalenfaktor um 10 Prozent. Der Maximalwert +beträgt 5000 Prozent.
  • +
  • Verkleinern Verkleinert den Skalenfaktor um 10 Prozent. Der +Minimalwert beträgt 10 Prozent.
  • +
  • Ursprüngliche Größe Setzt den Skalenfaktor auf 100 Prozent zurück.
  • +
  • An Seitenbreite anpassen Bestimmt den Skalenfaktor so dass eine Zeile +von Seiten die Hauptansicht horizontal ausfüllt.
  • +
  • An Seitengröße anpassen Bestimmt den Skalenfaktor so dass eine Zeile +von Seiten vollständig in der Hauptansicht angezeigt wird.
  • +
  • Nach links drehen Dreht alle Seiten nach links gegen den +Uhrzeigersinn um 90 Grad.
  • +
  • Nach rechts drehen Dreht alle Seiten nach rechts im Uhrzeigersinn um +90 Grad.
  • +
  • Farben umkehren Legt fest, ob Seiten mit umgekehrten Farben +dargestellt werden.
  • +
  • In Graustufen umwandeln Legt fest, ob Seiten vor der Darstellung in +Graustufen umgewandelt werden.
  • +
  • Ränder abschneiden Aktiviert das automatische Entfernen leerer +Seitenränder.
  • +
  • Farbanpassung Aktiviert das Mischen der Seitendarstellung mit der +Papierfarbe um beispielsweise den Hintergrund eingescannter Dokumente +anzupassen.
  • +
  • Werkzeugleisten Dieses Menü enthält eine Liste verfügbarer +Werkzeugleisten zum Zugriff auf häufig genutzte Aktionen.
  • +
  • Paletten Dieses Menü enthält eine Liste verfügbarer Paletten zur +Anzeige von Zusatzinformationen.
  • +
  • Schriften... Öffnet einen Dialog, der die im Dokument verwendeten +Schriftarten auflistet.
  • +
  • Vollbild Schaltet die Vollbildanzeige ein, in der das Fenster +maximiert und ohne Fensterdekorationen angezeigt wird.
  • +
  • Präsentation... Schaltet in den Präsentationsmodus, der durch Drücken +von F12 oder Escape verlassen werden kann. Die Pos1/Ende-Tasten werden +verwendet um die erste/letzte Seite zu zeigen. Die Pfeiltasten rechts und +unten, die Leertaste und die Bild-ab-Taste springen zur nächsten Seite. Die +Pfeiltasten links und oben, die Rücktaste und die Bild-auf-Taste springen +zur vorigen Seite. Drücken von Strg und Eingabetaste springt zur Seite vor +dem letzten Sprung.
  • +
+ +

Der Skalenfaktor kann geändert werden, indem die gewünschte +Prozentzahl in das Textfeld in der Ansicht-Werkzeugleiste eingetragen +wird. Das Textfeld kann durch Druck von Strg+L und Bestätigung mit der +Eingabetaste fokussiert werden.

+ +

Reiter

+ +
    +
  • Voriger/Nächster Reiter Hebt den vorigen/nächsten Reiter in der +Leiste hervor. Springt zum letzten/ersten Reiter, wenn der erste/letzte +Reiter aktuell hervorgehoben ist.
  • +
  • Reiter schließen Schließt den hervorgehobenen Reiter.
  • +
  • Alle Reiter schließen Schließt alle Reiter.
  • +
  • Alle Reiter bis auf den Aktuellen schließen Schließt alle bis auf den +aktuell hervorgehobenen Reiter.
  • +
  • Zuletzt geschlossen Enthält eine Liste der zuletzt geschlossenen +Reiter (falls dies in den Einstellungen eingeschaltet ist).
  • +
+ +

Dieses Menü enthält eine Liste aller Reiter, die durch ein Klick auf den +entsprechenden Menüeintrag hervorgehoben werden können. Reiter können auch +durch einen Mittelklick geschlossen werden. Die ersten neun Reiter können +auch durch Halten der Alt-Taste und Druck auf die entsprechende Zahltaste +hervorgehoben werden.

+ +

Lesezeichen

+ +
    +
  • Voriges Lesezeichen Springt zum nächsten Lesezeichen vor der +aktuellen Seite.
  • +
  • Nächstes Lesezeichen Springt zum nächsten Lesezeichen nach der +aktuellen Seite.
  • +
  • Lesezeichen hinzufügen Fügt ein Lesezeichen für die aktuelle Datei +und Seite hinzu.
  • +
  • Lesezeichen entfernen Entfernt das Lesezeichen für die aktuelle Datei +und Seite.
  • +
  • Alle Lesezeichen entfernen Entfernt alle Lesezeichen für alle +Dateien.
  • +
  • Öffnen Öffnet die entsprechende Datei im aktuellen Reiter. Falls es +keinen Reiter gibt, wird die Datei in einem neuen Reiter geöffnet.
  • +
  • In neuem Reiter öffnen Öffnet die entsprechende Datei in einem neuen +Reiter.
  • +
  • Gehe zu Seite Springt zur entsprechenden Seite, falls die +entsprechende Datei bereits geöffnet ist. Andernfalls wird die entsprechende +Datei in einem neuen Reiter geöffnet.
  • +
+ +

Hilfe

+ +
    +
  • Inhalt Zeigt dieses Dokument an.
  • +
  • Über Zeigt die Programmversion an.
  • +
+ +

Hauptansicht

+ +

Die Rücktaste/Leertaste springt zur vorigen/nächsten Seite. Die +Pos1/Ende-Taste springt zur ersten/letzten Seite. Die Pfeil-, Bild-auf- und +Bild-ab-Tasten bewegen den Sichtbereich. Steuerung und Eingabetaste springt +zur Seite vor dem letzten Sprung.

+ +

Das Mausrad rollt den Sichtbereich auf und ab. Halten von ALT während +der Verwendung des Mausrads rollt den Sichtbereich nach links und +rechts. Halten von STRG während der Verwendung des Mausrads skaliert +das Dokument. Halten von UMSCHALT während der Verwendung des Mausrads +rotiert das Dokument. (Modifikator-Tasten können in den Einstellungen +geändert werden. Kilcken und halten der mittleren Maustaste wählt ein zu +vergrößerndes Rechteck aus.

+ +

Links werden rot umrandet (falls dies in den Einstellungen eingeschaltet +ist). Ein Linksklick auf einen Link zeigt die verlinkte Seite oder öffnet +die verlinkte URL im Standard-Browser (falls dies in den Einstellungen +eingeschaltet ist). Ein Mittelklick auf einen Link zeigt die verlinkte Seite +in einem neuen Reiter. Wird der Mauszeiger ohne Tastendruck auf einem Link +platziert, wird das Linkziel als Tooltip angezeigt.

+ +

Formularfelder werden blau umrandet (falls dies in den Einstellungen +eingeschaltet ist). Ein Linksklick auf ein Formularfeld ermöglicht die +Bearbeitung. Wird der Mauszeiger ohne Tastendruck auf einem Formularfeld +platziert, wird dessen Name als Tooltip angezeigt.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

In Zwischenablage kopieren: Bei gedrückter SHIFT-Taste mit +der linken Maustaste klicken, halten und einen Rahmen um die zu kopierende +Fläche ziehen. Sobald die Maustaste losgelassen wird, wird ein Menü +angezeigt, um auszuwählen, ob Text oder Bilder in die Zwischenablage kopiert +werden.

+ +

Anmerkungen hinzufügen: Bei gedrückter STRG-Taste mit der +linken Maustaste klicken, halten und einen Rahmen um die zu nutzende Fläche +ziehen. Sobald die Maustaste losgelassen wird, wird ein Menü angezeigt, um +auszuwählen, ob Texte oder Hervorhebungen hinzugefügt werden sollen. Mittels +Linksklick werden vorhandene Anmerkungen bearbeitet. Mittels +Rechtsklick werden vorhandene Anmerkungen entfernt. (Das Hinzufügen +und Entfernen von Anmerkungen setzt Version 0.20.1 oder höher der +Poppler-Bibliothek voraus.) Wird der Mauszeiger ohne Tastendruck auf einer +Anmerkung platziert, wird deren Inhalt als Tooltip angezeigt.

+ +

Auswahl vergrößern: Die Tasten SHIFT and STRG +gedrückt halten und einen Rahmen um den zu vergrößernden Bereich ziehen.

+ +

Die Sichtbarkeit der Werkzeug- und Menüleisten kann mittels +einstellbarer Tastaturkürzel mit den Standardwerten "Umschalt+Alt+T" und +"Umschalt+Alt+M" umgeschalten werden.

+ +

Hilfsansichten

+ +

Die Gliederungs-Ansicht stelle eine Übersicht des +Dokumenteninhalts dar. Durch einen Linksclick auf einen Eintrag springt die +Hauptansicht zur entsprechenden Seite. Mit Hilfe des Kontextmenüs könnte +alle Einträge unterhalb des gewählten Eintrags expandiert/kollabiert +werden.

+ +

Die Gliederungs-Ansicht kann ebenfalls mittels der Tastatur und dem Mausrad +bedient werden. Wird Umschalt gehalten, so verschieben die +Hoch/Runter-Tasten die Ansicht. Wird Umschalt gehalten, so klappen die +Links/Rechts-Tasten eine Ebene unter dem ausgewählten Element zu/auf. Wird +Steuerung gehalten, so klappen die Links/Rechts-Tasten alle Ebenen unter dem +ausgewählten Elements zu/auf. Wird Umschalt gehalten, so ändert das Mausrad +das ausgewählte Element. Wird Steuerung gehalten, so klappt das Mausrad das +ausgewählte Element auf/zu.

+ +

Die Eigenschaften-Ansicht zeigt zusätzliche im Dokument +enthaltene Informationen an.

+ +

Die Vorschaubilder-Ansicht zeigt kleinere Ansichten der Seiten +des Dokumentes. Durch einen Linksclick auf einen Eintrag springt die +Hauptansicht zur entsprechenden Seite.

+ +

The Lesezeichen-Ansicht zeigt die zum im aktuellen Reiter +dargestellten Dokument gehörenden Lesezeichen. Das Kontextmenü erlaubt es +zum vorigen/nächsten Lesezeichen zu springen oder Lesezeichen +hinzuzufügen. Das Kontextmenü jedes Eintrags erlaubt es außerdem den Eintrag +zu bearbeiten und zu löschen.

+ +

Falls sie in den Einstellungen aktiviert wurde, stellt die erweiterte +Suchansicht eine Übersicht der Ergebnisse der in den Reitern +durchgeführten Suchvorgänge dar. Sie stellt außerdem den die Suchergebnisse +umgebenden Text dar, wobei der Suchbegriff hervorgehoben wird. Durch +Mausklick auf einen Eintrag wechselt die Hauptansicht zum zugehörigen Reiter +und springt zur entsprechenden Position.

+ +

Einstellungen

+ +

Einstellungen zum Verhalten

+ +
    +
  • URL öffnen Legt fest, ob Links auf URLs bei Anklicken im +Standard-Browser geöffnet werden sollen.
  • +
  • Automatische Aktualisierung Legt fest, ob Dateien automatisch neu +geladen werden, nachdem sie auf der Festplatte verändert wurden.
  • +
  • Verwendete Dateien merken Aktiviert ein Menü welches eine Liste der +zuletzt verwendeten Dateien enthält, deren Anzahl durch die Option "Anzahl +verwendeter Dateien" bestimmt wird. (Erst nach Neustart wirksam.)
  • +
  • Geschlossene Reiter aufheben Aktiviert ein Menü welches eine Liste +der zuletzt geschlossenen Reiter enthält, deren Anzahl durch die Option +"Anzahl geschlossener Reiter" bestimmt wird. Die Reiter verfügbar zu halten +kann den Speicherverbrauch signifikant erhöhen. (Erst nach Neustart +wirksam.)
  • +
  • Reiter wiederherstellen Falls eingeschaltet werden Reiter und ihre +Eigenschaften beim Beenden des Programms gespeichert und beim nächsten +Starten wiederhergestellt.
  • +
  • Lesezeichen wiederherstellen Falls eingeschaltet werden Lesezeichen +beim Beenden des Programms gespeichert und beim nächsten Starten +wiederhergestellt.
  • +
  • Dateieinstellungen wiederherstellen Falls eingeschaltet werden +Einstellungen für einzelne Dateien beim Schließen/Öffnen von Reitern +gespeichert/geladen.
  • +
  • Speicherintervall Das Zeitintervall nach dem Reiter, Lesezeichen und +Dateieinstellungen in der Datenbank gespeichert werden.
  • +
  • Präsentation synchronisieren Falls eingeschaltet kann die +Hauptansicht verwendet werden um die Präsentationsansicht zu steuern.
  • +
  • Präsentationsbildschirm Der Index des Bildschirms, der die +Präsentationsansicht zeigen soll.
  • +
  • Gliederung synchronisieren Falls eingeschaltet, wird in der +Gliederungsansicht der erste Eintrag zur aktuellen Seite hervorgehoben, wenn +die aktuelle Seite wechselt.
  • +
  • Minimaler Bildlauf Falls aktiviert, wird die Ansicht nur dann wenn +verschoben, wenn das Ziel eines Sprungs nicht bereits sichtbar ist.
  • +
  • Vergrößerungsfaktor Der Skalierungsfaktor wird beim Vergrößern mit +dieser Zahl multipliziert und beim Verkleinern durch diese Zahl dividiert.
  • +
  • Farbe der Hervorhebungen Legt die Farbe von Hervorhebungen fest.
  • +
  • Dauer der Hervorhebungen Legt die Dauer von vorübergehenden +Hervorhebungen fest.
  • +
  • Farbe für Anmerkungen Die Farbe von Anmerkungen die mit diesem +Programm hinzugefügt werden, beschrieben durch SVG-Farbnamen oder in +hexadezimaler Notation '#rrggbb'.
  • +
  • Quelltexteditor Das Programm, das gestartet wird um Quelltexte zu +bearbeiten. '%1' wird durch den absoluten Dateipfad und '%2' bzw. '%3' durch +Zeilen- bzw. Spaltennummer ersetzt.
  • +
+ +

Einstellungen zur Grafik

+ +
    +
  • Kachelung verwenden Die Seiten werden vor Darstellung und +Zwischenspeicherung in Kacheln unterteilt, um den Speicherverbrauch zu +reduzieren.
  • +
  • Veraltete Grafiken aufheben Falls eingeschaltet, werden bei +Veränderung der Vergrößerung (auf Kosten zusätzlichen +Arbeitsspeicherverbrauchs) bereits erstellte Grafiken der alten Auflösung +verwendet, um Näherungen der endgültigen Grafiken darzustellen, bis diese +verfügbar sind.
  • +
  • .
  • +
  • Seiten verzieren Legt fest, ob Seiten vom Hintergrund abgesetzt +dargestellt werden.
  • +
  • Verweise verzieren Legt fest, ob Verweise ("Links") durch rote Rahmen +hervorgehoben werden.
  • +
  • Formularfelder verzieren Legt fest, ob Formularfelder durch blaue +Rahmen hervorgehoben werden.
  • +
  • Hintergrundfarbe Legt die Farbe des Hintergrundes mittels +SVG-Farbnamen oder hexadezimaler Notation '#rrggbb' fest.
  • +
  • Papierfarbe Legt die Farbe der Seiten mittels SVG-Farbnamen oder +hexadezimaler Notation '#rrggbb' fest.
  • +
  • Präsentationshintergrundfarbe Überschreibt die Papierfarbe bei der +Darstellung der Hintergrundfarbe der Präsentationsansicht und wird mittels +SVG-Farbnamen oder hexadezimaler Notation '#rrggbb' definiert.
  • +
  • Seiten pro Zeile Anzahl der Seiten pro Zeile in der 'Mehrere +Seiten'-Ansicht.
  • +
  • Abstand der Seiten Legt sowohl vertikalen als auch horizontalen +Abstand zwischen Seiten fest.
  • +
  • Abstand der Vorschaubilder Legt sowohl vertikalen als auch +horizontalen Abstand zwischen Vorschaubildern fest.
  • +
  • Größe der Vorschaubilder Legt die Größe der Vorschaubilder fest.
  • +
  • Größe des Zwischenspeichers Das Programm wird versuchen, gezeichnete +Seiten bis zu diesem Speicherverbrauch zwischenzuspeichern, was die Anzeige +von Seiten auf Kosten höheren Speicherverbrauchs beschleunigt.
  • +
  • Vorausladen Das Programm wird versuchen, Seiten zu zeichnen, die noch +nicht angezeigt werden, was die Anzeige von Seiten auf Kosten höheren +Zwischenspeicherverbrauchs beschleunigt.
  • +
  • Reichweite des Vorausladens Das Vorausladen lädt diese Anzahl an +Zeilen über die aktuelle Zeile hinaus und halb so viele Zeilen vor der +aktuellen Zeile voraus.
  • +
  • PDF-Einstellungen +
      +
    • Kantenglättung Verbessert die Anzeigequalität auf Kosten der +Geschwindigkeit.
    • +
    • Text-Kantenglättung Verbessert die Anzeigequalität von Text auf +Kosten der Geschwindigkeit.
    • +
    • Text-Hinting Kann die Anzeigequalität von Text für bestimmte +Schriftarten verbessern.
    • +
    • Überdruckvorschau Falls eingeschaltet, wird eine Vorschau des +Überdruckens einer Tintenlage über eine andere angezeigt.
    • +
    • Modus für dünne Linien Wählt das Optimierungsverfahren für das +Zeichnen dünner Linien aus.
    • +
    • Unterbau Wählt den Unterbau zum Zeichnen von Seiten aus.
    • +
    +
  • +
  • PS-Einstellungen +
      +
    • Bits für Grafik-Kantenglättung Legt fest wie stark Kanten in Grafiken +geglättet werden.
    • +
    • Bits für Text-Kantenglättung Legt fest wie stark Kanten im Text +geglättet werden.
    • +
    +
  • +
+ +

Einstellung zur Oberfläche

+ +
    +
  • Erweiterte Suchansicht Erweitert die Standardsuchansicht um eine +Übersicht der Suchergebnisse aller Reiter. (Nach Neustart wirksam.)
  • +
  • Eingebettet dargestellte Anmerkungen Ist diese Option aktiviert, +werden alle Anmerkungen einer Seite als interaktive Überlagerung +dargestellt. Ansonsten wird jede Anmerkung als separates Fenster behandelt.
  • +
  • Eingebettet dargestellte Formularfelder Ist diese Option aktiviert, +werden alle Formularfelder einer Seite als interaktive Überlagerung +dargestellt. Ansonsten wird jedes Formularfeld als separates Fenster +behandelt.
  • +
  • Reiterposition Legt fest an welcher Kante der Hauptansicht die Reiter +angezeigt werden.
  • +
  • Reitersichtbarkeit Legt fest ob Reiter angezeigt werden falls weniger +als zwei Dokumente geöffnet sind.
  • +
  • Reiter ausbreiten Legt fest ob die Reiter gleichmäßig über den +gesamten Reiterbereich ausgebreitet werden.
  • +
  • Neuer Reiter neben aktuellem Reiter Falls aktiviert werden neue +Reiter rechts neben dem aktuellen Reiter eingefügt.
  • +
  • Nach letztem Reiter beenden Bewirkt, dass die Anwendung nach dem +Schließen des letzten Reiters beendet wird.
  • +
  • Anzahl verwendeter Dateien Legt die Azahl der Dateien fest, die im +Menü für zuletzt verwendete Dateien aufgeführt werden, falls "Verwendete +Dateien merken" aktiviert ist. (Tritt nach Neustart des Programms in Kraft.)
  • +
  • Anzahl geschlossener Reiter Legt die Azahl der Reiter fest, die im +Menü für zuletzt geschlossene Reiter aufgeführt werden, falls "Geschlossene +Reiter merken" aktiviert ist. (Tritt nach Neustart des Programms in Kraft.)
  • +
  • Datei-Werkzeugleiste Legt fest, welche Aktionen in welcher +Reihenfolge in der Datei-Werkzeugleiste angezeigt werden. Verfügbare +Aktionen sind "openInNewTab" (In neuem Reiter öffnen), "open" (Öffnen), +"refresh" (Aktualisieren), "saveCopy" (Kopie speichern), "saveAs" (Speichern +unter), "print" (Drucken) und "separator" (Trennelement). (Tritt nach +Neustart des Programms in Kraft.)
  • +
  • Bearbeiten-Werkzeugleiste Legt fest, welche Aktionen in welcher +Reihenfolge in der Bearbeiten-Werkzeugleiste angezeigt werden. Verfügbare +Aktionen sind "currentPage" (Aktuelle Seite), "previousPage" (Vorige Seite), +"nextPage" (Nächste Seite), "firstPage" (Erste Seite), "lastPage" (Letzte +Seite), "jumpToPage" (Springe zu Seite), "jumpBackward" (Springe Rückwärts), +"jumpForward" (Springe Vorwärts), "search" (Suche), "copyToClipboardMode" +(Kopieren in Zwischenablage), "addAnnotationMode" (Anmerkung hinzufügen) und +"separator" (Trennelement). (Tritt nach Neustart des Programms in Kraft.)
  • +
  • Ansicht-Werkzeugleiste Legt fest, welche Aktionen in welcher +Reihenfolge in der Bearbeiten-Werkzeugleiste angezeigt werden. Verfügbare +Aktionen sind "scaleFactor" (Skalenfaktor), "zoomIn" (Vergrößern), "zoomOut" +(Verkleinern), "continuousMode" (Fortlaufend), "twoPagesMode" (Zweiseitig), +"twoPagesWithCoverPageMode" (Zweiseitig mit Titelseite), "multiplePagesMode" +(Mehrere Seiten), "originalSize" (Ursprüngliche Größe), "fitToPageWidthMode" +(An Seitenbreite anpassen), "fitToPageSizeMode" (An Seitengröße anpassen), +"rotateLeft" (Nach links drehen), "rotateRight" (Nach rechts drehen), +"fullscreen" (Vollbild), "presentation" (Präsentation) und "separator" +(Trennelement). (Tritt nach Neustart des Programms in Kraft.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Laufende Menüs Überschreibt die Vorgabe des Standardstils, so dass +Menüs laufen anstatt in mehreren Spalten dargestellt zu werden, falls sie +größer sind als die verfügbare Bildschirmfläche. (Nach Neustart wirksam.)
  • +
  • Durchsuchbare Menüs Erweitert die übliche Tastaturnavigation der +Reiter- und Lesezeichen-Menüs um eine Suchfunktion.
  • +
  • Werkzeug- und Menüleisten bei Vollbild umschalten Die Sichtbarkeit +von Werkzeug- und Menüleisten wird immer dann umgeschalten wenn der +Vollbildmouds umgeschalten wird.
  • +
  • Seitenbeschriftung verwenden Legt fest, ob vom Dokument vergebene +Seitenbeschriftungen anstatt von Seitenzahlen verwendet werden.
  • +
  • Dokumententitel als Reitertitel Legt fest ob der Reitertitel anhand +der Metadaten anstatt des Dateinamens ermittelt wird.
  • +
  • Aktuelle Seite im Fenstertitel Falls aktiviert wird die aktuelle +Seite und die Anzahl der Seiten des aktuellen Dokuments im Fenstertitel +angezeigt.
  • +
  • Falls aktiviert und die aktuelle Instanz benannt ist wird deren Name im +Fenstertitel angezeigt.
  • +
  • Aktuelles Vorschaubild hervorheben Falls eingeschaltet, wird die +aktuelle Seite in der Vorschauansicht hervorgehoben.
  • +
  • Vorschaubilder auf Ergebnisse beschränken Falls diese Einstellung +eingeschaltet ist und eine Suche durchgeführt wird, werden nur Seiten, die +den Suchbegriff enthalten, in der Vorschauansicht angezeigt.
  • +
+ +

Einstellungen zu Tastenkürzeln

+ +

Die Tastenkürzel-Einstellungen ermöglichen die Anpassung der Tastenkürzel an +persönliche Vorlieben. Zum Ändern eines Tastenkürzel wird ein Doppelklick +auf das Tastenkürzel ausgeführt und anschließend das neue Tastenkürzel +eingegeben. Jeder Aktion können mehrere Tastenkürzel zugeordnet werden, die +durch Semikolons getrennt aufgelistet werden. Tastennamen, die nicht aus +einem Zeichen bestehen, (z.B. "Alt", "Strg", "Bild aufwärts") werden +explizit ausgeschrieben, wobei die Erkennung Groß- und Kleinschreibung nicht +unterscheidet. Falls das Tastenkürzel Modifikator-Tasten enthält, werden die +Namen der Tasten mit einem Pluszeichen zusammengefügt wobei die +Modifikator-Taste zuerst genannt werden muss, z.B. "Strg+A" oder "Strg++".

+ +

Einstellungen zu Modifikatoren

+ +
    +
  • Skalieren Die Tastaturmodifikatoren, um die Darstellung der +Hauptansicht mittels des Mausrads zu skalieren.
  • +
  • Rotieren Die Tastaturmodifikatoren, um die Darstellung der +Hauptansicht mittels des Mausrads zu rotieren.
  • +
  • Bildlauf Die Tastaturmodifikatoren, um die Darstellung der +Hauptansicht mittels des Mausrads horizontal zu verschieben.
  • +
  • In Zwischenablage kopieren Die Tastaturmodifikatoren, um Texte oder +Bilder von einer Seite in die Zwischenablage zu kopieren.
  • +
  • Anmerkungen hinzufügen Die Tastaturmodifikatoren, um einer Seite +Anmerkungen hinzu zufügen.
  • +
  • Auswahl vergrößern Die Tastaturmodifikatoren, um die einen zu +vergrößernden Bereich mit der Maus auszuwählen.
  • +
+ + + + diff --git a/help/help_en_GB.html b/help/help_en_GB.html new file mode 100644 index 0000000..e8d2f56 --- /dev/null +++ b/help/help_en_GB.html @@ -0,0 +1,504 @@ + + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialogue to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialogue to save an unmodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colours Determines whether pages are rendered with inverted +colours.
  • +
  • Convert to greyscale Determines whether pages are converted to +greyscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper colour to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialogue listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximised and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Content Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasised. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behaviour settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronise presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronise outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight colour Determines the colour of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation colour The colour of annotations added by the program +using SVG colour keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background colour Determines the colour of the background using SVG +colour keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper colour Determines the colour of pages using SVG colour keywords +or hexadecimal notation '#rrggbb'.
  • +
  • Presentation background colour Overrides the paper colour in the +computation of the background colour of the presentation view and is defined +using SVG colour keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimisation used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a selection on a +page.
  • +
+ + + + diff --git a/help/help_es.html b/help/help_es.html new file mode 100644 index 0000000..5194c24 --- /dev/null +++ b/help/help_es.html @@ -0,0 +1,560 @@ + + + + + + + + + Ayuda + + + + +

Ayuda

+ +

Tabla de contenidos

+
    +
  1. Menú principal
  2. +
      +
    1. Archivo
    2. +
    3. Edición
    4. +
    5. Ver
    6. +
    7. Pestañas
    8. +
    9. Marcadores
    10. +
    11. Ayuda
    12. +
    +
  3. Copy text Vista principal
  4. +
  5. Vistas auxiliares
  6. +
  7. Configuración
  8. +
      +
    1. Opciones de comportamiento
    2. +
    3. Opciones de gráficos
    4. +
    5. Opciones de la interfaz
    6. +
    7. Acceso directo a configuraciones
    8. +
    9. Configurar modificador
    10. +
    +
+ +

Introducción

+ +

qpdfview es un visor de documentos con pestañas. Usa Poppler como +soporte para PDF, libspectre para soporte de PS, DjVuLibre para soporte de +DjVu, CUPS para soporte de impresión y Qt para su interfaz.

+ +

Por favor consulte la página de manual para obtener información sobre la +línea de comandos y la configuración de archivos.

+ +

Menú principal

+ +

Archivo

+ +
    +
  • Abrir... Abre un cuadro de diálogo para seleccionar un archivo a +abrir en la pestaña actual. Si no hay ninguna pestaña, el archivo se abre en +una nueva pestaña.
  • +
  • Abrir en una nueva pestaña... Abre un cuadro de diálogo para +seleccionar archivos a abrir en nuevas pestañas.
  • +
  • Recientemente usados Contiene una lista de los últimos archivos +utilizados (si está activado en la configuración).
  • +
  • Actualizar Vuelve a cargar el archivo mostrado en la pestaña actual.
  • +
  • Guardar Guarda los cambios en anotaciones y campos de formulario en +el archivo mostrado en la pestaña actual.
  • +
  • Guardar como... Abre un cuadro de diálogo para guardar el archivo +mostrado en la pestaña actual incluyendo los cambios en anotaciones y campos +de formulario.
  • +
  • Guardar copia ... Abre un cuadro de diálogo para guardar una copia +no modificada del archivo mostrado en la pestaña actual.
  • +
  • Imprimir... Abre un cuadro de diálogo para imprimir el archivo +mostrado en la pestaña actual.
  • +
  • Salir Cierra todas las pestañas y finaliza el programa.
  • +
+ +

Editar

+ +
    +
  • Siguiente/Anterior/Primera/Última página Salta a la +siguiente/anterior/primera/última página del documento.
  • +
  • Salta a la página... Abre un cuadro de diálogo para introducir una +página para mostrar en la pestaña actual.
  • +
  • Saltar atŕas/adelante Salta hacia atŕas/adelante en el historial de +la página mostrada.
  • +
  • Buscar... Abre un cuadro de búsqueda debajo de la vista principal. La +búsqueda se inicia automáticamente dos segundos después del último cambio +del término de búsqueda o se inicia manualmente pulsando la tecla Intro. Si +se pulsan a la vez las teclas Mayús e Intro, la búsqueda se inicia en todas +las pestañas en vez de en la pestaña actual (este efecto se invierte si el +cuadro de búsqueda extendido se activa en la configuración).
  • +
  • Buscar anterior/siguiente Salta hacia la ocurrencia +anterior/siguiente del término de búsqueda en el documento.
  • +
  • Cancelar búsqueda Cancela la búsqueda actual y cierra el cuadro de +búsqueda.
  • +
  • Copiar al portapapeles Si se selecciona, el programa esperará a que +se arrastre un marco para copiar textos o imágenes.
  • +
  • Agregar anotación Si se selecciona, el programa esperará a que se +arrastre un marco para añadir anotaciones.
  • +
  • Configuración... Abre el diálogo de configuración. El botón +denominado 'Valores predeterminados' revertirá todos los ajustes en todas +las pestañas a sus valores predeterminados. El botón denominado 'Valores +predeterminados en la pestaña actual' sólo revertirá los ajustes de la +pestaña actual.
  • +
+ +

La página actual se puede cambiar introduciendo la página deseada +en el campo de texto de la barra de edición, que se puede enfocar usando +Ctrl+K y presionando la tecla Intro.

+ +

Ver

+ +
    +
  • Continuo Determina que todas las filas que componen la presentación +de las páginas sean visibles a la vez.
  • +
  • Dos páginas Determina que la presentación de las páginas use 2 +columnas.
  • +
  • Dos páginas con portada Determina que la presentación de las páginas +usen 2 columnas con una interrupción después de la portada.
  • +
  • Múltiples páginas Determina si las páginas usan múltiples +columnas. El número de columnas puede ser cambiado en cuadro de +configuración.
  • +
  • Derecha a izquierdat Determina cómo las páginas son ordenadas en +composiciones con múltiples páginas por fila.
  • +
  • Aumentar Incrementa la escala en un 10 por ciento. La escala máxima +es 5000 por ciento.
  • +
  • Reducir Reduce la escala en un 10 por ciento. La escala mínima es 10 +por ciento.
  • +
  • Tamaño original Reinicia la escala al 100 por ciento.
  • +
  • b>Ajustar al ancho de página Determina la escala de tal forma que todas +las páginas se ajusten a la ventana principal horizontalmente.
  • +
  • b>Ajustar al tamaño de la página Determina la escala de tal forma que +todas las páginas se ajusten a la ventana principal horizontal y +verticalmente.
  • +
  • Girar a la izquierda Gira la páginas a la izquierda en 90 grados.
  • +
  • Girar a la derecha Gira la páginas a la derecha en 90 grados.
  • +
  • Invertir colores Determina que las páginas se visualicen con los +colores invertidos.
  • +
  • Convertir a grises Determina que las páginas sean convertidas a +escala de grises al visualizarlas.
  • +
  • Recorte de márgenes Habilita la eliminación de los márgenes de la +página al visualizarlas.
  • +
  • Composición Habilita la composición de la página visualizada con el +color del papel para ajustar el fondo de los documentos escaneados.
  • +
  • Barra de herramientas Este menu contiene una lista de barras de +herramientas para acceder a acciones usadas frecuentemente.
  • +
  • Barra de tareas Este menu contiene una lista de todas las barras de +tareas disponibles para mostrar información suplementaria.
  • +
  • Fuentes... Abre un cuadro de diálogo listando las fuentes usadas en +el documento.
  • +
  • Pantalla completa Alterna al modo pantalla completa, es decir la +ventana se muestra maximizada y sin decoraciones.
  • +
  • Presentación Se ingresa al modo presentación que puede abandonarse al +presionar la tecla F12 o Escape. La tecla Inicio/Fin es usada para mostrar +la primera/última página. Las flechas de desplazamiento Derecha y Abajo, la +tecla Espacio y la tecla Av. pág. saltan a la siguiente página. Las flechas +de desplazamiento Izquierda y Arriba, la tecla de Retroceso y la tecla +Re.pág. saltan a la página previa. Presionando Control y Enter salta a la +última página previo al último salto.
  • +
+ +

La factor escala puede ser cambiado al ingresar el porcentaje +deseado en el campo de texto dentro de la barra de herramientas de Ver, el +cual puede ser enfocado usando Ctrl+L, y presionando la tecla Enter.

+ +

Pestañas

+ +
    +
  • Pestaña Anterior/Siguiente Convierte la pestaña anterior/siguiente en +la pestaña actual. Se traslada a la última/primera pestaña si la +primera/última pestaña es la pestaña actual.
  • +
  • Cerrar pestaña Cierra la pestaña actual.
  • +
  • Cerrar todas las pestañas Cierra todas las pestañas.
  • +
  • Cerrar todas las pestañas salvo la actual Cierra todas las pestañas +excepto la pestaña actual.
  • +
  • Recientemente cerrados Contiene una lista de las pestañas +recientemente cerradas (si está activada en la configuración).
  • +
+ +

Este menú contiene una lista de todas las pestañas a las cuales se las puede +convertir en la pestaña actual al hacer click en el correspondiente item del +menú. Las pestañas puede también ser cerradas con un clic del botón central +del mouse. Las primeras nueve pestañas también pueden ser activadas al +presionar la tecla Alt y alguna tecla del uno al nueve.

+ +

Marcadores

+ +
    +
  • Marcador previo Salta al marcador más próximo que se encuentre +previamente a la página actual.
  • +
  • Marcador previo Salta al marcador más próximo que se encuentre +posteriormente a la página actual.
  • +
  • Agregar marcador Agrega un marcador al archivo y página actualmente +abierto.
  • +
  • Quitar marcador Quita el marcador del archivo y página actualmente +abierto.
  • +
  • Quitar todos los marcadores Quita todos los marcadores presentes.
  • +
  • Abrir Abre el archivo correspondiente en la pestaña actual. Si no hay +ninguna pestaña, el archivo se abrirá en una pestaña nueva.
  • +
  • Abrir en una nueva pestaña Abre el archivo correspondiente en una +nueva pestaña.
  • +
  • Saltar a la página Salta a la correspondiente página si el archivo ya +se encuentra abierto. De no ser así el archivo correspondiente se abre en +una nueva pestaña.
  • +
+ +

Ayuda

+ +
    +
  • Contenidos Se muestra este documento.
  • +
  • Acerca Se muestra la versión del programa.
  • +
+ +

Vista principal

+ +

La tecla de retroceso/espacio salta a la anterior/siguiente página. La tecla +inicio/fin salta a la primera/última página. La flechas de dirección, las +teclas repág y avpág desplazan la ventana de visualización. Presionando Ctrl +y enter salta a la última página antes del último salto.

+ +

Usando la rueda del mouse se desplaza hacia arriba y hacia +abajo. Presionando ALT mientras se usa la rueda del mouse permite +desplazar de izquierda a derecha. Presionando CTRL mientras se usa la +rueda del mouse permite escalar el documento. Presionando SHIFT +mientras se usa la rueda del mouse permite rotar el documento (Las teclas +especiales pueden ser cambiadas en el cuadro de diálogo de +configuraciones). Presionar y mantener el botón de la rueda del mouse para +seleccionar un rectángulo que permita hacer zoom.

+ +

Los links son resaltados en recuadros rojos (si es activado en +configuraciones). Clic con el botón izquierdo sobre un link para mostrar la +página linkeada o para abrir la URL linkeada en el navegador predeterminado +del sistema (si es activado en configuraciones). Clic con el bot central +sobre un link para mostrar la página linkeada en una nueva +pestaña. Posicionarse con el mouse sobre un link muestra su destino final en +forma de pequeña ventana emergente.

+ +

Los campos de formulario son resaltados en recuadros azules (si es activado +en configuraciones). Clic con el botón izquierdo sobre un campo de +formulario para editar sus contenidos. Posicionarse con el mouse sobre un +campo de formulario muestra su nombre n forma de pequeña ventana emergente.

+ +

La fuente de una posición en el documento puede ser abierto en el editor +usando el menú contextual, el cual puede opcionalmente contener un item para +la primera concidencia encontrada del nodo SyncTeX.

+ +

Para copiar textos o imágenes, presiona SHIFT, haz clic y +mantiene presionado el botón izquierdo del mouse para dibujar un recuadro +alrededor del área a copiar. Una vez liberado el botón, un menú emergente es +mostrado para seleccionar textos o imágenes al portapapeles.

+ +

Para agregar anotaciones, presiona CTRL, haz clic y mantiene +presionado el botón izquierdo del mouse para dibujar un recuadro alrededor +del área a anotar. Una vez liberado el botón, un menú emergente es mostrado +para poder seleccionar agregar textos o resaltar anotaciones. Clic con el +botón izquierdo para editar anotaciones. Clic con el botón derecho +para borrar anotaciones (Agregar y borrar anotaciones requiere +versión 0.20.1 o superior de la librería Poppler). Al poner el cursor del +mouse sobre una anotación se muestra su contenido en forma de pequeña +ventana emergente.

+ +

Para hacer zoom sobre una selección, mantenter presionados +SHIFT y CTRL y hacer clic y mantener el botón izquierdo del +mouse para dibujar un recuadro alrededor de la región desea para hacer zoom.

+ +

Mostrar barras y menues de herramientas puede ser alternado usando +atajos del teclado cuyos valores por defecto son "Shift+Alt+T" y +"Shift+Alt+M".

+ +

Vistas auxiliares

+ +

La Vista de perfil muestra una visión general del contenido del +documento. Un clic con el botón izquierdo sobre una entrada salta a la +respectiva página como vista principal. El menú contextual puede ser usado +para expandir/colapsar todos los items por debajo del item seleccionado.

+ +

La Vista de perfil puede ser también navegada usando el teclado y la rueda +del mouse. Manteniendo Shift y usando las teclas Arriba/Abajo se puede +desplazar la vista. Manteniendo Shift y usando las teclas Izquierda/Derecha +permite colapsar/expandir el item seleccionado y sus +descendientes. Manteniendo Shift y usando la rueda del mouse permite cambiar +el item seleccionado. Manteniendo la tecla Ctrl y usando la rueda del mouse +permite expandir/colapsar el item seleccionado.

+ +

La Vista de propiedades muestra información adicional contenida en +el documento.

+ +

La Vista de miniaturas muestra pequeñas versiones de las páginas +del documento. Un clic con el botón izquierdo en una entrada salta a la +respectiva página en la vista principal.

+ +

La Vista de marcadores muestra los marcadores relacionados con el +documento mostrado en la pestaña actual. El menú contextual contiene +entradas para saltar al marcador previo/siguiente o para agregar +marcadores. El menú contextual de cada entrada también contiene entradas +para editar y borrar marcadores.

+ +

Si está activado en las configuraciones, el cuadro de búsquea +extendido muestra una vista general conteniendo todos los resultados de +todas las búsquedas siendo realizadas en todas las pestañas. También muestra +el texto que rodea al resultado con el término de búsqueda +resaltado. Cliqueando en un resultado abre la pestaña correspondiente y +salta a su posición.

+ +

Opciones

+ +

Opciones de comportamiento

+ +
    +
  • Abrir URL Determina la apertura de links con URL en el navegador web +predeterminado.
  • +
  • Autoactualizar Determina si los archivos son automáticamente +recargados al cambiar en el disco.
  • +
  • Pistas recientemente usadas Si está activado, se muestra un menú de +usados recientemente y pone en lista a todos los archivos recientemente +utilizados según se haya configurado en la opción de "Cantidad de últimos +usados" (se hace efectivo después de reiniciar).
  • +
  • Mantener recientemente usados Si está activado, se muestra un menú de +cerrados recientemente y pone en lista a todas las pestañas recientemente +cerradas egún se haya configurado en la opción de "Cantidad de últimos +cerrados". Manteniendo las pestañas abiertas puede incrementar el uso de +memoria considerablemente (se hace efectivo después de reiniciar).
  • +
  • Restaurar pestañas Si está activado, las pestañas y sus propiedades +son guardadas al finalizar el programa y restauradas al iniciar nuevamente +el mismo.
  • +
  • Restaurar marcadores Si está activado, los marcadores son guardados +al finalizar el programa y restaurados al iniciar nuevamente el mismo.
  • +
  • b>Restaurar configuraciones de archivo Si está activado, las +configuraciones de archivo son guardadas/restauradas al abrir/cerrar +pestañas.
  • +
  • Guardar base de datos por intervalos El intervalo por el cual +pestañas, marcadores o configuraciones por página son guardados a la base de +datos.
  • +
  • Sincronizar presentación Si está activado, la vista principal puede +ser usada para controlar la vista de presentación.
  • +
  • Pantalla de presentación El índice de la pantalla a ser mostrada en +la vista de presentación.
  • +
  • Sincronizar vista de perfil Si está activado, la vista de perfil +resaltará la primera entrada apuntando a la página actual apenas esta última +cambie.
  • +
  • Desplazamiento mínimo Si está activado, la ventana solo se desplazará +si la posición de destino no se encuentra aún visible.
  • +
  • Factor zoom El número por el cual el factor de escala es +multiplicado.
  • +
  • Color de resaltado Determina el color de resaltado.
  • +
  • Tiempo de resaltado Determina la duración de los resaltados +temporales.
  • +
  • Color de anotación El color de anotación agregado por el programa +usando claves SVG de color o notación hexadecimal '#rrggbb'.
  • +
  • Editor El programa el cual es iniciado para editar. '%1' es +reemplazado por la dirección absoluta del archivo. '%2' resp. '%3' es +reemplazado por linea resp. del número de columna.
  • +
+ +

Configuración de gráficos

+ +
    +
  • Usar mosaicos Las páginas se dividirán en mosaicos antes del +renderizado y de la copia caché para reducir el uso de memoria.
  • +
  • Mantenter mixmaps caducos Si es activado, luego de un cambio en el +factor zoom, los mapas de píxeles (pixmaps) serán usados para dibujar +aproximaciones de los pixmaps finales hasta que que estos estén disponibles +al costo de incrementar el uso de memoria.
  • +
  • Usar la proporción de píxeles del dispositivo Si es activado, la +mayor proporción de píxeles del dispositivo que sea disponible se utilizará +para renderizar a modo fisico y mostrar en resolución lógica.
  • +
  • Adornar páginas Determina si las páginas serán apartadas del fondo.
  • +
  • Adornar links Determina si los links serán resaltados con recuadros +rojos.
  • +
  • Adornar campos de formulario Determina si los campos de formulario +serán resaltados con recuadros azules.
  • +
  • Color de fondo Determina el color de fondo usando claves de color SVG +o notación hexadecimal '#rrggbb'.
  • +
  • Color de página Determina el color de las páginas usando claves de +color SVG o notación hexadecimal '#rrggbb'.
  • +
  • Color de fondo en modo presentación Anula el color de fondo de la +página en modo presentación y se define usando claves de color SVG o +notación hexadecimal '#rrggbb'.
  • +
  • Páginas por fila Número de páginas por fila en modo composicion de +"múltiples páginas".

  • +
  • Espaciado de página Determina tanto el espacio vertical como +horizontal mostrado entre páginas.
  • +
  • Espaciado miniaturas Determina tanto el espacio vertical como +horizontal mostrado entre miniaturas.
  • +
  • Tamaño de miniaturas Determina el tamaño de las miniaturas.
  • +
  • Tamaño caché El programa tratará de ubicar en cache las páginas +renderizadas dentro de este límite fijado incrementando la velocidad de +renderizado al costo de incrementar el uso de memoria.
  • +
  • Prefetch El programa tratará de renderizar páginas aún no visibles +incrementando la velocidad de renderizado al costo de incrementar el uso de +memoria.
  • +
  • Distancia de prefetch El número de filas a más allá de la fila actual +y el doble de número de filas después de la misma que serán puestos en +prefetch.
  • +
  • Opciones PDF +
      +
    • Antialiasing Mejora la calidad de visualización a costa de la +performance.
    • +
    • Antialiasing en texto Mejora la calidad de visualización del texto a +costa de la performance.
    • +
    • Hinting texto Puede mejorar la calidad del texto para ciertas +fuentes.
    • +
    • Previa de sobreimpresión Si es activado, se muestra una vista previa +de la impresión de una capa de tinta encima de otra.
    • +
    • Modo lineas finas Permite seleccionar la optimización usada para +dibujar lineas finas.
    • +
    • Backend Permite seleccionar el backend usado para renderizar páginas.
    • +
    +
  • +
  • Opciones de PS +
      +
    • Bits de antialias en gráficos Determina la cantidad de antialiasing +para gráficos.
    • +
    • Bits de antialias en texto Determina la cantidad de antialiasing para +texto.
    • +
    +
  • +
+ +

Configuración de interfase

+ +
    +
  • Recuadro de búsqueda extendido Si es activado, el recuadro de +búsqueda predeterminado es extendido como panorámica mostrando los +resultados en todas las pestañas (efectivo después de reiniciar).
  • +
  • Superposición de anotaciones Si es activado, todas las anotaciones de +la página serán mostradas como superposiciones interactivas. De otro modo +cada anotación serán manejadas como recuadros emergentes individuales.
  • +
  • Overlay en campo de formulario Si es activado, todos los campos de +formulario en la página serán mostrados con un overlay interactivo. De lo +contrario cada campo de formulario será manejado como una ventana emergente +individual.
  • +
  • Posición de pestaña Define sobre qué borde de la vista principal +serán mostradas las pestañas.
  • +
  • Visibilidad de pestañas Determina si las pestañas serán mostradas si +al menos dos documentos se encuentran abiertos.
  • +
  • Extensión de pestañas Determina si las pestañas se extenderán +uniformemente sobre toda la barra de pestañas.
  • +
  • Nueva pestaña sobre pestaña activa Si es activado, nuevas pestañas +serán abiertas a la derecha de la pestaña activa.
  • +
  • Salir después de la última pestaña Si es activado, la aplicación se +cerrará después de cerrar la última pestaña.
  • +
  • Contador de recientemente abiertos Fija el número de archivos que son +listados en el menú de recientemente usados, siempre que "listar +recientemente usados" se encuentre activado (efectivo después de reiniciar).
  • +
  • Contador de recientemente cerrados Fija el número de pestañas que son +listadas en el menú de recientemente usados, siempre que "listar +recientemente cerrados" se encuentre activado (efectivo después de +reiniciar).
  • +
  • Barra de archivos Define qué acciones serán visibles en la barra de +archivos. Acciones disponibles son: abrir en nueva pestaña, abrir, +actualizar, guardar copia, guardar como, imprimir y separador (efectivo solo +después de reiniciar).
  • +
  • b>Barra de edición Define qué acciones serán visibles en la barra de +edición. Acciones disponibles son: página actual, página previa, página +siguiente, primera página, última página, saltar a página, saltar hacia +atrás, saltar hacia adelante, buscar, modo copiar a portapapeles, modo +agregar anotaciones y separador (efectivo solo después de reiniciar).
  • +
  • b>Barra de vista Define qué acciones serán visibles en la barra de +vista. Las acciones disponibles son: Factor de escala, incrementar zoom, +reducir zoom, modo páginas continuas, modo doble página, modo doble página +con cubierta, modo múltiples páginas, tamaño original, modo encajar al ancho +de la página, modo encajar al tamaño de página, rotar hacia la izquierda, +rotar hacia la derecha, pantalla completa, presentación y separador +(efectivo solo después de reiniciar).
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Menues desplazables Anula el estilo por defecto de tal forma que los +menues emergentes se puedan desplazarse en lugar de disponerse en múltiples +columnas si son más grandes que el espacio disponible en pantalla (efectivo +después de reiniciar).
  • +
  • Menues buscables Extiende la navegación por defecto vía teclado en +los menues de pestañas y marcadores mediante un mecanismo del tipo +"buscar-mientras-escribo".
  • +
  • Alternar barras de menu y herramientas con pantalla completa Siempre +se conmuta la visibilidad de las barras de menu y herramientas cuando se +pasa a pantalla completa.
  • +
  • Usar etiqueta de página Determina si una etiqueta de página del +documento suministrado será usado en lugar de números de página cuando se +sea disponible.
  • +
  • Título de documento como título de pestaña Determina el título de +pestaña según lo obtenido de los meta-datos en lugar del nombre del archivo.
  • +
  • Página activa en título de ventana Si es activado, la página activa y +el número de páginas del documento en la pestaña activa serán mostradas en +el título de la ventana.
  • +
  • Nombre de instancia en título de ventana Si es activado y la +instancia actual es nombrada, su nombre se mostrará en el título de la +ventana.
  • +
  • Resaltar miniatura activa Si es activado, la página actual será +remarcada en la vista de miniaturas.
  • +
  • Limitar miniaturas en resultados Si esta opción es activada y una +búsqueda es realizada, solo las páginas donde el término de búsqueda es +encontrado son mostrados en la vista de miniaturas.
  • +
+ +

Configuración de atajos

+ +

La configuración de atajos permite el ajuste de atajos de teclado según +preferencia personal. Los atajos son cambiados con doble clic sobre los +mismos para editar e ingresar el nuevo atajo. Cada acción puede disponer de +varios atajos al ingresar una lista de estos separados por punto y coma. Los +nombres de tecla que no son representados con una letra simple puede +escribirse explícitamente (ej.: "Alt", "Ctrl", "avPág"), y la concordancia +no es sensible entre letras mayúsculas y minúsculas. Si el atajo contiene +claves de modificadores, los nombres de las claves son agregadas con un +signo más y estas claves deben ser listadas primero (ej.: "Ctrl+A" o +"Ctrl++").

+ +

Configuración de modificadores

+ +
    +
  • Zoom Los modificadores de teclado para hacer zoom usando la rueda del +mouse en la vista principal.
  • +
  • Rotar Zoom Los modificadores de teclado para rotar usando la +rueda del mouse en la vista principal.
  • +
  • Desplazamientol Los modificadores de teclado para desplazarse +horizontalmente usando la rueda del mouse en la vista principal.
  • +
  • Copiar al portapapeles Los modificadores de teclado para copiar +textos o imágenes desde la página al portapapeles.
  • +
  • Agregar anotación Los modificadores de teclado para agregar +anotaciones en la página.
  • +
  • Zoom en selección Los modificadores de teclado para hacer zoom en una +selección sobre la página.
  • +
+ + + + diff --git a/help/help_fa.html b/help/help_fa.html new file mode 100644 index 0000000..fe8c4f9 --- /dev/null +++ b/help/help_fa.html @@ -0,0 +1,504 @@ + + + + + + + + + راهنما + + + + +

راهنما

+ +

فهرست مطالب

+
    +
  1. منوی اصلی
  2. +
      +
    1. فایل
    2. +
    3. ویرایش
    4. +
    5. نما
    6. +
    7. برگه‌ها
    8. +
    9. نشان‌ها
    10. +
    11. راهنما
    12. +
    +
  3. نمای اصلی
  4. +
  5. Auxiliary views
  6. +
  7. سامانش
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_fi.html b/help/help_fi.html new file mode 100644 index 0000000..d790f8c --- /dev/null +++ b/help/help_fi.html @@ -0,0 +1,504 @@ + + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Johdanto

+ +

qpdfview on välehdet mahdollistava dokumenttiselain. Siinä on +Poppler PDF tukeen, libspectre PS tukeen, DjVuLibre DjVu tukeen, CUPS +tulostustukeen ja Qt työkalupakki on sen käyttöliittymään.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_fr.html b/help/help_fr.html new file mode 100644 index 0000000..38abda9 --- /dev/null +++ b/help/help_fr.html @@ -0,0 +1,540 @@ + + + + + + + + + Aide + + + + +

Aide

+ +

Table des matières

+
    +
  1. Menu principal
  2. +
      +
    1. Fichier
    2. +
    3. Édition
    4. +
    5. Afficher
    6. +
    7. Onglets
    8. +
    9. Signets
    10. +
    11. Aide
    12. +
    +
  3. Vue principale
  4. +
  5. Vues auxiliaires
  6. +
  7. Paramètres
  8. +
      +
    1. Comportement
    2. +
    3. Paramètres d'affichage
    4. +
    5. Paramètres de l'interface
    6. +
    7. Raccourcis
    8. +
    9. Modificateurs
    10. +
    +
+ +

Introduction

+ +

qpdfview est une visionneuse de documents par onglets. Elle utilise +Poppler pour la prise en charge du format PDF, libspectre pour le format PS, +DjVuLibre pour le format DjVu, CUPS pour le support d'impression et la +bibliothèque Qt pour son interface.

+ +

Veuillez consulter la page du manuel pour obtenir des informations sur les +options en ligne de commande et sur les fichiers de configuration.

+ +

Menu principal

+ +

Fichier

+ +
    +
  • Ouvrir... Ouvre une boîte de dialogue pour choisir un fichier à +ouvrir dans l'onglet courant. S'il n'y a pas d'onglet, le fichier est ouvert +dans un nouvel onglet.
  • +
  • Ouvrir dans un nouvel onglet... Ouvre une boîte de dialogue pour +choisir les fichiers à ouvrir dans de nouveaux onglets.
  • +
  • Récemment utilisés Contient une liste des fichiers récemment utilisés +(si l'option est activée dans les paramètres).
  • +
  • Actualiser Recharge le fichier affiché dans l'onglet courant.
  • +
  • Enregistrer Enregistre les modifications des annotations et champs de +formulaire dans le fichier affiché dans l'onglet actuel.
  • +
  • Enregistrer sous... Ouvre une boîte de dialogue pour enregistrer le +fichier affiché dans l'onglet courant y compris les modifications des +annotations et des champs de formulaire.
  • +
  • Enregistrer une copie… Ouvre une boîte de dialogue pour enregistrer +une copie non modifiée du fichier affiché dans l'onglet actuel.
  • +
  • Imprimer... Ouvre une boîte de dialogue pour imprimer le fichier +affiché dans l'onglet courant.
  • +
  • Quitter Ferme tous les onglets, puis le programme.
  • +
+ +

Édition

+ +
    +
  • Page suivante/Page précédente/Première page/Dernière page Va à la +page suivante/page précédente/première page/dernière page du document.
  • +
  • Aller à la page... Ouvre une boîte de dialogue demandant le numéro de +la page à afficher dans l'onglet courant.
  • +
  • Aller vers l'arrière/l'avant Aller vers l'arrière/l'avant dans +l'historique des pages affichées.
  • +
  • Rechercher... Ouvre la barre de recherche sous l'affichage +principal. La recherche démarre automatiquement 2 secondes après le dernier +changement du terme de recherche ou est démarrée manuellement en appuyant +sur la touche entrée. Si la touche Maj est maintenue enfoncée quand la +touche entrée est pressée, la recherche démarre dans tous les onglets, et +non plus seulement dans l'onglet actuel. (Cet effet est annulé si la barre +de recherche avancée est activée dans les paramètres.)
  • +
  • Rechercher le précédent/suivant Saute à l'occurrence +précédente/suivante du terme recherché dans le document.
  • +
  • Annuler la recherche Annule la recherche en cours et ferme la barre +de recherche.
  • +
  • Copier dans le presse-papiers Lorsque l'action est lancée, le +programme attend le tracé d'une zone de sélection à la souris pour copier +son contenu sous forme de textes ou d'images.
  • +
  • Ajouter une annotation Lorsque cette action est lancée, le programme +attend qu'une zone soit tracée avec la souris pour y ajouter une annotation.
  • +
  • Paramètres... Ouvre la boîte de dialogue des paramètres. Le bouton « +Défauts » permet de restaurer tous les réglages de tous les onglets à leur +valeur par défaut. Le bouton « Défauts sur l'onglet actuel » ne restaure les +paramètres par défaut que de l'onglet courant.
  • +
+ +

La page courante peut être modifiée en saisissant le numéro de la +page souhaitée dans le champ de texte de la barre d'outils, auquel on peut +accéder par Ctrl+K, et en validant par la touche entrée.

+ +

Affichage

+ +
    +
  • Continu Permet de rendre simultanément visibles les différentes +lignes de la mise en page.
  • +
  • Deux pages Mise en page en mode deux colonnes.
  • +
  • Deux pages avec page de couverture Mise en page en deux colonnes avec +un saut de page pour la page de couverture.
  • +
  • Multiples pages Mode de mise en page à plusieurs colonnes. Le nombre +de colonnes se règle dans le menu paramètres.
  • +
  • Droite vers la gauche Indique comment les pages sont présentées +lorsque la mise en page multiple comporte plusieurs pages par ligne.
  • +
  • Zoom avant Augmente le facteur d'échelle par tranche de 10 %. Le +facteur d'échelle maximum est de 5000 %.
  • +
  • Zoom arrière Diminue le facteur d'échelle par tranche de 10 %. Le +facteur d'échelle minimum est de 10 %.
  • +
  • Taille originale Rétablit le facteur d'échelle à 100 pourcent.
  • +
  • Ajuster à la largeur de la page Ajuste le facteur d'échelle de façon +à ce que la page occupe toute la largeur de la fenêtre principale.
  • +
  • Ajuster à la taille de la page Ajuste le facteur d'échelle de façon à +ce que la page occupe toute la hauteur de la fenêtre principale.
  • +
  • Rotation vers la gauche Tourne la page vers la gauche (le sens +contraire des aiguilles d'une montre) de 90 degrés.
  • +
  • Rotation vers la droite Tourne la page vers la droite (le sens des +aiguilles d'une montre) de 90 degrés.
  • +
  • Inverser les couleurs Précise que les pages doivent être affichées en +couleurs inversées.
  • +
  • Convertir en niveaux de gris Détermine si les pages sont converties +en niveaux de gris après le rendu.
  • +
  • Rogner les marges Active la suppression des marges de page vides +après le rendu.
  • +
  • Composition
  • +
  • Barre d'outils Ce menu contient une liste de barres d'outils +disponibles pour accéder aux actions fréquemment utilisées.
  • +
  • Docks Ce menu contient la liste des docks disponibles pour afficher +des informations supplémentaires.
  • +
  • Polices... Ouvre une boîte de dialogue cataloguant l'ensemble des +polices de caractères utilisées dans le document.
  • +
  • Plein écran Bascule en mode plein écran ; la fenêtre occupe la taille +maximale sans décoration.
  • +
  • Présentation... Entre dans le mode présentation que l'on peut quitter +par les touches F12 ou Echap. La touche Home/Fin permet d'afficher la +première/dernière page. Les touches droite, bas ou espace permettent d'aller +à la page suivante. Les touches gauche, haut ou retour permettent d'aller à +la page précédente. L'appui simultané sur les touches control et entrée +permet d'aller à la page précédent le dernier saut.
  • +
+ +

Le facteur d'échelle peut-être modifié en saisissant le pourcentage +souhaité dans le champ de texte de la barre d'outils, accessible par le +raccourci Ctrl+L, et en valident par la touche entrée.

+ +

Onglets

+ +
    +
  • Onglet précédent/suivant Passe à l'onglet précédent/suivant. Boucle +sur le dernier/premier onglet si l'onglet courant est le premier/dernier.
  • +
  • Fermer l'onglet Ferme l'onglet courant.
  • +
  • Fermer tous les onglets Ferme tous les onglets.
  • +
  • Fermer tous les onglets sauf l'onglet courant Ferme tous les onglets +sauf l'onglet courant.
  • +
  • Récemment fermés Contient une liste des onglets récemment fermés (si +l'option est activée dans les paramètres).
  • +
+ +

Ce menu contient une liste de tous les onglets qui peuvent devenir l'onglet +courant par sélection dans le menu. Les onglets peuvent être fermés en +cliquant sur le bouton du milieu de la souris. Les neufs premiers onglets +peuvent être sélectionnés en maintenant la touche Alt enfoncée et en +pressant une touche de un à neuf.

+ +

Signets

+ +
    +
  • Signet précédent Va au signet le plus proche avant la page courante.
  • +
  • Signet suivant Va au signet le plus proche après la page courante.
  • +
  • Ajouter un signet Ajoute un signet à la page courante du fichier +courant.
  • +
  • Supprimer le signet Supprime le signet de la page courante du fichier +courant.
  • +
  • Enlever tous les signets Enlève tous les signets.
  • +
  • Ouvrir Ouvre le fichier correspondant dans l'onglet courant. S'il n'y +a pas d'onglet, le fichier est ouvert dans un nouvel onglet.
  • +
  • Ouvrir dans un nouvel onglet Ouvre le fichier correspondant dans un +nouvel onglet.
  • +
  • Aller à la page Va à la page correspondante si le fichier en question +est déjà ouvert. Sinon le fichier est d'abord ouvert dans un nouvel onglet.
  • +
+ +

Aide

+ +
    +
  • Contenu Affiche ce document.
  • +
  • À propos Affiche le numéro de version du programme.
  • +
+ +

Vue principale

+ +

La touche retour/espace permet d'aller à la page précédente/suivante. La +touche Home/Fin permet d'aller à la première/dernière page. Les flèches, les +touches page vers le haut, page vers le bas permettent de faire défiler la +vue. L'appui simultané sur les touches control et entrée permet d'aller à la +page précédent le dernier saut.

+ +

Utilisez la roulette de la souris pour faire défiler la page +verticalement. Maintenez la touche ALT enfoncée lorsque vous utilisez +la roulette pour faire défiler la page horizontalement. Maintenez la touche +CTRL enfoncée lorsque vous utilisez la roulette pour zoomer ou +dézoomer le document. Maintenez la touche SHIFT enfoncée lorsque vous +utilisez la roulette pour tourner le document (la configuration du clavier +peut être changée dans la boîte de dialogue des paramètres). Cliquez et +maintenez le bouton central de la souris pour sélectionner une zone +rectangulaire sur laquelle zoomer.

+ +

Les liens sont surlignés par des cadres rouges (si cela est activé dans les +paramètres). Un clic gauche sur un lien montre la page liée ou ouvre la page +dans le navigateur par défaut (si cela est activé dans les paramètres). Un +clic central sur un lien ouvre la page liée dans un nouvel onglet. Passer le +curseur au-dessus d’un lien affiche sa destination comme une astuce.

+ +

Les champs de formulaire sont mis en valeur par un cadre bleu (si ce +comportement a été choisi dans les paramètres). Un clic gauche sur un champ +de formulaire permet d'en éditer le contenu. Passer sur un champ de +formulaire affiche son nom dans une bulle d'aide.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

Pour copier du texte ou des images, maintenir la touche Maj +enfoncée, cliquer et maintenir le bouton gauche de la souris enfoncé pour +dessiner un cadre autour de la zone à copier. Une fois le bouton de la +souris relâché, une boîte de dialogue s'affiche, permettant de choisir de +copier le texte ou l'image dans le presse-papiers.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

Pour zoomer sur la sélection, maintenir Maj et Ctrl, +puis cliquer et maintenir le bouton gauche de la souris enfoncé pour +encadrer la région à agrandir.

+ +

La visibilité des barres d’outils et de menu peut être alternée en +utilisant les raccourcis clavier configurables dont les valeurs par défaut +sont « Shift + Alt + T » et « Shift + Alt + M ».

+ +

Vues auxiliaires

+ +

Le sommaire (F6) affiche une vue d'ensemble du contenu du +document. Un clic gauche sur une entrée bascule sur la page respective dans +la vue principale. Le menu contextuel peut être utilisé pour +développer/réduire tous les éléments en dessous de l'élément sélectionné.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

L' affichage des propriétés permet d'afficher des informations +supplémentaires contenues dans le document.

+ +

L' affichage des miniatures permet d'afficher des versions plus +petites des pages du document. Un clic gauche dans une entrée passe à la +page respective dans la vue principale.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

Si activé dans les paramètres, la barre de recherche avancée +affiche une vue d'ensemble contenant les résultats de toutes les recherches +étant exécutées dans tous les onglets. Elle affiche également le texte au +environ d'un résultat avec le terme de recherche étant mis en +surbrillance. Cliquer sur un résultat ouvre l'onglet correspondant et +bascule sur sa position.

+ +

Paramètres

+ +

Comportement

+ +
    +
  • Ouvrir une URL Détermine si les liens vers une URL sont ouverts dans +le navigateur par défaut.
  • +
  • Actualisation automatique Détermine si les fichiers sont rechargés +automatiquement lors de leur modification sur le disque dur.
  • +
  • Fichiers récemment ouverts Si l'item est validé, un menu est +disponible et propose autant de fichiers récemment ouverts qu'il est précisé +dans le champ « Nombre de fichiers récemment ouverts » (nécessite un +redémarrage).
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restaurer les onglets Si l'option est validée, les onglets et leurs +propriétés sont enregistrées lors de la fermeture du programme et restaurer +lors de son ouverture.
  • +
  • Restaurer les signets Si l'item est validé, les signets sont +enregistrés en quittant le programme et restaurés lors de sa ré-ouverture.
  • +
  • Restaurer les paramètres par fichier Si l'item est validé, les +réglages propres à chaque fichier sont enregistrés/restaurés à chaque +ouverture/fermeture des onglets.
  • +
  • Intervalle de sauvegarde de la base de données L’intervalle après +lequel les onglets, marques-pages ou les paramètres personalisés par fichier +sont sauvegardés dans la base de données.
  • +
  • Synchroniser la présentation Si l'item est validé, la vue principale +permet de contrôler la vue du mode présentation.
  • +
  • Écran de présentation La référence de l'écran sur lequel afficher la +présentation.
  • +
  • Synchroniser le sommaire Si l'item est validé, la page du sommaire +correspondant à la page courante est mise en valeur et s'actualise à tous +changements de page.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Facteur de zoom Le nombre par lequel le facteur de zoom sera +respectivement multiplié ou divisé selon que l’on zoome ou dézoome.
  • +
  • Couleur de surlignement Permet de choisir la couleur de surlignement.
  • +
  • Durée de mise en surbrillance Précise la durée des surlignements +temporaires.
  • +
  • Couleur d'annotation Précise la couleur des annotation ajoutées par +le programme, en utilisant les couleurs SVG ou la notation hexadécimale +'#rrggbb'.
  • +
  • Éditeur de source Le programme qui est lancé pour éditer un fichier +source. « %1 » est remplacé par le chemin absolu du fichier. « %2 » (resp. « +%3 ») est remplacé par le numéro de ligne (resp. colonne).
  • +
+ +

Affichage

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Conserver l'affichage lors du zoom Si l'item est validé, le cache +graphique est utilisé lors des zoom pour permettre un affichage approximatif +temporaire avant le rendu de l'image finale. Cette option augment +l'utilisation de la mémoire.
  • +
  • Utiliser le taux de pixel de l'appareil Si l'item est validé, +l'affichage se fait en utilisant la valeur maximale du taux de pixel.
  • +
  • Décorer les pages Permet de tracer le cadre séparant la page de son +arrière-plan.
  • +
  • Décorer les liens Précise si les liens sont mis en valeur par un +cadre rouge.
  • +
  • Décorer les champs de formulaire Précise si les champs de formulaire +sont mis en valeur par un cadre bleu.
  • +
  • Couleur de l'arrière-plan Précise la couleur de l'arrière-plan à +l'aide des couleurs SVG ou en notation hexadécimale « #rrggbb ».
  • +
  • Couleur du papier Précise la couleur du papier à l'aide des couleurs +SVG ou en notation hexadécimal « #rrggbb ».
  • +
  • Couleur de l'arrière plan en mode présentation Remplace la couleur du +papier dans le mode présentation. La couleur est définie à l'aide des +couleurs SVG ou de la notation hexadécimal « #rrggbb » .
  • +
  • Pages par ligne Nombre de pages affichées par ligne dans le mode « +Pages multiples ».
  • +
  • Espacement des pages Précise les espacements verticaux et horizontaux +entre les pages.
  • +
  • Espacement des miniatures Précise les espacements verticaux et +horizontaux entre les miniatures.
  • +
  • Taille des miniatures Précise la dimension des miniatures.
  • +
  • Taille du cache Le programme stocke les pages affichées dans le +cache, dans la limite de l'espace choisi, améliorant ainsi la vitesse +d'affichage au prix d'une augmentation de l'utilisation de la mémoire.
  • +
  • Préchargement Le programme essaye de préparer l'affichage des pages +qui ne sont pas encore visibles afin d'accélérer leur rendu, au prix d'une +augmentation de l'usage du cache.
  • +
  • Distance de préchargement Le nombre de lignes au-delà de la ligne +actuelle et le double du nombre de lignes avant la ligne actuelle qui sont +préchargées.
  • +
  • Paramètres PDF +
      +
    • Anti-crénelage Améliore la qualité de l'affichage au prix d'une +baisse de performances.
    • +
    • Anti-crénelage du texte Améliore l'affichage du texte au prix d'une +baisse de performances.
    • +
    • Indications Peut améliorer l'affichage de certaines polices de +caractères.
    • +
    • Sur-imprimer l'aperçu Si l'item est validé, l'aperçu d'impression est +affiché en tenant compte de la superposition des couches d'encre.
    • +
    • Mode ligne fine Optimisation de rendu des lignes fines.
    • +
    • Moteur Choisit le moteur de rendu utilisé pour les pages.
    • +
    +
  • +
  • Paramètres PS +
      +
    • Nombre de bits d'anti-crénelage graphique Précise le nombre de bits +dédiés à l'anti-crénelage graphique.
    • +
    • Nombre de bites d'anti-crénelage du texte Précise le nombre de bits +dédiés à l'anti-crénelage du texte.
    • +
    +
  • +
+ +

Interface

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Superposition des annotations Si activé, toutes les annotations +présentes sur la page seront affichées en même temps. Autrement, chaque +annotation sera affichée séparément.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Position des onglets Défini le côté de la vue principale sur lequel +seront placés les onglets.
  • +
  • Visibilité des onglets Précise si l'onglet est affiché lorsqu'il y a +moins de deux documents ouverts.
  • +
  • Étendre les onglets Détermine si les onglets seront étendus même +au-delà de la barre des onglets.
  • +
  • Nouvel onglet à côté de l'onglet courant Si l'item est validé, les +nouveaux onglets sont ouverts à droite de l'onglet courant.
  • +
  • Fermer avec le dernier onglet Si l'option est validée, l'application +ferme après la fermeture du dernier onglet.
  • +
  • Compteur des fichiers récemments ouverts Précise le nombre de +fichiers qui sont listés dans le menu des fichiers récemments ouverts, si +l'item « Suivre les fichiers récemment ouverts » est validé (option +effective après un redémarrage).
  • +
  • Compteur des fichiers récemment fermés Précise le nombre de fichiers +qui sont listés dans le menu des fichiers récemment fermés, si l'item « +Suivre les fichiers récemment fermés » est validé (option effective après un +redémarrage).
  • +
  • Barre d'outils Fichier Défini quelles actions sont affichées dans la +barre d'outils Fichier. Les actions disponibles sont openInNewTab, open, +refresh, saveCopy, saveAs, print et separator. (Nécessite un redémarrage.)
  • +
  • Barre d'outils Édition Défini quelles actions sont visibles dans la +barre d'outils Édition. Les actions disponibles sont currentPage, +previousPage, nextPage, firstPage, lastPage, jumpToPage, jumpBackward, +jumpForward, search, copyToClipboardMode, addAnnotationMode et +separator. (Nécessite un redémarrage.)
  • +
  • Barre d'outils Affichage Défini quelles actions sont visibles dans la +barre d'outils Affichage. Les actions disponibles sont scaleFactor, zoomIn, +zoomOut, continuousMode, twoPagesMode, twoPagesWithCoverPageMode, +multiplePagesMode, originalSize, fitToPageWidthMode, fitToPageSizeMode, +rotateLeft, rotateRight, fullscreen, presentation et separator. (Nécessite +un redémarrage.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Titre du document comme titre de l’onglet Détermine si le titre de +l’onglet correspond aux métadonnées au lieu du nom du fichier.
  • +
  • Page courante dans le titre de la fenêtre Si cet item est validé, le +numéro de la page et le nombre total de pages du document actif sont +affichés dans la barre de titre de la fenêtre.
  • +
  • Nom de l’instance dans la barre de la fenêtre Si activé et si +l’instance courante est nommée, son nom est affiché dans la barre de la +fenêtre.
  • +
  • Surligner la miniature courante Si l'item est validé, la page +courante est mise en valeur dans la vue des miniatures.
  • +
  • Limiter les miniatures aux résultats Si cet item est validé, seules +les miniatures contenant le terme recherché sont affichées lors d'une +recherche.
  • +
+ +

Modificateurs

+ +

Le menu des raccourcis permet d'ajuster les raccourcis clavier à ses goûts +personnels. Les raccourcis sont modifiables en double-cliquant sur le +raccourci à éditer puis en saisissant ler nouveau raccourci. Chaque action +peut avoir plusieurs raccourcis, séparés par un point virgule. Les touches +dont le nom n'est pas une lettre unique doivent être écrites explicitement +(par exemple « Alt », « Ctrl », « PgDown »), et ne sont pas sensibles à la +casse. Si le raccourci contient des touches de modifications, les touches +doivent être jointes par le signe plus et la touche de modification doit +être écrite en premier, par exemple « Ctrl+A » or « Ctrl++ ».

+ +

Modificateurs

+ +
    +
  • Zoom La touche spéciale pour zoomer dans la vue principale à l'aide +de la molette de la souris.
  • +
  • Rotation La touche spéciale permettant la rotation dans la fenêtre +principale à l'aide de la molette de la souris.
  • +
  • Défiler La touche spéciale permettant le défilement dans la fenêtre +principale à l'aide de la molette de la souris.
  • +
  • Copier dans le presse-papiers La touche spéciale pour copier textes +et images dans le presse-papiers.
  • +
  • Ajouter une annotation La touche spéciale pour ajouter une annotation +dans une page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_gl.html b/help/help_gl.html new file mode 100644 index 0000000..afb6948 --- /dev/null +++ b/help/help_gl.html @@ -0,0 +1,504 @@ + + + + + + + + + Axuda + + + + +

Axuda

+ +

Índice

+
    +
  1. Menú principal
  2. +
      +
    1. Ficheiro
    2. +
    3. Editar
    4. +
    5. Ver
    6. +
    7. Lapelas
    8. +
    9. Marcadores
    10. +
    11. Axuda
    12. +
    +
  3. Vista principal
  4. +
  5. Vistas auxiliares
  6. +
  7. Axustes
  8. +
      +
    1. Axustes do comportamento
    2. +
    3. Axustes gráficos
    4. +
    5. Axustes da interface
    6. +
    7. Axustes dos atallos
    8. +
    9. Axustes dos modificadores
    10. +
    +
+ +

Introdución

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Abrir... Inicia o diálogo de selección do ficheiro para abrir na +lapela actual. Se non hai aberta unha lapela, abrirase nunha nova.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_it.html b/help/help_it.html new file mode 100644 index 0000000..6240134 --- /dev/null +++ b/help/help_it.html @@ -0,0 +1,530 @@ + + + + + + + + + Guida + + + + +

Guida

+ +

Sommario

+
    +
  1. Menù principale
  2. +
      +
    1. File
    2. +
    3. Modifica
    4. +
    5. Visualizza
    6. +
    7. Schede
    8. +
    9. Segnalibri
    10. +
    11. Aiuto
    12. +
    +
  3. Vista principale
  4. +
  5. Viste ausiliarie
  6. +
  7. Impostazioni
  8. +
      +
    1. Impostazioni del comportamento
    2. +
    3. Impostazioni grafiche
    4. +
    5. Impostazioni dell'interfaccia
    6. +
    7. Impostazioni delle scorciatoie
    8. +
    9. Impostazioni dei modificatori
    10. +
    +
+ +

Introduzione

+ +

qpdfview è un visualizzatore di documenti a schede. Utilizza +Poppler per il supporto PDF, libspectre per PS, DjVuLibre per DjVu, CUPS +per la stampa e il toolkit Qt per l'interfaccia.

+ +

Fare riferimento al manuale per informazioni sulle opzioni a riga di comando +e per i file di configurazione.

+ +

Menù principale

+ +

File

+ +
    +
  • Apri... apre un dialogo per consentire la scelta di un file da +visualizzare nella scheda corrente. Se non è aperta alcuna scheda, il file +verrà aperto in una nuova.
  • +
  • Apri in nuova scheda... apre un dialogo per consentire di scegliere i +file da aprire nelle nuove schede.
  • +
  • Usati di recente contiene un elenco dei file usati più recentemente +(se abilitato nelle impostazioni).
  • +
  • Aggiorna ricarica il file visualizzato nella scheda corrente.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Salva come... apre un dialogo per consentire il salvataggio del file +visualizzato nella scheda corrente includendo le modifiche alle note e ai +campi del form.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Stampa... apre un dialogo per la stampa del file visualizzato nella +scheda corrente.
  • +
  • Esci chiude tutte le schede e termina il programma.
  • +
+ +

Modifica

+ +
    +
  • Pagina successiva/precedente e Prima/Ultima pagina consentono lo +spostamento attraverso le pagine del documento.
  • +
  • Vai alla pagina... apre un dialogo dove inserire la pagina da +visualizzare nella scheda corrente.
  • +
  • Va indietro/avanti si sposta indietro e avanti nella cronologia della +pagina visualizzata.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Trova precedente/successivo va al risultato precedente/successivo del +termine ricercato nel documento.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copia negli appunti se selezionato, il programma attenderà la +selezione di una parte del documenti per copiare testi o immagini.
  • +
  • Aggiungi nota se selezionato, il programma attenderà la selezione di +una parte del documento per aggiungere le note.
  • +
  • Impostazioni... apre la finestra delle impostazioni. Il pulsante +«Predefiniti» riporterà tutte le impostazioni di tutte le schede ai valori +predefiniti. Il pulsante «Ripristina i valori predefiniti per la scheda +attuale» riporterà ai valori predefiniti solo le impostazioni della scheda +corrente.
  • +
+ +

La scheda attuale può essere modificata inserendo la pagina +desiderata nel campo di testo della barra di modifica, attivabile usando +Ctrl+K e premendo il tasto «Invio».

+ +

Visualizza

+ +
    +
  • Continuo indica se rendere visibili tutte le righe della pagina in +una volta.
  • +
  • Due pagine indica se il layout della pagina usa due colonne.
  • +
  • Due pagine compresa la copertina indica se il layout della pagina usa +due colonne con una interruzione dopo la copertina.
  • +
  • Pagine multiple indica se il layout della pagina usa più colonne. Il +numero di colonne può essere modificato nelle impostazioni.
  • +
  • Da destra a sinistra indica come posizionare le pagine nei layout con +più pagine per riga.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Dimensione originale ripristina il fattore di scala al 100%.
  • +
  • Adatta alla larghezza della pagina indica il fattore di scala +consentendo la visualizzazione di tutte le pagine adattate alla dimensione +orizzontale della finestra principale.
  • +
  • Adatta alla dimensione della pagina indica il fattore di scala +consentendo la visualizzazione di tutte le pagine adattate alla dimensione +orizzontale e verticale della finestra principale.
  • +
  • Ruota a sinistra ruota le pagine a sinistra (in senso antiorario) di +90 gradi.
  • +
  • Ruota a destra ruota le pagine a destra (in senso orario) di 90 +gradi.
  • +
  • Inverti colori indica se le pagine vengono mostrate con i colori +invertiti.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Barre degli strumenti contiene un elenco delle barre degli strumenti +disponibili per accedere rapidamente alle azioni svolte di frequente.
  • +
  • Elementi contiene un elenco di elementi disponibili per mostrare +informazioni supplementari.
  • +
  • Caratteri... apre un dialogo con l'elenco dei tipi di carattere usati +nel documento.
  • +
  • Schermo intero attiva/disattiva la modalità a schermo intero. Per +esempio, la finestra viene mostrata massimizzata e senza decorazioni.
  • +
  • Presentazione... avvia la modalità "presentazione" che può essere +terminata premendo F12 o Esc. I tasti "Home/Fine" vengono usati per mostrare +la prima o l'ultima pagina. I tasti freccia su e giù, la barra spaziatrice e +il tasto pagina giù vanno alla pagina successiva. I tasti freccia a sinistra +e freccia su vanno alla pagina precedente. Premendo Ctrl e Invio si tornerà +alla pagina visualizzata prima dell'ultimo spostamento.
  • +
+ +

Il fattore di scala può essere modificato inserendo la percentuale +desiderata nell campo di testo nella barra della visualizzazione che può +essere attivato usando Ctrl+L e premendo il tasto Invio.

+ +

Schede

+ +
    +
  • Scheda precedente/successiva attiva la scheda +precedente/successiva. Esegue un ciclo ultima/prima scheda se la +prima/ultima scheda è quella attuale.
  • +
  • Chiudi scheda chiude la scheda corrente.
  • +
  • Chiudi tutte le schede chiude tutte le schede.
  • +
  • Chiudi tutte le schede tranne questa chiude tutte le schede ad +eccezione della scheda in primo piano.
  • +
  • Chiusi di recente contiene un elenco delle schede chiuse più di +recente (se abilitato nelle impostazioni).
  • +
+ +

Questo menù contiene un elenco di tutte le schede che possono essere +attivate facendo clic sull'elemento del menù corrispondente. Le schede +possono anche essere chiuse facendo clic con il pulsante centrale del +mouse. Le prime nove schede possono anche essere attivate tenendo premuto +«Alt» e premendo i tasti da uno a nove.

+ +

Segnalibri

+ +
    +
  • Segnalibro precedente va al segnalibro più vicino prima della pagina +corrente.
  • +
  • Segnalibro successivo va al segnalibro più vicino dopo la pagina +corrente.
  • +
  • Aggiungi segnalibro aggiunge un segnalibro per il file e la pagina +attuale.
  • +
  • Rimuovi segnalibro rimuove il segnalibro per il file e la pagina +attuale.
  • +
  • Rimuovi tutti i segnalibri rimuove tutti i segnalibri.
  • +
  • Apri apre il file corrispondente nella scheda attuale. Se non c'è una +scheda il file verrà aperto in una nuova scheda.
  • +
  • Apri in nuova scheda apre il file corrispondente in una nuova scheda.
  • +
  • Vai alla pagina va alla pagina corrispondente se il file è già +aperto. In alternativa il file corrispondente verrà aperto in una nuova +scheda.
  • +
+ +

Aiuto

+ +
    +
  • Contenuti mostra questo documento.
  • +
  • Informazioni mostra la versione del programma.
  • +
+ +

Vista principale

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Viste ausiliarie

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Impostazioni

+ +

Impostazioni del comportamento

+ +
    +
  • Aprire URL indica se i collegamenti a URL devono essere aperti nel +browser predefinito.
  • +
  • Aggiornare automaticamente indica se i file vengono ricaricati +automaticamente se modificati sul disco.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Ripristinare schede se abilitato, le schede e le relative proprietà +vengono salvate alla chiusura del programma e ripristinate al riavvio.
  • +
  • Ripristinare segnalibri se abilitato, i segnalibri vengono salvati +alla chiusura del programma e ripristinati al riavvio.
  • +
  • Modificare impostazioni per singoli file se abilitato, le +impostazioni per ogni singolo file vengono salvate/ripristinate all'apertura +e alla chiusura delle schede.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Sincronizzare presentazione se abilitato, consente di usare la vista +principale per controllare la presentazione.
  • +
  • Schermo per presentazione indica l'indice dello schermo su cui +visualizzare la presentazione.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Colore dell'evidenziatore indica il colore dell'evidenziatore.
  • +
  • Durata dell'evidenziatore indica la durata delle evidenziazioni +temporanee.
  • +
  • Colore dell'annotazione il colore delle note aggiunte dal programma +usando codici colore SVG o natazioni esadecimali «#rrggbb».
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Impostazioni della grafica

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorare campo del form indica se i campi del form sono evidenziati +con frame blu.
  • +
  • Colore di fondo indica il colore dello sfondo usando colori SVG o +notazioni esadecimali «#rrggbb».
  • +
  • Colore della carta indica il colore delle pagine usando colori SVG o +notazioni esadecimali «#rrggbb».
  • +
  • Colore sfondo presentazione sovrascrive il colore della carta per lo +sfondo della presentazione ed è definito usando colori SVG o notazioni +esadecimali «#rrggbb».
  • +
  • Pagine per riga indica il numero di pagine per riga nella modalità a +pagine multiple.
  • +
  • Spaziatura pagina indica lo spazio sia orizzontale che verticale +mostrato tra le pagine.
  • +
  • Spaziatura miniatura indica lo spazio sia orizzontale che verticale +mostrato tra le miniature.
  • +
  • Dimensione miniatura indica la dimensione delle miniature.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • Impostazioni PDF +
      +
    • Antialiasing migliora la qualità di visualizzazione a scapito delle +prestazioni.
    • +
    • Antialiasing del testo migliora la qualità del testo mostrato a +scapito delle prestazioni.
    • +
    • Approssimazione del testo può migliorare la qualità del testo +mostrato per alcuni tipi di carattere.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend seleziona il backend usanto per il render delle pagine.
    • +
    +
  • +
  • Impostazioni PS +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Approssimazione del desto indica la misura di approssimazione per il +testo.
    • +
    +
  • +
+ +

Impostazioni interfaccia

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Posizione scheda indica su quale lato della vista principale verranno +mostrate le schede.
  • +
  • Visibilità scheda indica se mostrare le schede se sono aperti meno di +due documenti.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • Nuova scheda dopo quella attualese abilitato, le nuovo schede +verranno aperte alla destra di quella attiva.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Conteggio usati di recente imposta il numero di file che vengono +elencati nel relativo menù se «Memorizzare usati di recente» è +abilitato. (Le modifiche hanno effetto dopo il riavvio.)
  • +
  • Conteggio chiusi di recente imposta il numero di schede elencate nel +relativo menù, se «Mantenere chiuse di recente» è abilitato. (Le modifiche +hanno effetto dopo il riavvio.)
  • +
  • Barra degli strumenti «File» indica quali azioni sono disponibili +nella barre degli strumenti File. Le azioni disponibili sono openInNewTab, +open, refresh, saveCopy, saveAs, print e separator. (Le modifiche hanno +effetto dopo il riavvio.)
  • +
  • Barra degli strumenti «Modifica» indica quali azioni sono visibili +nella barra degli strumenti Modifica. Le azioni disponibili sono +currentPage, previousPage, nextPage, firstPage, lastPage, jumpToPage, +jumpBackward, jumpForward, search, copyToClipboardMode, addAnnotationMode e +separator. (Le modifiche hanno effetto dopo il riavvio.)
  • +
  • Barra degli strumenti «Visualizza» indica quali azioni sono visibili +nella barra degli strumenti Visualizza. Le azioni disponibili sono +scaleFactor, zoomIn, zoomOut, continuousMode, twoPagesMode, +twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation e separator. (Le modifiche hanno effetto dopo il riavvio.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Titolo del documento come titolo della scheda indica se il titolo +della scheda dovrà essere determinato dai meta-dati anziché dal nome del +file.
  • +
  • Pagina attuale nel titolo della finestra se abilitato, la pagina +attuale e il numero di pagine del documento verranno usati come titolo della +finestra.
  • +
  • Nome dell'istanza nel titolo della finestra se abilitato, e l'istanza +attuale ha un nome, il nome verrà usato com e titolo della finestra.
  • +
  • Evidenziare scheda corrente se abilitato, la pagina attuale verrà +evidenziata nelle miniature.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Impostazioni delle scorciatoie

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Impostazioni modificatori

+ +
    +
  • Ingrandimento il tasto da usare con la rotella del mouse per variare +la dimensione della vista principale.
  • +
  • Rotazione il tasto da usare con la rotella del mouse per ruotare la +vista principale.
  • +
  • Scorrimento il tasto da usare con la rotella del mouse per scorrere +orizzontalmente la vista principale.
  • +
  • Copia negli appunti il tasto da usare per copiare testi e immagini da +una pagina agli appunti.
  • +
  • Aggiungi nota il tasto per aggiungere note nella pagina.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ja.html b/help/help_ja.html new file mode 100644 index 0000000..4cff09f --- /dev/null +++ b/help/help_ja.html @@ -0,0 +1,439 @@ + + + + + + + + + ヘルプ + + + + +

ヘルプ

+ +

目次

+
    +
  1. メインメニュー
  2. +
      +
    1. ファイル
    2. +
    3. 編集
    4. +
    5. 表示
    6. +
    7. タブ
    8. +
    9. しおり
    10. +
    11. ヘルプ
    12. +
    +
  3. メインビュー
  4. +
  5. 予備ビュー
  6. +
  7. 設定
  8. +
      +
    1. 挙動設定
    2. +
    3. 画像設定
    4. +
    5. インタフェース設定
    6. +
    7. ショートカット設定
    8. +
    9. 修飾キー設定
    10. +
    +
+ +

はじめに

+ +

qpdfview はタブ型文書ビューアです。PDF サポートに Poppler、PS サポートに libspectre、DjVu +サポートに DjVuLibre、印刷サポートに CUPS、インタフェースに Qt toolkit を使用しています。

+ +

コマンドラインオプションと設定ファイルの情報については、マニュアルページを参照してください。

+ +

メインメニュー

+ +

ファイル

+ +
    +
  • 開く... 現在のタブで開くファイルを選択するダイアログを開きます。タブが無い場合は新規タブにファイルを開きます。
  • +
  • 新規タブで開く... 新規タブで開くファイルを選択するダイアログを開きます。
  • +
  • 最近使用したもの 最近使用したファイルの一覧を含みます (設定で有効になっている場合)。
  • +
  • 再読込 現在のタブに表示されているファイルを再読み込みします。
  • +
  • 保存 註釈やフォームフィールドへの変更を、現在のタブに表示されているファイルへ保存します。
  • +
  • 名前を付けて保存... +現在のタブに表示されている内容に対して行われた、註釈やフォームフィールドへの変更を、ファイルへ保存するダイアログを開きます。
  • +
  • コピーを保存... 現在のタブに表示されているファイルのコピーを、未変更のまま保存するダイアログを開きます。
  • +
  • 印刷... 現在のタブに表示されているファイルを印刷するダイアログを開きます。
  • +
  • 終了 全てのタブを閉じてプログラムを終了します。
  • +
+ +

編集

+ +
    +
  • 前ページ/次ページ/最初のページ/最後のページ 文書の前のページ、次のページ、最初のページ、最後のページへ移動します。
  • +
  • 指定ページへ跳ぶ... 現在のタブに表示するページを入力するダイアログを開きます。
  • +
  • 後ろに跳ぶ/前に跳ぶ 表示されているページの履歴で前後に跳びます。
  • +
  • 検索... +メインビューの下に検索ドックを開きます。そこに文字を入力すると、2秒後に自動的に検索が開始されます。また、リターンキーを押して手動で開始することもできます。リターンキーを押下する際に +Shift キーも押しておくと、現在のタブだけではなく全てのタブに対して検索を行います +(この挙動は、設定で拡張検索ドックが有効になっていると逆になります)。
  • +
  • 前を検索/次を検索 文書内の検索用語が出現する前の場所、次の場所に跳びます。
  • +
  • 検索を取り消す 現在実行中の検索を取り止め、検索ドックを閉じます。
  • +
  • クリップボードにコピー チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分のテキストや画像をコピーすることができます。
  • +
  • 註釈を追加 チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分に註釈を追加することができます。
  • +
  • 設定... +設定ダイアログを開きます。「既定」ボタンを押すと、全てのタブの設定が既定値に戻ります。「このタブの既定値」ボタンは、現在のタブのみを既定値に戻します。
  • +
+ +

現在のページは、Ctrl + K +を押して編集ツールバーのテキストフィールドにフォーカスを移し、目的のページ数を入力してリターンキーを押すことで、変更できます。

+ +

表示

+ +
    +
  • 連続表示 全てのページを一度に表示するかどうかを指定します。
  • +
  • 見開き 2つのページを横に並べて表示するかどうかを指定します。
  • +
  • 見開き(表紙付き) カバーページ以降の2つのページを横に並べて表示するかどうかを指定します。
  • +
  • 複数ページ 複数のページを横に並べて表示するかどうかを指定します。一行あたりのページ数は設定ダイアログで変更できます。
  • +
  • 右から左 複数のページを横に並べる方向を指定します。
  • +
  • 拡大 拡大率を10%増加します。最大倍率は5000%です。
  • +
  • 縮小 拡大率を10%縮小します。最小倍率は10%です。
  • +
  • 原寸大 拡大率を100%に戻します。
  • +
  • ページ幅に合わせる 全てのページがメインビューの横幅に完全に収まるように拡大率を指定します。
  • +
  • ページ寸法に合わせる 全てのページがメインビューの縦幅と横幅に完全に収まるように拡大率を指定します。
  • +
  • 左に回転 ページを左/反時計回りに90度回転します。
  • +
  • 右に回転 ページを右/時計回りに90度回転します。
  • +
  • 色を反転 反転された色でページを描画するかどうかを指定します。
  • +
  • グレースケールに変換 ページを描画した後グレースケールに変換するかどうかを指定します。
  • +
  • 余白を落とす ページ描画後の余白 (マージン) 削除を有効にします。
  • +
  • 合成 スキャンされた文書の背景を調整するために、紙の色と描画されたページの合成を有効にします。
  • +
  • ツールバー このメニューには、使用頻度が高い動作を利用できるツールバーの一覧が表示されます。
  • +
  • ドック このメニューには、補足情報を表示するための利用可能なドックの一覧が表示されます。
  • +
  • フォント... 文書中で使用されるフォント一覧のダイアログを開きます。
  • +
  • 全画面表示 全画面表示モードを切り替えます。ウィンドウは最大化され、ウィンドウ装飾が非表示になります。
  • +
  • プレゼンテーション... F12 を押すとプレゼンテーションモードになります。Home キーを押すと最初のページを、End +キーを押すと最後のページを表示します。矢印キーの → と ↓、スペースキーと Page Down キーで次のページに移動します。矢印キーの ← と +↑、Back Space キーと Page Up キーで前のページに移動します。Ctrl +キーを押しながらリターンキーを押すと、前に表示したページに跳びます。
  • +
+ +

拡大率は Ctrl + L +を押して表示ツールバーのテキストフィールドにフォーカスを移し、任意の数値を入力してリターンキーを押すことで変更できます。

+ +

タブ

+ +
    +
  • 前のタブ/次のタブ 前のタブ/次のタブを現在のタブにします。現在のタブが先頭/末尾のタブの場合は循環します。
  • +
  • タブを閉じる 現在のタブを閉じます。
  • +
  • 全てのタブを閉じる 全てのタブを閉じます。
  • +
  • 現在のタブ以外全て閉じる 現在のタブを除いた全てのタブを閉じます。
  • +
  • 最近閉じたもの 最近閉じたタブの一覧が表示されます (設定で有効になっている場合)。
  • +
+ +

このメニューには、クリックすることで現在のタブとして表示できる全てのタブが、メニュー項目として表示されます。タブは中クリックで閉じることができます。最初の9個までのタブは、Alt +キーを押しながら 1 〜 9 の数字キーを押すことで切り替えることもできます。

+ +

しおり

+ +
    +
  • 前のしおり 現在のページより前の直近のしおりに跳びます。
  • +
  • 次のしおり 現在のページより後の直近のしおりに跳びます。
  • +
  • しおりを付ける 現在のファイルとページにしおりを追加します。
  • +
  • しおりを外す 現在のファイルとページからしおりを削除します。
  • +
  • しおりを全て外す 全てのしおりを削除します。
  • +
  • 開く 任意のファイルを現在のタブに開きます。タブが無い場合は新しいタブにファイルが開かれます。
  • +
  • 新規タブで開く 新しいタブにファイルを開きます。
  • +
  • 指定ページへ跳ぶ 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。
  • +
+ +

ヘルプ

+ +
    +
  • 目次 この文書を表示します。
  • +
  • qpdfviewについて プログラムのバージョンを表示します。
  • +
+ +

メインビュー

+ +

Back Space キーで前のページ、スペースキーで次のページ、Home キーで最初のページ、End キーで最後のページに移動します。矢印キーの ↑ +と ↓、Page Up/Down キーでページを上下にスクロールします。Ctrl キーを押しながらリターンキーを押すとページの表示履歴を遡ります。

+ +

マウスホイールを上下に動かすとページがスクロールします。ALT +を押しながらマウスホイールを動かすと左右にスクロールします。CTRL +を押しながらマウスホイールを動かすと文書を拡大/縮小します。SHIFT を押しながらマウスホイールを動かすと文書が回転します +(各キーは設定ダイアログで変更できます)。

+ +

リンクは赤い枠で囲われて強調されます (設定で有効になっている場合)。リンクを左クリックするとリンク先のページに移動するか、リンク先の URL +をデフォルトのブラウザーで開きます +(設定で有効になっている場合)。リンクを中クリックするとリンク先のページを新しいタブで表示します。リンクにカーソルを合わせるとリンク先をツールチップとして表示します。

+ +

フォームフィールドは青い枠で囲われて強調されます +(設定で有効になっている場合)。フォームフィールドを左クリックすると内容を編集できます。フォームフィールドにカーソルを合わせると名前をツールチップとして表示します。

+ +

文書内のソースは、最初に一致した SyncTeX ノードの項目を含むコンテキストメニューから、ソースエディターで開くことができます。

+ +

文字や画像をコピーする場合は、SHIFT +を押しながら対象の範囲をマウスの左ボタンでドラッグして選択します。マウスのボタンを放すと、文字や画像をクリップボードにコピーするポップアップメニューが表示されます。

+ +

註釈を追加する場合は、CTRL +を押したままマウスの左ボタンでドラッグし、範囲選択します。マウスボタンを放すと、文字を追加したり註釈を強調したりできるポップアップメニューが表示されます。左クリックで註釈を編集、右クリックで註釈を削除できます +(註釈の追加や削除にはバージョン 0.20.1 以降の Poppler +ライブラリが必要です)。註釈にカーソルを合わせると内容をツールチップとして表示します。

+ +

特定の部分を拡大表示する場合は、SHIFTCTRL +を押したままマウスの左ボタンでドラッグし、拡大表示したい範囲を選択します。

+ +

ツールバーとメニューバーは、キーボードショートカットで表示/非表示を切り替えることができます。初期設定では、ツールバーの表示切り替えは +"Shift + Alt + T"、メニューバーの表示切り替えは "Shift + Alt + M" になっています。

+ +

補助ビュー

+ +

概要ビューは文書の内容の概要を表示します。各項目を左クリックすると、そのページがメインビューに表示されます。各項目を右クリックすると、その項目の要素を全て展開/畳むコンテキストメニューが表示されます。

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ko.html b/help/help_ko.html new file mode 100644 index 0000000..1f1661d --- /dev/null +++ b/help/help_ko.html @@ -0,0 +1,504 @@ + + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ku.html b/help/help_ku.html new file mode 100644 index 0000000..25dc7bb --- /dev/null +++ b/help/help_ku.html @@ -0,0 +1,504 @@ + + + + + + + + + Alîkarî + + + + +

Help

+ +

Tabloya Naverokan

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Destpêk

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_lt.html b/help/help_lt.html new file mode 100644 index 0000000..c91418e --- /dev/null +++ b/help/help_lt.html @@ -0,0 +1,504 @@ + + + + + + + + + Pagalba + + + + +

Pagalba

+ +

Turinys

+
    +
  1. Pagrindinis meniu
  2. +
      +
    1. Failas
    2. +
    3. Taisa
    4. +
    5. Rodinys
    6. +
    7. Kortelės
    8. +
    9. Žymės
    10. +
    11. Pagalba
    12. +
    +
  3. Pagrindinis rodinys
  4. +
  5. Pagalbiniai rodiniai
  6. +
  7. Nustatymai
  8. +
      +
    1. Elgsenos nustatymai
    2. +
    3. Grafikos nustatymai
    4. +
    5. Sąsajos nustatymai
    6. +
    7. Sparčiųjų klavišų nustatymai
    8. +
    9. Modifikavimo klavišų nustatymai
    10. +
    +
+ +

Pristatymas

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Pagrindinis meniu

+ +

Failas

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Įkelti iš naujo Iš naujo įkelia esamoje kortelėje rodomą failą.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Išeiti Užveria visas korteles ir užbaigia programos darbą.
  • +
+ +

Taisa

+ +
    +
  • Kitas/Ankstesnis/Pirmas/Paskutinis puslapis Pereina į +kitą/ankstesnį/pirmą/paskutinį dokumento puslapį.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ms.html b/help/help_ms.html new file mode 100644 index 0000000..9ea458a --- /dev/null +++ b/help/help_ms.html @@ -0,0 +1,518 @@ + + + + + + + + + Bantuan + + + + +

Bantuan

+ +

Senarai kandungan

+
    +
  1. Menu utama
  2. +
      +
    1. Fail
    2. +
    3. Sunting
    4. +
    5. Lihat
    6. +
    7. Tab
    8. +
    9. Tanda buku
    10. +
    11. Bantuan
    12. +
    +
  3. Paparan utama
  4. +
  5. Paparan tambahan
  6. +
  7. Tetapan
  8. +
      +
    1. Tetapan kelakuan
    2. +
    3. Tetapan grafik
    4. +
    5. Tetapan antaramuka
    6. +
    7. Tetapan pintasan
    8. +
    9. Tetapan pengubahsuai
    10. +
    +
+ +

Pengenalan

+ +

qpdfview merupakan pelihat dokumen bertab. Ia menggunakan Poppler +untuk sokongan PDF, libspectre untuk sokongan PS, DjVuLibre untuk sokongan +DjVu, CUPS untuk sokongan percetakan dan kit alat Qt untuk antaramukanya.

+ +

Sila rujuk halaman manual untuk maklumat pilihan baris-perintah dan fail +konfigurasinya.

+ +

Menu utama

+ +

Fail

+ +
    +
  • Buka... Buka dialog untuk memilih fail yang hendak dibuka dalam tab +semasa. Jika tiada tab, Fail akan dibuka pada tab baru.
  • +
  • Buka dalam tab baru... Buka dialog untuk memilih fail yang hendak +dibuka dalam tab baru.
  • +
  • Diguna baru-baru ini Mengandungi senarai fail yang baru diguna (jika +dibenarkan dalam tetapan).
  • +
  • Segar semula Muat semula fail yang dipaparkan dalam tab semasa.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Simpan sebagai... Buka dialog untuk simpan fail yang dipapar dalam +tab semasa termasuklah perubahan pada anotasi dan medan borang.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Cetak... Buka dialog untuk mencetak fail yang dipapar dalam tab +semasa.
  • +
  • Keluar Tutup semua tab dan tamatkan program.
  • +
+ +

Sunting

+ +
    +
  • b>Halaman Berikut/Terdahulu/Pertama/Terakhir Langkau ke halaman dokumen +berikut/terdahulu/pertama/terakhir.
  • +
  • Lompat ke halaman... Buka dialog untuk masuk ke halaman dan dipapar +pada tab semasa.
  • +
  • Lompat undur/maju Lompat undur/maju dalam sejarah halaman yang +dipaparkan.
  • +
  • Gelintar... Buka labuh gelintar dibawah paparan utama. Gelintar akan +mula secara automatik dua saat selepas perubahan terakir terma gelintar atau +ia dimulakan secara manual dengan menekan kekunci return. Jika pengubahsuai +Shift ditahan ketika kekunci return masih ditekan, gelintar dimulakan dalam +semua tab selain hanya tab semasa. (Kesan ini diterbalikkan jika labuh +gelintar lanjutan dibenarkan di dalam tetapan.)
  • +
  • Cari terdahulu/berikut Lompat ke kemunculan terma gelintar +terdahulu/berikut didalam dokumen.
  • +
  • Batal gelintar Batalkan gelintar yang sedang dijalankan dan tutu[ +labuh gelintar.
  • +
  • Salin ke papan keratan Jika ditanda, program akan tunggu bingkai +diseret untuk salin teks atau imej.
  • +
  • Tambah anotasi Jika ditanda, program akan tunggu bingkai diseret +untuk tambah anotasi.
  • +
  • Tetapan... Buka dialog tetapan. Butang berlabel 'Lalai' akan +kembalikan semua tetapan pada tab ke nilai lalainya. Butang berlabel 'Lalai +pada tab semasa' akan hanya kembalikan tetapan pada tab semasa ke nilai +lalai mereka.
  • +
+ +

Halaman semasa boleh diubah dengan memasukkan halaman yang +dikehendaki ke dalam medan teks di dalam palang alat sunting, yang mana +boleh difokus dengan menggunakan Ctrl+K, dan menekan kekunci return.

+ +

Lihat

+ +
    +
  • Berterusan Tentukan sama ada semua baris bentangan halaman kelihatan +serentak.
  • +
  • Dua halaman Tentukan sama ada bentangan halaman gunakan dua lajur.
  • +
  • Dua halaman dengan muka hadapan Tentukan sama ada bentangan halaman +gunakan dua lajur dengan hentian selepas muka hadapan.
  • +
  • Halaman berbilang Tentukan sama ada bentangan halaman gunakan lajur +berbilang. Bilangan lajur boleh diubah dalam dialog tetapan.
  • +
  • Kanan ke kiri Tentukan bagaimana halaman disusun dalam bentangan +dengan halaman berbilang per baris.
  • +
  • Zum masuk Tingkatkan faktor skala sebanyak 10 peratus. Faktor skala +maksimum ialah 5000 peratus.
  • +
  • Zum keluar Kurangkan faktor skala sebanyak 10 peratus. Faktor skala +minimum ialah 10 peratus.
  • +
  • Saiz asal Tetap semula faktor skala ke 100 peratus.
  • +
  • Muat dengan lebar halaman Tentukan faktor skala supaya semua halaman +sepenuhnya muat ke dalam paparan utama secara mengufuk.
  • +
  • Muat dengan saiz halaman Tentukan faktor skala supaya semua halaman +sepenuhnya muat ke dalam paparan utama secara mengufuk dan menegak.
  • +
  • Putar kiri Putar halaman ke kiri/lawan jam sebanyak 90 darjah.
  • +
  • Putar kanan Putar halaman ke kanan/ikut jam sebanyak 90 darjah.
  • +
  • Warna songsang Tentukan sama ada halaman diterap dengan warna +songsang.
  • +
  • Tukar ke skala kelabu Tentukan sama ada halaman ditukar ke skala +kelabu selepas penerapan.
  • +
  • Kerat margin Benarkan pembuangan margin halaman kosong selepas +penerapan.
  • +
  • Komposisi Benarkan komposisi halaman terterap dengan warna kertas +untuk melaras latar belakang dokumen diimbas.
  • +
  • Palang alat Menu ini mengandungi senarai palang alat yang ada untuk +mencapa tindakan yang kerap diguna.
  • +
  • b>Labuh Menu ini mengandungi senarai labuh yang ada untuk memaparkan +maklumat tambahan.
  • +
  • Fon... Buka dialog menyenaraikan fon yang diguna dalam dokumen.
  • +
  • Skrin Penuh Togol ke mod skrin penuh, iaitu tetingkap dipaparkan +secara maksimum dan tanpa hiasan.
  • +
  • Persemabahan... Masuk ke mod persembahan dengan menekan kekunci F12 +atau escape. Kekunci home/end digunakan untuk paparkan halaman +pertama/terakhir. Kekunci anak panah kanan dan bawah, kekunci space dan page +down lompat ke halaman berikutnya. Kekunci anak panah kiri dan atas, kekunci +backspace dan page up lompat ke halaman terdahulu. Menekan kekunci control +dan return akan lompat kembali ke halaman terdahulu sebelum lompatan +terakhir.
  • +
+ +

Faktor skala boleh diubah dengan memasukkan peratus yang +dikehendaki ke dalam medan teks di dalam palang alat lihat, yang mana boleh +difokus dengan menggunakan Ctrl+L, dan menekan kekunci return.

+ +

Tab

+ +
    +
  • Tab terdahulu/berikutnya Jadikan tab terdahulu/berikutnya tab +semasa. Kitar tab pertama/terakhir jika tab pertama/terakhir adalah tab +semasa.
  • +
  • Tutup tab Tutup tab semasa.
  • +
  • Tutup semua tab Tutup semua tab.
  • +
  • Tutup semua tab kecuali tab semasa Tutup semua tab kecuali tab +semasa.
  • +
  • Ditutup baru-baru ini Mengandungi senarai tab yang baru ditutup (jika +dibenarkan dalam tetapan).
  • +
+ +

Menu ini mengandungi senarai semua tab yang jadikan tab semasa dengan +mengklik pada item menu berkenaan. Tab juga boleh ditutup dengan +mengklik-tengah tetikus. Sembilan tab yang pertama dapat diaktifkan dengan +menahan pengubahsuai Alt dan menekan kekunci satu hingga sembilan.

+ +

Tanda Buku

+ +
    +
  • Tanda buku terdahulu Lompat ke tanda buku terdekat sebelum halaman +semasa.
  • +
  • Tanda buku berikutnya Lompat ke tanda buku terdekat selepas halaman +semasa.
  • +
  • Tambah tanda buku Tambah tanda buku untuk fail dan halaman semasa.
  • +
  • Buang tanda buku Buang tanda buku untuk fail dan halaman semasa.
  • +
  • Buang tanda buku Buang semua tanda buku.
  • +
  • Buka Buka fail berkenaan di dalam tab semasa. Jika tiada tab, fail +akan dibuka dalam tab baharu.
  • +
  • Buka dalam tab baru Buka fail berkenaan dalam tab baru.
  • +
  • Lompat ke halaman Lompat ka halaman berkenaan jika fail berkenaan +sudah dibuka. Jika tidak, fail tersebut akan dibuka dalam tab baharu.
  • +
+ +

Bantuan

+ +
    +
  • Kandungan Papar dokumen ini.
  • +
  • Perihal Papar versi program.
  • +
+ +

a name="mainview">Paparan utama

+ +

Kekunci backspace/space key langkau ke halaman +terdahulu/berikutnya. Manakala, kekunci home/end langkau ke halaman +pertama/terakhir. Kekunci anak panah, page up dan page menatal port +pandang. Penekanan kekunci control dan return jumps akan lompat ke halaman +sebelum lompatan terakhir.

+ +

Dengan menggunakan roda tetikus ditatal ke atas atau ke bawah. Tahan +ALT ketika menggunakan roda tetikus untuk ditatal ke kiri dan ke +kanan. Tahan CTRL ketika menggunakan roda tetikus untuk skalakan +dokumen. Tahan SHIFT ketika menggunakan roda tetikus untuk memutar +dokumen. (Pengubahsuai papan kekunci boleh diubah di dalam dialog tetapan.) +Klik dan tahan butang tengah tetikus untuk membentuk segiempat seterusnya +mengezum masuk.

+ +

Pautan disorot oleh bingkai merah (jika dibenarkan dalam tetapan). Klik-kiri +pada pautan untuk menunjukkan halaman terpaut atau buka URL terpaut dalam +pelayar lalai (jika dibenarkan dalam tetapan). Klik-tengah pada pautan untuk +menunjukkan halaman terpaut dalam tab baharu. Kursor berada diatas pautan +memaparkan destinasinya sebagai tip alat.

+ +

Medan borang disorot dengan bingkai biru (jika dibenarkan dalam +tetapan). Klik-kiri pada medan borang untuk menyunting +kandungannya. Terapung diatas medan borang akan paparkan namanya sebagai tip +alat.

+ +

Sumber kedudukan dalam dokumen boleh dibuka dengan penyunting sumber +menggunakan menu konteks yang secara pilihannya mengandungi item untuk +pemadanan pertama nod SyncTeX.

+ +

Untuk menyalin teks atau imej, tahan SHIFT, klik dan tahan +butang kiri tetikus untuk menyeret bingkai disekeliling kawasan yang hendak +disalin. Seusai butang tetikus dilepaskan, satu menu timbul terpapar untuk +memilih sama ada hendak menyalin teks atau imej ke dalam papan keratan.

+ +

Untuk menambah catatan atau anotasi, tahan CTRL, klik dan +tahan butang kiri tetikus untuk menyeret bingkai disekeliling kawasan yang +hendak dicatatkan. Bila butang tetikus dilepaskan, satu menu timbul terpapar +sama ada hendak menambah teks atau menyorot cacatan. Klik-kiri untuk +menyunting catatan. Klik-kanan untuk membuang +catatan. (Penambahan dan pembuangan catatan memerlukan versi pustaka +Poppler 0.20.1 atau ke atas.) Kursor berada di atas catatan akan paparkan +kandungannya sebagai tip alat.

+ +

Untuk zum ke pemilihan, tahan SHIFT dan CTRL, +kemudian klik dan tahan butang kiri tetikus dan seret bingkai disekitar +kawasan yang hendak dizumkan.

+ +

Ketampakan palang alat dan menu boleh ditogol menggunakan pintasan +papan kekunci boleh dikonfigur yang mana nilai lalai adalah "Shift+Alt+T" +dan "Shift+Alt+M".

+ +

Paparan tambahan

+ +

Paparan garis luar memaparkan selayang pandang kandungan +dokumen. Seklik kiri pada masukan akan langkau ke halaman berkenaan dalam +paparan utama. Menu konteks boleh digunakan untuk kembang/kuncupkan semua +item dibawah item terpilih.

+ +

Paparan garis luar juga boleh dinavigasi menggunakan papan kekunci dan roda +tetikus. Tahan Shift dan klik kekunci Up/Down untuk menatal paparan. Tahan +Shift dan klik kekunci Left/Right akan kuncup/kembangkan satu aras item +dibawah item terpilih. Tahan Control dan klik kekunci Left/Right akan +sepenuhnya kuncup/kembangkan item terpilih dan anak-anaknya. Tahan Shift dan +tatal guna roda tetikus akan mengubah item terpilih. Tahan Control dan tatal +roda tetikus akan kembang/kuncupkan item terpilih.

+ +

Paparan sifat paparkan maklumat tambahan yang terkandung di dalam +dokumen.

+ +

Paparan lakaran kenit papar versi kecil halaman dokumen. Klik kiri +padanya akan lompat ke halaman berkenaan di paparan utama.

+ +

Paparan tanda buku menunjukkan tanda buku berkaitan dengan dokumen +yang terpapar dalam tab semasa. Menu konteks mengandungi masukan yang +langkau ke tanda buku berikutnya/terdahulu atau untuk menambah tanda +buku. Menu konteks bagi setiap masukan untuk sunting dan padam tanda buku.

+ +

Jika dibenarkan dalam tetapan, labuh gelintar lanjutan menunjukkan +selayang pandang yang mengandungi keputusan semua gelintar yang telah dibuat +dalam semua tab. Ia juga menunjukkan teks disekitar keputusan yang mana +terma gelintar ditegaskan. Dengan mengklik pada keputusan tersebut akan +membuka tab berkenaan dan langkau ke kedudukannya.

+ +

Tetapan

+ +

Tetapan kelakuan

+ +
    +
  • Buka URL Tentuka sama ada pautan ke URL dibuka dalam pelayar lalai.
  • +
  • Segar semula automatik Tentukan sama ada fail dimuat semula secara +automatik jika berubah pada cakera.
  • +
  • Jejak diguna baru-baru ini Jika dibenarkan, satu menu diguna +baru-baru ini akan tersedia dan senaraikan sebanyak mungkin fail diguna +baru-baru ini di dalam pilihan "Kiraan diguna baru-baru ini". (Berkesan +selepas dimula semula.)
  • +
  • Kekalkan ditutup baru-baru ini Jika dibenarkan, menu ditutup +baru-baru ini tersedia dan senaraikan beberapa tab ditutup baru-baru ini +yang telah ditetapkan dalam pilihan "Kiraan ditutup baru-baru +ini". Pengekalan tab sedia ada menyebabkan peningkatan penggunaan ingatan +secara drastik. (Berkesan selepas mula semula.)
  • +
  • Pulih tab Jika dibenarkan, tab dan sifatnya disimpan pada penghujung +program dan dipulih semasa mula semula.
  • +
  • Pulih tanda buku Jika dibenarkan, tanda buku disimpan pada penghujung +program dan dipulih semasa mula semula.
  • +
  • Pulih tetapan per-fail Jika dibenarkan, tetapan per-fail +disimpan/dipulih bila membuka/menutup tab.
  • +
  • Simpan sela pangkalan data Sela selepas tab, tanda buku atau tetapan +per-fail disimpan ke dalam pangkalan data.
  • +
  • Segerak persembahan Jika dibenarkan, paparan utama boleh digunakan +untuk mengawal paparan persembahan.
  • +
  • Skrin persembahan Indeks skrin untuk paparkan paparan persembahan.
  • +
  • Segerak paparan garis luas Jika dibenarkan, paparan garis luar akan +menyorot masukan pertama yang menuju ke halaman semasa bilamana halaman +semasa berubah.
  • +
  • Penatalan minimum Jika dibenarkan, port pandang hanya ditatal jika +kedudukan sasaran belum lagi kelihatan.
  • +
  • Faktor zum Bilangan faktor skala ialah perwakilan gandaan dibahagi +dengan perwakilan zum masuk.
  • +
  • Warna sorot Tentukan warna sorot.
  • +
  • Tempoh sorot Tentukan tempoh sorot sementara.
  • +
  • Warna catatan Warna catatan ditambah oleh program menggunakan kata +kunci warna SVG atau tandaan heksadesimal '#rrggbb'.
  • +
  • Penyunting sumber Program yang dimulakan untuk menyunting +sumber. '%1' diganti dengan laluan fail mutlak. '%2' diwakili '%3' diganti +dengan nombor lajur wakil baris.
  • +
+ +

Tetapan grafik

+ +
    +
  • Guna penjubinan Halaman akan dibahagikan kepada jubin sebelum diterap +dan dicachekan untuk mengurangkan penggunaan ingatan.
  • +
  • Kekalkan peta pix lapuk Jika dibenarkan, bila berlaku perubahan +faktor zum, peta pix tercache akan digunakan untuk melakar anggaran peta pix +akhir sehinggalah ia tersedia tetapi dengan kos penggunaan ingatan.
  • +
  • Guna nisbah piksel peranti Jika dibenarkan, nisbah piksel peranti +yang tersedia digunakan untuk menerap pada fizikal dan dipapar pada resolusi +logikal
  • +
  • Hias halaman Tentukan sama ada halaman ditetapkan terasing dari latar +belakang.
  • +
  • Hias pautan Tentukan sama ada pautan disorot dengan bingkai merah.
  • +
  • Hias medah borang Tentukan sama ada medan borang disorot dengan +bingkai biru.
  • +
  • Warna latar belakang Tentukan warna latar belakang menggunakan kata +kunci warna SVG atau notasi heksadesimal '#rrggbb'.
  • +
  • Warna kertas Tentukan warna halaman menggunakan kata kunci warna SVG +atau notasi heksadesimal '#rrggbb'.
  • +
  • Warna latar belakang persembahan Batalkan warna kertas dalam +pengiraan warna latar belakang paparan persembahan dan ditakrif menggunakan +kata kunci warna SVG atau notasi heksadesimal '#rrggbb'.
  • +
  • Halaman per baris Bilangan halaman per baris di dalam mod bentangan +'halaman berbilang'.
  • +
  • Penjarakkan halaman Tentukan kedua-dua jarak menegak & mengufuk yang +dipapar diantara halaman.
  • +
  • Penjarakkan lakaran kenit Tentukan kedua-dua jarak menegak & mengufuk +yang dipapar diantara lakaran kenit.
  • +
  • b>Saiz lakaran kenit Tentukan saiz lakaran kenit.
  • +
  • Saiz cache Program akan cuba cache halaman terterap didalam had ini +akan tingkatkan kelajuan penerapan dengan kos penggunaan ingatan meingkat.
  • +
  • Prefetch Program akan cuba menerap halaman yang belum lagi kelihatan +dengan meningkatkan kelajuan penerapan pada kos penggunaan cache yang +meningkat.
  • +
  • Jarak prefetch Bilangan baris disebalik baris semasa dan dua kali +ganda bilangan baris sebelum baris semasa yang telah di prefetch.
  • +
  • Tetapan PDF +
      +
    • Antialias Pertingkatkan kualiti paparan dengan kos terhadap prestasi
    • +
    • Antialias teks Mepertingkatkan kualiti teks tetapi menjejaskan +prestasi
    • +
    • Bayangan teks Dapat mempertingkatkan kualitit paparan teks bagi fon +tertentu.
    • +
    • Pratonton lebih-cetak Jika dibenarkan, satu pratonton percetakan satu +lapisan dakwat diatas yang lain dipaparkan.
    • +
    • Mod garis nipis Pilih pengoptimuman yang digunakan untuk melukis +garis nipis.
    • +
    • Bahagian belakang Pilih bahagian belakang yang digunakan untuk +menerap halaman.
    • +
    +
  • +
  • Tetapan PS +
      +
    • Bit antialias grafik Tentukan amaun antialias untuk grafik.
    • +
    • Bit antialias teks Tentukan amaun antialias untuk teks.
    • +
    +
  • +
+ +

Tetapan antaramuka

+ +
    +
  • Labuh gelintar lanjutan Jika dibenarkan, labuh gelintar lalai +dilanjutkan dengan paparan keputusan semua tab. (Berkessan selepas mula +semula.)
  • +
  • Tindihan atas anotasi Jika dibenarkan, semua anotasi dalam halaman +akan dipapar sebagai tindihan atas interaktif. Melainkan setiap anotasi akan +dikendalikan sebagai tetingkap timbul berasingan.
  • +
  • Tindihan atas medan borang Jika dibenarkan, semua medan borang dalam +halaman akan dipapar sebagai tindihan atas interaktif. Melainkan setiap +medan borang akan dikendalikan sebagai tetingkap timbul berasingan.
  • +
  • Kedudukan tab Takrifkan bucu tab paparan utama yang manakah akan +dipapar.
  • +
  • Ketampakan tab Tentukan sama ada tab akan dipapar jika kurang dari +dua dokumen dibuka.
  • +
  • Hampar tab Tentukan jika tab akan dihampar secara sekata menyeluruhi +keseluruhan palang tab.
  • +
  • Tab baharu disebelah tab semasa Jika dibenarkan, tab baharu dibuka +disebelah kanan tab aktif.
  • +
  • Keluar selepas tab terakhir Jika dibenarkan, aplikasi keluar selepas +tab terakhir ditutup.
  • +
  • Kiraan diguna baru-baru ini Tetapkan bilangan fail yang tersenarai +dalam menu diguna baru-baru ini, jika "Jejak diguna baru-baru ini" +dibenarkan. (Berkesan selepas mula semula.)
  • +
  • Kiraan ditutup baru-baru ini Tetapkan bilangan fail yang tersenarai +dalam menu ditutup baru-baru ini, jika "Kekalkan ditutup baru-baru ini" +dibenarkan. (Berkesan selepas mula semula.)
  • +
  • Palang alat fail Takrifkan tindakan yang manakah tampak dalam palang +alat fail. Tindakan tersedia adalah openInNewTab, buku, segarsemula, +saveCopy, saveAs, cetak dan pemisah. (Berkesan selepas mula semula.)
  • +
  • Palang alat sunting Takrif tindakan yang manakah tampak dalam palang +alat sunting. Tindakan tersedia adalah currentPage, previousPage, nextPage, +firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode dan separator. (Berkesan selepas mula +semula.)
  • +
  • Palang alat Lihat Takrif tindakan yang manakah tampak dalam palang +alat lihat. Tindakan tersedia adalah scaleFactor, zoomIn, zoomOut, +continuousMode, twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, +originalSize, fitToPageWidthMode, fitToPageSizeMode, rotateLeft, +rotateRight, fullscreen, presentation dan separator. (Berkesan selepas mula +semula.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Menu boleh tatal Akan membatalkan gaya lalai supaya menu timbul +ditatal selain dari dipersembahkan dalam lajur berbilang jika ia lebih besar +dari ruang skrin sedia ada. (Berkesan selepas mula semula.)
  • +
  • Menu boleh gelintar Lanjutkan navigasi papan kekunci lalai bagi tab +dan menu tanda buku berdasarkan mekanisma gelintar-apa-yang-anda-taip.
  • +
  • Togol palang alat dan menu dengan skrin penuh Sentiasa togol +ketampakan palang alat dan menu bila menogol ke mod skrrin penuh.
  • +
  • Guna label halaman Tentukan jika label halaman dibekali-dokumen akan +digunakan selain dari nombor halaman bila tersedia.
  • +
  • Tajuk dokumen sebagai tajuk tab Tentukan jika tajuk tab diambil dari +data-meta selain dari nama fail.
  • +
  • Halaman semasa dalam tajuk tetingkap Jika dibenarkan, halaman semasa +dan nombor halaman dokumen di dalam tab aktif dipaparkan dalam tajuk +tetingkap.
  • +
  • Nama kejadian dalam tajuk tetingkap Jika dibenarkan dan kejadian +semasa dinamakan, namanya dipapar dalam tajuk tetingkap.
  • +
  • Sorot lakaran kenit semasa Jika dibenarkan, halaman semasa disorot +dalam paparan lakaran kenit.
  • +
  • Had lakaran kenit mengikut keputusan Jika pilihan ini dibenarkan dan +gelintar dibuat, hanya halaman yang mana terma gelintar ditemui terpapar +dalam paparan lakaran kenit.
  • +
+ +

Tetapan pintasan

+ +

Tetapan pintasan membolehkan pelarasan pintasan papan kekunci mengikut +kehendaki peribadi. Pintasan boleh diubah dengan mengklik dua-kali pada +pintasan untuk menyuntingnya dan menginput pintasan baharu. Setiap tindakan +boleh mempunyai beberapa pintasan dengan menginput senarai +terpisah-titik-bertindih pada mereka. Nama kekunci yang bukan satu abjad +ditulis dengan jelas (contohnya. "Alt", "Ctrl", "PgDown"), yang mana +pemadanan tidak sensitif kata. Jika pintasan mengandungi kekunci +pengubahsuai, nama kekunci digabung dengan simbol campur dan kekunci +pengubahsuai mesti disenarai terlebih dahulu, contohnya. "Ctrl+A" atau +"Ctrl++".

+ +

Tetapan pengubahsuai

+ +
    +
  • Zum Pengubahsuai papan kekunci untuk zum menggunakan roda tetikus +dalam paparan utama.
  • +
  • Putar Pengubahsuai papan kekunci untuk diputar menggunakan roda +tetikus dalam paparan utama.
  • +
  • Tatal Pengubahsuai papan kekunci untuk tatal secara mengufuk +menggunakan roda tetikus dalam paparan utama.
  • +
  • Salin ke papan keratan Pengubahsuai papan kekunci untuk salin teks +atau imej ke papan keratan.
  • +
  • Tambah catatan Pengubahsuai papan kekunci untuk tambah catatan ke +dalam halaman.
  • +
  • Zum ke pemilihan Pengubahsuai papan kekunci yang mengezum ke +pemilihan dalam satu halaman.
  • +
+ + + + diff --git a/help/help_pl.html b/help/help_pl.html new file mode 100644 index 0000000..9c5dd8f --- /dev/null +++ b/help/help_pl.html @@ -0,0 +1,504 @@ + + + + + + + + + Pomoc + + + + +

Pomoc

+ +

Spis treści

+
    +
  1. Główne menu
  2. +
      +
    1. Plik
    2. +
    3. Edycja
    4. +
    5. Widok
    6. +
    7. Karty
    8. +
    9. Zakładki
    10. +
    11. Pomoc
    12. +
    +
  3. Widok główny
  4. +
  5. Widok pomocniczy
  6. +
  7. Ustawienia
  8. +
      +
    1. Zachowanie ustawień
    2. +
    3. Ustawienia grafiki
    4. +
    5. Ustawienia interfejsu
    6. +
    7. Ustawienia skrótu
    8. +
    9. Ustawienia modyfikatora
    10. +
    +
+ +

Wprowadzenie

+ +

qpdfview to przeglądarka dokumentów w obsługą kart. Używa Poppler +dla wsparcia PDF, libspectre dla PS, DjVuLibre dla DjVu, CUPS dla wsparcia +drukowania i bibioteki Qt jako interfejs graficzny.

+ +

Proszę odnieść się do strony podręcznika po informację na temat opcji +wiersza polecenia i plików konfiguracyjnych.

+ +

Menu główne

+ +

Plik

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Wyjdź Zamyka wszystkie zakładki i kończy działanie programu.
  • +
+ +

Edycja

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Karty

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Zamknij kartę Zamyka bieżącą kartę.
  • +
  • Zamknij wszystkie karty Zamyka wszystkie karty.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Zakładki

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_pt.html b/help/help_pt.html new file mode 100644 index 0000000..1f1661d --- /dev/null +++ b/help/help_pt.html @@ -0,0 +1,504 @@ + + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_pt_BR.html b/help/help_pt_BR.html new file mode 100644 index 0000000..afa8162 --- /dev/null +++ b/help/help_pt_BR.html @@ -0,0 +1,505 @@ + + + + + + + + + Ajuda + + + + +

Ajuda

+ +

Tabela de conteúdos

+
    +
  1. Menu principal
  2. +
      +
    1. Arquivo
    2. +
    3. Editar
    4. +
    5. Visualizar
    6. +
    7. Abas
    8. +
    9. Marcadores
    10. +
    11. Ajuda
    12. +
    +
  3. Visualização principal
  4. +
  5. Visualizações auxiliares
  6. +
  7. Ajustes
  8. +
      +
    1. Ajustes de aparência
    2. +
    3. Ajustes de gráficos
    4. +
    5. Configurações da interface
    6. +
    7. Configuração de atalhos
    8. +
    9. Configurações de modificação
    10. +
    +
+ +

Introdução

+ +

qpdfview é um visualizador de documentos com abas. Utiliza o +Poppler para suporte a PDF, libspectre para suporte a PS, DjVuLibre para +suporte a DjVu, CUPS para suporte a impressão e QT Toolkit para sua +interface.

+ +

Por favor, consulte a página do manual para obter informações sobre opções +de linha de comando e arquivos de configuração.

+ +

Menu principal

+ +

Arquivo

+ +
    +
  • Abrir... Abre uma janela para selecionar um arquivo para abrir na aba +atual. Se não houver nenhuma aba, o arquivo é aberto é uma nova aba.
  • +
  • Abrir em nova aba... Abre uma janela para selecionar arquivos a serem +abertos em novas abas.
  • +
  • Recentemente usado Contem uma lista dos arquivos recentemente +utilizados (se ativado nas configurações).
  • +
  • Atualizar Recarrega o arquivo exibido na aba atual.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Salvar como... Abre um diálogo para salvar o arquivo exibido na aba +atual incluindo alterações nas anotações e no formato.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Imprimir... Abre um diálogo para imprimir o arquivo exibido na aba +atual.
  • +
  • Sair Fecha todas as abas e encerra o programa.
  • +
+ +

Editar

+ +
    +
  • Próxima/Anterior/Primeira/Última página Pula para a +próxima/anterior/primeira/última página do documento.
  • +
  • Ir para a página... Abre um diálogo para colocar uma página para ser +exibida na aba atual.
  • +
  • Pular para trás/para frente Pula para trás/frente no histórico da +página em exibição.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Encontrar anterior/próximo Pula para a ocorrência anterior/próxima do +termo procurado no documento.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Opções... Abre o diálogo de configuração. O botão chamado 'Padrão' +irá reverter todas as configurações em todas as tabelas para seus valores +padrões. O botão chamado 'Padrão na tabela atual' irá reverter apenas as +configurações na tabela atual para seus valores padrões.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_ru.html b/help/help_ru.html new file mode 100644 index 0000000..121d872 --- /dev/null +++ b/help/help_ru.html @@ -0,0 +1,532 @@ + + + + + + + + + Справка + + + + +

Справка

+ +

Оглавление

+
    +
  1. Главное меню
  2. +
      +
    1. Файл
    2. +
    3. Правка
    4. +
    5. Вид
    6. +
    7. Вкладки
    8. +
    9. Закладки
    10. +
    11. Справка
    12. +
    +
  3. Основной вид
  4. +
  5. Вспомогательные виды
  6. +
  7. Настройки
  8. +
      +
    1. Настройки поведения
    2. +
    3. Настройки графики
    4. +
    5. Настройки интерфейса
    6. +
    7. Настройки комбинаций клавиш
    8. +
    9. Настройки модификаторов
    10. +
    +
+ +

Введение

+ +

qpdfview — это программа со вкладками для просмотра +документов. Использует Poppler для поддержки PDF, libspectre для поддержки +PS, DjVuLibre для поддержки DjVu, CUPS для поддержки печати и Qt для +графического интерфейса.

+ +

Информацию о параметрах командной строки и конфигурационных файлах можно +найти в man-странице программы.

+ +

Главное меню

+ +

Файл

+ +
    +
  • Открыть... Запускает диалог выбора файла, который будет открыт на +текущей вкладке. Если вкладка отсутствует, файл будет открыт в новой +вкладке.
  • +
  • Открыть в новой вкладке... Запускает диалог выбора файлов, которые +будут открыты в новых вкладках.
  • +
  • Недавние Содержит список файлов, использовавшихся в последнее время +(если опция включена в настройках).
  • +
  • Обновить Повторная загрузка файла, отображаемого на текущей вкладке.
  • +
  • Сохранить Сохранить изменения для аннотаций и полей форм в файл, чья +вкладка сейчас открыта.
  • +
  • Сохранить как... Открывает диалог для сохранения файла, отображаемого +на текущей вкладке, включая изменения в примечаниях и полях форм.
  • +
  • Сохранить копию... Открыть диалог для сохранения неизмененной копии +файла, чья вкладка сейчас открыта.
  • +
  • Печать... Запускает диалог для печати файла, отображаемого на текущей +вкладке.
  • +
  • Выход Закрывает все вкладки и завершает работу программы.
  • +
+ +

Правка

+ +
    +
  • Следующая/Предыдущая/Первая/Последняя страница Переход к +следующей/предыдущей/первой/последней странице документа.
  • +
  • Перейти на страницу... Запускает диалог выбора страницы для +отображения на текущей вкладке.
  • +
  • Назад/Вперёд Переход назад или вперёд по истории отображаемой +страницы.
  • +
  • Поиск... Открывает панель поиска под областью, в которой отображается +документ. Поиск начинается автоматически через 2 секунды после изменения +текста в поле поиска; его также можно начать вручную, нажав клавишу +Enter. При удержании нажатым модификатора Shift во время нажатия Enter поиск +будет осуществляться во всех вкладках, а не только в текущей. (Это действует +наоборот, если в настройках включена опция расширенной панели поиска.)
  • +
  • Найти предыдущее/следующее Переход к предыдущему или следующему +найденному фрагменту текста в документе.
  • +
  • Отменить поиск Отменяет текущий поиск и закрывает панель поиска.
  • +
  • Скопировать в буфер Переводит программу в режим выделения текста или +изображений для копирования в буфер обмена.
  • +
  • Добавить комментарий Переводит программу в режим выделения для +добавления аннотаций.
  • +
  • Настройки... Открывает диалог настроек. Кнопка 'По умолчанию' +сбрасывает все настройки на всех вкладках к их стандартным значениям. Кнопка +'По умолчанию на текущей вкладке' сбрасывает только настройки для текущей +вкладки.
  • +
+ +

Текущую страницу можно изменить, указав нужный номер в текстовом +поле на панели инструментов «Правка» (перейти в это поле можно нажатием +Ctrl+K) и нажав клавишу Enter.

+ +

Просмотр

+ +
    +
  • Рулоном Если включено, перелистывание осуществляется не постранично, +а так, будто страницы подаются непрерывным рулоном.
  • +
  • Две страницы Просмотр в два столбца, при котором на экране +отображаются по две страницы сразу.
  • +
  • Две страницы и обложка Как и предыдущая команда, отображает по две +страницы, но обложка отображается отдельно.
  • +
  • Несколько страниц Отображение страниц в несколько +столбцов. Количество столбцов можно изменить в диалоге настроек (на вкладке +«Графика»).
  • +
  • Справа налево Изменяет порядок страниц при просмотре в несколько +столбцов.
  • +
  • Увеличить масштаб Увеличивает масштаб на 10 процентов. Максимальное +увеличение составляет 5000 процентов.
  • +
  • Уменьшить масштаб Уменьшает масштаб на 10 процентов. Минимальное +уменьшение составляет 10 процентов.
  • +
  • Исходный размер Возвращает значение масштаба к 100 процентам.
  • +
  • По ширине Выбирает масштаб, при котором страницы умещаются по ширине +в области просмотра.
  • +
  • Страница целиком Выбирает масштаб, при котором страницы полностью +умещаются в область просмотра (и по горизонтали, и по вертикали).
  • +
  • Повернуть влево Поворачивает страницы влево, или против часовой +стрелки, на 90 градусов.
  • +
  • Повернуть вправо Поворачивает страницы вправо, или по часовой +стрелке, на 90 градусов.
  • +
  • Инвертировать цвета Отображает страницы в инвертированных цветах.
  • +
  • Конвертировать в серые тона Отображает страницы в оттенках серого +цвета.
  • +
  • Обрезать поля Удаление пустого пространства на полях после +визуализации.
  • +
  • Построение Построение визуализированной страницы с выбранным цветом +бумаги для улучшения фона сканированных документов.
  • +
  • Панели инструментов Содержит список доступных панелей инструментов, +обеспечивающих быстрый доступ к часто используемым действиям.
  • +
  • Прилипалы Содержит список доступных стыкуемых областей (доков), +отображающих различную дополнительную информацию.
  • +
  • Шрифты... Открывает окно со шрифтами, используемыми в документе.
  • +
  • Полный экран Переключение на полноэкранный режим просмотра, когда +окно распахнуто во весь размер экрана и не имеет элементов декорации.
  • +
  • Презентация... Переход в режим презентации, покинуть который можно +нажатием F12 или Esc. Клавиши Home/End используются для перехода к +первой/последней странице. Клавиши со стрелками вправо и вниз, пробел и Page +down — для перехода к следующей странице. Стрелки влево и вверх, Backspace и +Page up — к предыдущей странице. Control+Enter возвращает к странице, +которая была текущей до последнего перехода.
  • +
+ +

Масштаб можно изменить, указав значение в процентах в текстовом +поле на панели инструментов «Вид» (перейти в него можно с помощью Ctrl+L), +и нажав клавишу Enter.

+ +

Вкладки

+ +
    +
  • Предыдущая/Следующая вкладка Переход к предыдущей или следующей +вкладке. Переход циклический, т.е. если текущая вкладка является последней, +то переходит к первой вкладке, и наоборот.
  • +
  • Закрыть вкладку Закрывает текущую вкладку.
  • +
  • Закрыть все вкладки Закрывает все вкладки.
  • +
  • Закрыть все вкладки, кроме текущей Закрывает все вкладки, кроме +текущей.
  • +
  • Недавно закрытые Содержит список недавно закрытых вкладок (если это +разрешено в настройках).
  • +
+ +

Это меню содержит список всех вкладок, каждую из которых можно сделать +текущей, щёлкнув на соответствующем пункте меню. Вкладки можно также +закрывать щелчком средней кнопкой мыши. Первые девять вкладок можно +активировать нажатием клавиш от 1 до 9 при нажатом модификаторе Alt.

+ +

Закладки

+ +
    +
  • Предыдущая закладка Переход к ближайшей закладке перед текущей +страницей.
  • +
  • Следующая закладка Переход к ближайшей закладке после текущей +страницы.
  • +
  • Добавить закладку Добавляет закладку для текущего файла и страницы.
  • +
  • Удалить закладку Удаляет закладку для текущего файла и страницы.
  • +
  • Удалить все закладки Удаляет все закладки.
  • +
  • Открыть Открывает соответствующий файл в текущей вкладке. Если ни +одной вкладки нет, файл открывается в новой вкладке.
  • +
  • Открыть в новой вкладке Открывает соответствующий файл в новой +вкладке.
  • +
  • Перейти на страницу Осуществляет переход к указанной странице, если +соответствующий файл уже открыт. В противном случае соответствующий файл +открывается в новой вкладке.
  • +
+ +

Справка

+ +
    +
  • Оглавление Отображает этот документ.
  • +
  • О программе Показывает версию программы и краткую информацию о ней.
  • +
+ +

Основная область

+ +

Клавиши Backspace/пробел используются для перехода к предыдущей следующей +странице. Клавиши Home/End — для перехода к первой/последней +странице. Клавиши со стрелками, Page up и Page down прокручивают документ в +области просмотра. Нажатие Control+Enter возвращает к странице, которая была +текущей до последнего перехода.

+ +

Используя колёсико мыши, можно прокручивать документ вверх и вниз. С нажатой +клавишей ALT прокрутка осуществляется влево и вправо. Использование +колёсика при нажатой клавише CTRL изменяет масштаб, а при нажатой +SHIFT поворачивает документ. (Клавиши-модификаторы можно изменить в +диалоге настройки.) Щёлкните и удерживайте среднюю кнопку мыши, чтобы +выделить прямоугольную область и масштабировать документ до её размера.

+ +

Ссылки подсвечиваются красными рамочками (если это включено в +настройках). Щёлкните левой кнопкой на ссылке для перехода на +соответствующую страницу или открытия URL в используемом по умолчанию +браузере (если это включено в настройках). Щелчок средней кнопкой на ссылке +откроет страницу по ссылке в новой вкладке. При наведении указателя на +ссылку во всплывающей подсказке будет показано, куда она ведёт.

+ +

Поля форм подсвечиваются синими рамочками (Если это включено в +настройках). Щёлкните левой кнопкой на поле, чтобы изменить его +содержимое. При наведении указателя на поле во всплывающей подсказке +отображается его имя.

+ +

Исходный код позиции в документе можно открыть в редакторе через контекстное +меню, в котором также может быть пункт для первого подходящего узла +SyncTeX.

+ +

Для того, чтобы скопировать текст или изображения, удерживая +нажатой SHIFT, щёлкните левой кнопкой мыши и, не отпуская её, +выделите рамочкой копируемую область. После того, как вы отпустите кнопку +мыши, появится всплывающее меню, позволяющее скопировать текст или +изображение в буфер обмена.

+ +

Чтобы добавить комментарии, удерживая нажатой CTRL, щёлкните +левой кнопкой мыши и, не отпуская её, обведите рамкой комментируемую +область. Когда вы отпустите кнопку мыши, появится всплывающее меню, +позволяющее добавить текст или выделить комментарии. Щёлкните левой кнопкой +для редактирования комментариев. Щелчок правой кнопкой позволяет +удалить комментарий. (Для добавления или удаления комментариев +требуется версия библиотеки Poppler 0.20.1 или более поздняя.) При наведении +указателя на комментарий во всплывающей подсказке отображается его +содержимое.

+ +

Для того, чтобы масштабировать документ по выделению, удерживайте +SHIFT и CTRL, щёлкните левой кнопкой мыши и, не отпуская её +обведите рамочкой область, до которой нужно выполнить масштабирование.

+ +

Скрыть или снова сделать видимыми панель инструментов и меню можно +с помощью настраиваемых комбинаций клавиш (по умолчанию это "Shift+Alt+T" и +"Shift+Alt+M").

+ +

Вспомогательные области

+ +

Оглавление отображает обзор содержимого документа. Клик левой +кнопкой мыши по записи вызовет переход к соответствующей странице в основном +окне. Контекстное меню содержит действия для сворачивания и разворачивания +всех вложенных элементов.

+ +

Оглавление может управляться с помощью клавиатуры и колёсика мыши. Зажатый +Shift одновременно с клавишами Вверх/Вниз будет прокручивать вид. Зажатый +Shift одновременно с клавишами Влево/Вправо будет сворачивать и +разворачивать одноуровневые элементы выбранного пункта. Зажатый Ctrl +одновременно с клавишами Влево/Вправо будет полностью сворачивать и +разворачивать выбранный пункт и все вложенные элементы. Зажатый Shift +одновременно с прокруткой колёсика мыши будет переключать выбранный пункт. +Зажатый Ctrl одновременно с прокруткой колёсика мыши будет разворачивать и +сворачивать выбранный пункт.

+ +

Свойства отображает дополнительные сведения о документе.

+ +

Миниатюры отображает уменьшенные копии страниц документа. Клик +левой кнопкой мыши по миниатюре вызовет переход к соответствующей странице в +основном окне.

+ +

Закладки отображает закладки, относящиеся к документу в текущей +вкладке. Контекстное меню содержит пункты перехода к следующей и предыдущей +закладкам, а также добавления закладки. Контекстное меню каждой записи +содержит пункты для правки и удаления закладок.

+ +

Если включена в настройках, расширенная панель поиска отобразит +результаты поиска, выполненного во всех вкладках. Также будет отображён +текст, окружающий результат поиска, с выделенным поисковым запросом. Нажатие +на результат поиска вызовет открытие соответствующей вкладки и переход к его +расположению.

+ +

Настройки

+ +

Настройки поведения

+ +
    +
  • Открыть адрес Указывает, разрешается ли программе открывать URL из +документа в браузере по умолчанию.
  • +
  • Автообновление Позволяет программе автоматически перезагружать файлы, +если они изменились на диске.
  • +
  • Отслеживать недавно открытые Если включено, в меню будет доступен +список последних открывавшихся в программе документов (опция вступает в силу +после перезапуска программы). Максимальное количество документов в списке +можно указать в опции "Недавно использованные" на вкладке "Интерфейс".
  • +
  • Помнить недавно закрытые Если включено, в меню будет доступен список +последних закрытых документов (опция вступает в силу после перезапуска +программы). Максимальное количество документов в списке можно настроить с +помощью параметра "Недавно закрытые" на вкладке "Интерфейс". Запоминание +вкладок может значительно увеличить потребляемую память.
  • +
  • Восстановить вкладки Если включено, вкладки и их свойства сохраняются +при выходе из программы и восстанавливаются при следующем запуске.
  • +
  • Восстановить закладки Если включено, закладки сохраняются при выходе +из программы и восстанавливаются при следующем запуске.
  • +
  • Восстановление пофайловых настроек Если включено, настройки для +каждого файла сохраняются при закрытии вкладок и восстанавливаются при +следующем открытии.
  • +
  • Интервал сохранения базы данных Интервал сохранения вкладок, закладок +и пофайловых настроек в базе данных.
  • +
  • Синхронная презентация Если включено, основной вид сможет управлять +видом презентации.
  • +
  • Экран презентации Индекс экрана, на котором будет показываться +презентация.
  • +
  • Синхронизация в режиме структуры Если включено, в оглавлении будет +подсвечиваться первый элемент, указывающий на текущую страницу при каждом +переходе на другую страницу.
  • +
  • Минимизация прокрутки Если включено, область просмотра будет +прокручиваться только при невидимости целевой позиции.
  • +
  • Коэффициент масштабирования Число, на которое будет умножен или, +соответственно, разделён масштаб при увеличении или уменьшении.
  • +
  • Цвет выделения Определяет цвет выделения.
  • +
  • Длительность выделения Длительность временного выделения.
  • +
  • Цвет аннотаций Цвет добавленных программой аннотаций. Указывается +либо название цвета (как в SVG), либо 16-ричная нотация '#rrggbb'.
  • +
  • Редактор исходника Программа, используемая для редактирования +исходников. '%1' заменяется на абсолютный путь к файлу. '%2' и '%3' +заменяются номером строки и столбца, соответственно.
  • +
+ +

Настройки графики

+ +
    +
  • Использовать тайлинг Страницы перед отрисовкой будут разделяться на +тайлы и кэшироваться для уменьшения потребления памяти.
  • +
  • Запоминать устаревшие растровые изображения Если включено, то для +уменьшения потребляемой памяти при изменении масштаба для отрисовки +растровых изображений будет использоваться аппроксимация их кэшированных +версий до тех пор, пока они доступны.
  • +
  • Использовать разрешение устройства Если включено, будет +использоваться наибольшее доступное разрешение устройства для физической +визуализации и как логическое разрешение.
  • +
  • Рамка страницы Выделение границ страницы для отделения от фона.
  • +
  • Выделять ссылки Определяет, должны ли ссылки выделяться красными +рамочками.
  • +
  • Выделять поля форм Определяет, должны ли поля форм выделяться синими +рамочками.
  • +
  • Цвет фона Цвет фона, указанный как название цвета в SVG или в +16-ричной нотации '#rrggbb'.
  • +
  • Цвет бумаги Цвет страниц, указанный как название цвета в SVG или в +16-ричной нотации '#rrggbb'.
  • +
  • Цвет фона презентации Перекрывает цвет бумаги при вычислении фонового +цвета для презентации. Указывается как название цвета в SVG или в 16-ричной +нотации '#rrggbb'.
  • +
  • Страниц в ряд Количество страниц в ряду при варианте отображения +«Несколько страниц».
  • +
  • Расстояние между страницами Определяет вертикальный и горизонтальный +отступы между страницами.
  • +
  • Расстояние между миниатюрамиОпределяет вертикальный и горизонтальный +отступ между миниатюрами страниц.
  • +
  • Размер миниатюр Определяет размер миниатюр.
  • +
  • Размер кэша Предельный размер кэша, в который программа будет +помещать отрисованные страницы для увеличения скорости отрисовки за счёт +увеличения используемой памяти.
  • +
  • Подгружать наперёд Программа будет пытаться заранее отрисовывать ещё +не видимые на экране страницы, увеличивая скорость отображения за счёт +увеличения потребляемой памяти.
  • +
  • Длина предзагрузки Количество страниц для предзагрузки вниз и +удвоенное количество страниц для предзагрузки вверх, не считая текущей +страницы.
  • +
  • Настройки PDF +
      +
    • Сглаживание Улучшает качество изображения за счёт производительности
    • +
    • Сглаживание текста Улучшает качество отображения текста за счёт +производительности
    • +
    • Хинтинг текста Может улучшить качество текста для некоторых шрифтов.
    • +
    • Предпросмотр надпечатки Если включено, отображается предварительный +просмотр наложения печати одного слоя чернил поверх другого +(т. наз. оверпринт).
    • +
    • Режим тонкой линии Позволяет выбрать режим оптимизации при отрисовке +тонких линий.
    • +
    • Бэкенд Позволяет выбрать движок для отрисовки страниц.
    • +
    +
  • +
  • Настройки PS +
      +
    • Биты сглаживания графики Определяет степень сглаживания графики.
    • +
    • Биты сглаживания текста Определяет степень сглаживания текста.
    • +
    +
  • +
+ +

Настройки интерфейса

+ +
    +
  • Расширенная панель поиска Если включено, стандартная область поиска +дополняется обзором всех результатов поиска во всех вкладках. (Опция +вступает в силу после перезапуска приложения.)
  • +
  • Наложение аннотации Если включено, все аннотации на странице будут +отображаться, как интерактивный оверлей. Иначе каждая аннотация будет +отображаться в отдельном всплывающем окне.
  • +
  • Наложение полей форм Если включено, все поля форм на странице будут +отображаться, как интерактивный оверлей. Иначе каждое поле будет +отображаться в отдельном всплывающем окне.
  • +
  • Положение вкладок Определяет, где будут отображаться вкладки по +отношению к основной области.
  • +
  • Видимость вкладок Определяет, должны ли отображаться вкладки, если +открыто менее двух документов.
  • +
  • Растянуть вкладки Определяет, должны ли вкладки равномерно +распределяться по всей ширине панели вкладок.
  • +
  • Новая вкладка рядом с текущей вкладкой Если включено, новые вкладки +будут открываться справа от активной вкладки.
  • +
  • Выход при закрытии последней вкладки Если включено, приложение +завершает работу при закрытии последней вкладки.
  • +
  • Недавно использованные Задаёт количество файлов, отображаемых в +списке недавно открытых файлов, если включена опция "Отслеживать недавно +открытые". (Опция вступает в действие после перезапуска приложения.)
  • +
  • Недавно закрытые Задаёт количество вкладок, отображаемых в списке +недавно закрытых вкладок, если включена опция "Запомнить недавно +закрытые". (Опция вступает в действие после перезапуска.)
  • +
  • Панель "Файл" Определяет, какие действия будут видны в панели +инструментов "Файл". Доступные: openInNewTab, open, refresh, saveCopy, +saveAs, print и separator. (Вступает в действие после перезапуска.)
  • +
  • Панель "Правка" Определяет, какие действия будут видны в панели +инструментов "Правка". Доступные действия: currentPage, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +search, copyToClipboardMode, addAnnotationMode и separator. (Вступает в +действие после перезапуска.)
  • +
  • Панель "Вид" Определяет, какие действия будут видны в панели +инструментов "Вид". Доступные действия: scaleFactor, zoomIn, zoomOut, +continuousMode, twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, +originalSize, fitToPageWidthMode, fitToPageSizeMode, rotateLeft, +rotateRight, fullscreen, presentation и separator. (Вступает в действие +после перезапуска.)
  • +
  • Контекстное меню документа Определяет, какие действия будут видны в +контекстном меню документа. Доступные действия: openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch и separator.
  • +
  • Контекстное меню вкладки Определяет, какие действия будут видны в +контекстном меню вкладки. Доступные действия: openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, copyFilePath, +selectFilePath, closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight и separator.
  • +
  • Меню с прокруткой Изменяет стандартное поведение всплывающих меню, +так что команды прокручиваются, а не располагаются в несколько столбцов, +если они не умещаются в доступном пространстве. (Вступает в действие после +перезапуска.)
  • +
  • Поиск в меню Расширяет функционал меню вкладок и закладок механизмом +поиска по мере набора.
  • +
  • Скрывать инструменты и меню в полноэкранном режиме Переключает +видимость панелей инструментов и меню при переходе в полноэкранный режим.
  • +
  • Использовать метку страницы Позволяет при доступности использовать +предоставляемые документом метки страниц вместо номеров страниц.
  • +
  • Название документа как название вкладки Позволяет именовать вкладки +не по именам файлов, а в зависимости от метаданных.
  • +
  • Текущая страница в заголовке окна Если включено, в заголовке окна +отображаются текущая страница и число страниц документа из активной вкладки.
  • +
  • Имя экземпляра в заголовке окна Если включено, и текущий экземпляр +имеет имя, то оно отображается в заголовке окна.
  • +
  • Выделять текущий эскиз Если включено, текущая страница будет +подсвечиваться в области миниатюр.
  • +
  • Ограничивать показ миниатюр при поиске Если эта опция включена, то +при выполнении поиска в области миниатюр будут видны только страницы, в +которых найден искомый текст.
  • +
+ +

Настройки комбинаций клавиш

+ +

На этой вкладке можно настроить комбинации клавиш в соответствии с вашими +личными предпочтениями. Для изменения комбинации выполните на ней двойной +щелчок и введите новую комбинацию. К каждому действию можно привязать +несколько комбинаций, указав их в виде списка, разделённого точкой с +запятой. Имена небуквенных клавиш записываются явным образом (например, +"Alt", "Ctrl", "PgDown"), регистр символов здесь не имеет значения. Если +комбинация содержит клавиши-модификаторы, то имена клавиш соединяются знаком +плюс и модификатор должен быть указан первым, например, "Ctrl+A" или +"Ctrl++".

+ +

Настройки модификаторов

+ +
    +
  • Масштаб Клавиши-модификаторы для изменения масштаба документа +колёсиком мыши.
  • +
  • Поворот Модификаторы для поворота документа колёсиком мыши.
  • +
  • Прокрутка Модификаторы для горизонтальной прокрутки документа +колёсиком мыши.
  • +
  • Копировать в буфер обмена Модификаторы для копирования текста или +изображений со страницы документа в буфер обмена.
  • +
  • Добавить примечание Модификаторы для добавления аннотаций к странице.
  • +
  • Масштаб по выделению Модификаторы для масштабирования по размеру +выделенной области на странице.
  • +
+ + + + diff --git a/help/help_sk.html b/help/help_sk.html new file mode 100644 index 0000000..85c8452 --- /dev/null +++ b/help/help_sk.html @@ -0,0 +1,508 @@ + + + + + + + + + Pomocník + + + + +

Pomocník

+ +

Obsah

+
    +
  1. Hlavné menu
  2. +
      +
    1. Súbor
    2. +
    3. Upraviť
    4. +
    5. Zobraziť
    6. +
    7. Karty
    8. +
    9. Záložky
    10. +
    11. Nápoveda
    12. +
    +
  3. Hlavné zobrazenie
  4. +
  5. Pomocné zobrazenia
  6. +
  7. Nastavenia
  8. +
      +
    1. Nastavenia správania
    2. +
    3. Nastavenia grafiky
    4. +
    5. Nastavenia rozhrania
    6. +
    7. Nastavenia klávesových skratiek
    8. +
    9. Nastavenia modifikátorov
    10. +
    +
+ +

Úvod

+ +

qpdfview prehliadač dokumentov na kartách. Používa Poppler pre +podporu PDF, libspectre pre podporu PS, DjVuLibre pre podporu DjVu, CUPS pro +podporu tlače a Qt toolkit pre svoje rozhranie.

+ +

Pozrite sa, prosím, do manuálových stránok, ak hľadáte informácie k +možnostiam príkazového riadka a k súborom s nastavením.

+ +

Hlavné menu

+ +

Súbor

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Upraviť

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

Zobraziť

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Karty

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Záložky

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Nápoveda

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Hlavné zobrazenie

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Pomocné zobrazenia

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Nastavenia

+ +

Nastavenia správania

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Nastavenia grafiky

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • Nastavenia PDF +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • Nastavenia PS +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Nastavenia rozhrania

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Nastavenia klávesových skratiek

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Nastavenia modifikátorov

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_sr.html b/help/help_sr.html new file mode 100644 index 0000000..fed429a --- /dev/null +++ b/help/help_sr.html @@ -0,0 +1,504 @@ + + + + + + + + + Помоћ + + + + +

Помоћ

+ +

Садржај

+
    +
  1. Главни мени
  2. +
      +
    1. Датотека
    2. +
    3. Уреди
    4. +
    5. Приказ
    6. +
    7. Картице
    8. +
    9. Обележивачи
    10. +
    11. Помоћ
    12. +
    +
  3. Главни изглед
  4. +
  5. Помоћни изглед
  6. +
  7. Подешавања
  8. +
      +
    1. Понашање подешавања
    2. +
    3. Графичка подешавања
    4. +
    5. Подешавања интерфејса
    6. +
    7. Подешавања пречица
    8. +
    9. Подешавање модификација
    10. +
    +
+ +

Увод

+ +

qpdfviewје читач докумената са употрбом картица. Користи Poppler за +PDF подршку, libspectre за PS подршку, DjVuLibre за DjVu подршку, CUPS за +подршку штампања и Qt toolkit за интерфејс.

+ +

Молимо вас да на страници приручника видите информације о опцијама командне +линије и конфигурационих фајлова.

+ +

Главни мени

+ +

Датотека

+ +
    +
  • Open... Отвара дијалог за избор датотеке која се отвара у тренутној +картици. Ако нема картице, датотека ће се отвотити у новој картици.
  • +
  • Open in new tab... Отвара дијалог за избор датотека које се отварају +у новим картицама.
  • +
  • Recently used Садржи листу најчешће коришћених датотека (ако је +омогућено у подешавањима).
  • +
  • Refresh Поново учитава датотеку приказану у текућој картици.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Сачувај као... Отвара дијалог да сачувате датотеку приказану у +текућој картици укључујући измене у напоменама и облицима поља.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Штампај... Отвара дијалог штампања датотеке приказане у тренутној +картици.
  • +
  • Изађи Затвара све картице и излази из програма.
  • +
+ +

Уреди

+ +
    +
  • Следећа/Претходна/Прва/Задња страна Прескаче на +следећу/претходну/прву/задњу страну документа.
  • +
  • Иди на страну... Отвара дијалог за унос стране приказане у текућој +картици.
  • +
  • Иди уназад/унапред Иде уназад/унапред у историјату приказаних +страница.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_sv.html b/help/help_sv.html new file mode 100644 index 0000000..33bde74 --- /dev/null +++ b/help/help_sv.html @@ -0,0 +1,504 @@ + + + + + + + + + Hjälp + + + + +

Help

+ +

Innehållsförteckning

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_tr.html b/help/help_tr.html new file mode 100644 index 0000000..15db177 --- /dev/null +++ b/help/help_tr.html @@ -0,0 +1,517 @@ + + + + + + + + + Yardım + + + + +

Yardım

+ +

İçeriklerin tablosu

+
    +
  1. Ana menü
  2. +
      +
    1. Dosya
    2. +
    3. Düzenle
    4. +
    5. Görünüm
    6. +
    7. Sekmeler
    8. +
    9. Yer imleri
    10. +
    11. Yardım
    12. +
    +
  3. Ana görünüm
  4. +
  5. Yardımcı görünümler
  6. +
  7. Ayarlar
  8. +
      +
    1. Davranış ayarları
    2. +
    3. Grafik ayarları
    4. +
    5. Arayüz ayarları
    6. +
    7. Kısayol ayarları
    8. +
    9. Değiştirici ayarları
    10. +
    +
+ +

Başlangıç

+ +

qpdfview sekmeli bir belge görüntüleyicidir. PDF desteği için +Poppler, PS desteği için libspectre, DjVu desteği için DjVuLibre, yazdırma +desteği için CUPS ve arabirimi için Qt araç seti kullanır.

+ +

Komut satırı seçenekleri ve yapılandırma dosyaları hakkında bilgi için +lütfen klavuz sayfaya bakın.

+ +

Ana menü

+ +

Dosya

+ +
    +
  • Aç... Geçerli sekmede açılacak bir dosyayı seçmek için bir iletişim +kutusu açar. Sekme yoksa, dosya yeni bir sekmede açılır.
  • +
  • Yeni sekmede aç... Dosyaları yeni sekmelerde açmak için +seçebileceğiniz bir iletişim kutusu açar.
  • +
  • Son kullanılan En son kullanılan dosyaların bir listesini içerir +(ayarlarda etkinleştirildiyse).
  • +
  • Yenile Geçerli sekmede görüntülenen dosyayı yeniden yükleyin.
  • +
  • Kaydet Geçerli sekmede görüntülenen dosyaya ek açıklamalara ve form +alanlarına değişiklikleri kaydeder.
  • +
  • Farklı kaydet ... Ek açıklamalardaki ve form alanlarındaki +değişiklikler de dahil olmak üzere geçerli sekmede görüntülenen dosyayı +kaydetmek için bir iletişim kutusu açar.
  • +
  • Kopya kaydet... Geçerli sekmede görüntülenen dosyanın umodified bir +kopyasını kaydetmek için bir iletişim kutusu açar.
  • +
  • Yazdır... Geçerli sekmede görüntülenen dosyayı yazdırmak için bir +iletişim kutusu açar.
  • +
  • Çıkış Tüm sekmeleri kapatır ve yazılım sona erer.
  • +
+ +

Düznele

+ +
    +
  • Sonraki/Önceki/İlk/Son sayfa Belgenin sonraki/önceki /ilk/son +sayfasına atlar.
  • +
  • Sayfaya atla... Geçerli sekmede görüntülenecek bir sayfa girmek için +bir iletişim kutusu açar.
  • +
  • Geri/İleri atla Görüntülenen sayfada geçmişi ileri/geri atlar.
  • +
  • Ara... Arama platformunu ana görünümün altında açar. Arama, arama +teriminin son değiştirilmesinden sonra otomatik olarak başlar ve dönüş +tuşuna basarak manuel olarak başlatılır. Dönüş tuşu basılı tutulduğunda +Shift düzenleyici basılı tutulursa, arama sadece geçerli sekme yerine tüm +sekmelerde başlar. (Bu ayar, genişletilmiş arama platformu +etkinleştirildiyse tersine çevrilir.)
  • +
  • Önceki/sonraki bul Belgedeki arama teriminin önceki/sonraki oluşumuna +atlar.
  • +
  • Aramayı iptal et Çalışmakta olan aramayı iptal eder ve arama +platformunu kapatır.
  • +
  • Panoya kopyala İşaretlenirse, program metin veya resim kopyalamak +için sürüklenecek bir çerçeveyi bekleyecektir.
  • +
  • Ek açıklama ekleyin İşaretlenirse, ek açıklamalar eklemek için +program bir çerçevenin sürüklenmesini bekleyecektir.
  • +
  • Ayarlar... Ayarlar iletişim kutusunu açar. 'Varsayılanlar' etiketli +düğme, tüm sekmelerdeki tüm ayarları varsayılan değerlerine geri +döndürür. 'Geçerli sekmede Varsayılanlar' etiketli düğme, yalnızca geçerli +sekmedeki ayarları varsayılan değerlerine döndürür.
  • +
+ +

Geçerli sayfa, Ctrl+K ile odaklanılabilir ve dönüş tuşuna basarak +düzenle araç çubuğundaki metin alanına istediğiniz sayfayı girerek +değiştirilebilir.

+ +

Görünüm

+ +
    +
  • Sürekli Sayfa düzeninin tüm satırlarının aynı anda görünüp +görünmeyeceğini belirler.
  • +
  • İki sayfa Sayfa düzeninin iki sütun kullanıp kullanılmayacağını +belirler.
  • +
  • Kapak sayfası içeren iki sayfa Sayfa düzeninin kapak sayfasından +sonra iki sütun kullanıp kullanılmayacağını belirler.
  • +
  • Çoklu Sayfa Sayfa düzeninde birden çok sütun kullanılıp +kullanılmayacağını belirler. Sütun sayısı, ayarlar iletişim kutusunda +değiştirilebilir.
  • +
  • Sağdan sola Sayfalar satır başına birden fazla sayfa ile düzenleri +nasıl düzenlendiğine belirler.
  • +
  • Yakınlaştır Ölçek etmenini yüzde 10 oranında artırır. Azami ölçek +etmeni yüzde 5000'dir.
  • +
  • Uzaklaştır Ölçek etmenini yüzde 10 oranında azaltır. Asgari ölçek +etmeni yüzde 10'dur.
  • +
  • Özgün boyut Ölçeği yüzde 100'e getirir.
  • +
  • Sayfaya genişliğe sığdır Tüm sayfaların ana görünüme tamamen yatay +olarak sığacağı şekilde ölçek etmenini belirler.
  • +
  • Sayfaya sığdır Tüm sayfaların ana görünüme tamamen yatay ve dikey +olarak sığacağı ölçek etmeni belirler.
  • +
  • Sola döndür Sayfaları sola/saat yönünün tersine 90 derece döndürür.
  • +
  • Sağa döndür Sayfaları sağa/sola 90 derece döndürür.
  • +
  • Renkleri ters çevir Sayfaların ters renklerle işlenip işlenmeyeceğini +belirler.
  • +
  • Gri tonlamaya dönüştür Sayfa oluşturulduktan sonra gri tonlamaya +dönüştürülüp dönüşmeyeceğini belirler.
  • +
  • Kenar boşluklarını düzelt Oluşturduktan sonra boş sayfa kenar +boşluğunun kaldırılmasını sağlar.
  • +
  • Kompozisyon Taranan belgelerin arka planını ayarlamak için, işlenen +sayfanın kağıt rengiyle bileşimini etkinleştirir.
  • +
  • Araç çubukları Bu menü, sık kullanılan eylemlere erişmek için +kullanılabilen araç çubuklarının bir listesini içerir.
  • +
  • Rıhtımlar Bu menü, tamamlayıcı bilgileri görüntülemek için mevcut +rıhtımların bir listesini içerir.
  • +
  • Yazı tipleri... Belgede kullanılan yazı tiplerini listeleyen bir +iletişim kutusu açılır.
  • +
  • Tam Ekran Tam ekran kipini etkinleştirir, yani pencere azami ve +dekorsuz olarak gösterilir.
  • +
  • Sunum ... F12 tuşuna basarak veya Esc bırakılabilecek sunum kipine +girer. home/end ilk/son sayfayı görüntülemek için kullanılır. Ok tuşları +sağa ve aşağı, boşluk ve sayfa aşağı tuşu bir sonraki sayfaya +atlamaktadır. Ok tuşları sola ve yukarıya, geri ve sayfa yukarı tuşu bir +önceki sayfaya atlar. Kontrol ve geri basma, son atlamadan önce sayfaya geri +atlar.
  • +
+ +

ölçek etmeni, Ctrl+L ile odaklanılacak ve geri tuşuna basarak +görüntüleme araç çubuğundaki metin alanına istenilen yüzdeyi girerek +değiştirilebilir.

+ +

Sekmeler

+ +
    +
  • Önceki/Sonraki sekme Önceki/sonraki sekmeyi geçerli sekmeye +getirir. İlk/son sekme geçerli sekmeyse, son/ilk sekmeye döner.
  • +
  • Sekmeyi kapat Geçerli sekmeyi kapatır.
  • +
  • Tüm sekmeleri kapat Tüm sekmeleri kapatın.
  • +
  • Tüm sekmeleri kapatın, ancak geçerli sekmeyi hariç Geçerli sekme +dışındaki tüm sekmeleri kapatın.
  • +
  • Son kapatılan En son kapatılan sekmelerin bir listesini içerir +(ayarlarda etkinleştirildiyse).
  • +
+ +

Bu menü, ilgili menü öğesine tıklayarak geçerli sekmeyi oluşturan tüm +sekmelerin bir listesini içerir. Sekmeler orta tıklama ile de +kapatılabilir. İlk dokuz sekme, Alt değiştirici basılı tutularak ve bir ila +dokuz arasındaki tuşlara basılarak etkinleştirilebilir.

+ +

Yer imleri

+ +
    +
  • Önceki yer imi Geçerli sayfada önce en yakın yer işaretine atlar.
  • +
  • Sonraki yer imi Geçerli sayfanın ardından en yakın yer işaretine +atlar.
  • +
  • Yer imi ekle Geçerli dosya ve sayfa için bir yer imi ekler.
  • +
  • Yer imini kaldır Geçerli dosya ve sayfa için yer işaretini kaldırır.
  • +
  • Tüm yer imini kaldır tüm yer işaretlerini kaldırır.
  • +
  • İlgili dosyayı geçerli sekmede açar. Sekme yoksa, dosya yeni bir +sekmede açılır.
  • +
  • Yeni sekmede aç İlgili dosyayı yeni bir sekmede açar.
  • +
  • Sayfaya atla İlgili dosya zaten açıksa, ilgili sayfaya atlar. Aksi +takdirde ilgili dosya yeni bir sekmede açılır.
  • +
+ +

Yardım

+ +
    +
  • İçerikler Bu belgeyi görüntüler.
  • +
  • Hakkında Yazılım sürümünü görüntüler.
  • +
+ +

Ana görünüm

+ +

Geri/boşluk tuşu bir önceki/bir sonraki sayfaya atlar. Home/end tuşu ilk/son +sayfaya atlar. Ok, sayfa yukarı ve aşağı sayfa tuşları görüntü kapısını +kaydırır. Kontrol ve geri basıldığında, son atlamadan önce sayfaya atlar.

+ +

Farenin tekerleğini kullanarak yukarı ve aşağı kayar. Farenin tekerleğini +kullanırken ALT tuşunu basılı tutarken sola ve sağa kayar. Farenin +tekerleğini kullanırken CTRL tuşunu basılı tutmak dokümanı +ölçeklendirir. Farenin tekerleğini kullanırken SHİFT tuşunu basılı +tuttuğunuzda belge döndürülür. (Klavye değiştiricileri ayarlar diyaloğunda +değiştirilebilir.) Yakınlaştırılacak bir dikdörtgen seçmek için orta fare +düğmesini basılı tutun.

+ +

Bağlantılar kırmızı çerçevelerle vurgulanır (ayarlar +etkinleştirildiyse). Bağlantılı sayfayı göstermek için bir bağlantıyı sol +tıklayın veya varsayılan tarayıcıda bağlantı verilen URL'yi açın (ayarlar +etkinleştirildiyse). Bağlantılı sayfayı yeni bir sekmede göstermek için bir +bağlantıyı orta tıklayın. Bir bağın üzerine fareyle gelmek, hedefini bir +araç ipucu olarak görüntüler.

+ +

Form alanları, mavi çerçevelerle vurgulanır (ayarlar +etkinleştirildiyse). İçeriğini düzenlemek için bir form alanına sol +tıklayın. Bir form alanının üzerine gelmek, adını araç ipucu olarak +görüntüler.

+ +

Belgedeki bir konumun kaynağı, isteğe bağlı olarak ilk eşleşen +SyncTeX düğümü için bir öğe içeren içerik menüsünü kullanarak +kaynak düzenleyicisinde açılabilir.

+ +

metinleri veya resimleri kopyalatutSHİFT tuşunu basılı +tutun, kopyalamak için alanı çevreleyen bir çerçeve sürüklemek adına farenin +sol düğmesini basılı tutun. Fare düğmesi serbest bırakıldıktan sonra, +metinleri veya resimleri panoya kopyalayıp kopyalamayacağınızı seçmek için +bir açılır menü görüntülenir.

+ +

ek açıklamalar eklemek için, açıklama yapmak ve bölgenin çevresine +bir çerçeve sürüklemek için CTRL tuşunu basılı tutun, farenin sol +düğmesini basılı tutun. Fare düğmesi serbest bırakıldıktan sonra, metin +ekleme veya vurgulama ek açıklama eklemeyi seçmek için bir açılır menü +görüntülenir. Ek açıklamaları düzenle için sol tıklayın. Ek +açıklamaları kaldırmak için sağ tıklayın. (Ek açıklamaları ekleme ve +kaldırma, Poppler kitaplığının 0.20.1 veya daha yeni sürümünü gerektirir.) +Bir açıklama üzerine gelmek, içeriğini bir araç ipucu olarak görüntüler.

+ +

bir seçime yakınlaştır, tut SHIFT ve CTRL, +yakınlaştırmak için bölgenin etrafında bir çerçeve sürüklemek için farenin +sol düğmesini basılı tutun.

+ +

araç ve menü çubuklarının görünürlüğü öntanımlı değerler +"Shift+Alt+T" ve "Shift+Alt+M" olan yapılandırılabilir klavye kısayollarını +kullanarak arasında geçiş yapılabilir.

+ +

Yardımcı görünümler

+ +

anahat görünümü belgenin içeriğine genel bir bakış görüntüler. Bir +girişe sol tıklama, ana görünümdeki ilgili sayfaya atlar. Bağlam menüsü, +seçili öğenin altındaki tüm öğeleri genişletmek/daraltmak için +kullanılabilir.

+ +

Anahat görünümü klavyeyi ve fare tekerleğini kullanarak da +gezinebilir. Shift tuşunu basılı tutarak ve Yukarı/Aşağı tuşlarını +kullanarak görünümü kaydırır. Shift tuşunu basılı tutarak ve Sol/Sağ +tuşlarını kullanarak, seçili öğenin altındaki bir öğe seviyesini +daraltabilir/genişletebilirsiniz. Shift basılı ve Sol/Sağ tuşlarını +kullanarak, seçili öğeyi ve altlarını tamamen daraltıp/genişletin. Kaydırma +tuşunu basılı tutup kaydırma tekerleği kullanarak seçilen öğe değişir. Tutma +Kontrolü ve fare tekerleğini kullanarak seçilen öğeyi genişletin/daraltın.

+ +

özellikler görünümü belgede bulunan ek bilgileri görüntüler.

+ +

küçük resimler görünümü belge sayfalarının daha küçük sürümlerini +görüntüler. Bir girişe sol tıklama, ana görünümdeki ilgili sayfaya atlar.

+ +

yer imleri görünümü geçerli sekmede görüntülenen belgeye ilişkin +yer imlerini gösterir. Bağlam menüsü bir önceki/sonraki yer imine atlamak +veya yer imleri eklemek için girdileri içerir. Her girişin bağlam menüsü de +yer imlerini düzenlemek ve silmek için girişler içermektedir.

+ +

Ayarlarda etkinleştirilirse, genişletilmiş arama platformu, tüm +sekmelerde gerçekleştirilen tüm aramaların sonuçlarını içeren bir genel +görünümü gösterir. Ayrıca, arama teriminin vurgulandığı bir sonucu +çevreleyen metni gösterir. Sonuç tıklatıldığında, ilgili sekme açılır ve +konumuna atlar.

+ +

Ayarlar

+ +

Davranış ayarları

+ +
    +
  • URL Aç URL bağlantılarının varsayılan tarayıcıda açılıp açılmadığını +belirler.
  • +
  • Otomatik yenile Dosyalar disk üzerinde değiştirildiğinde otomatik +olarak yeniden yüklenip yüklenmeyeceğini belirler.
  • +
  • Son kullanılanları izle Etkinleştirildiğinde, yakın zamanda +kullanılan bir menü kullanılabilir ve "Son kullanılan sayım" seçeneğinde +ayarlandığı gibi çok yeni kullanılan dosyaları listeler. (Yeniden +başlattıktan sonra etkili olur.)
  • +
  • Son kapatılanı sakla Etkinleştirilirse, yakın zamanda kapatılan bir +menü mevcuttur ve "Son kapatılmışı say" seçeneğinde belirlenen şekilde son +zamanlarda kapalı sekmeleri listeler. Sekmeleri tutmak bellek kullanımını +önemli ölçüde artırabilir. (Yeniden başlattıktan sonra etkili olur.)
  • +
  • Sekmeleri geri yükle Etkinleştirilirse, sekmeler ve özellikleri +programın bitiminde kaydedilir ve yeniden başlatıldığında kaydedilir.
  • +
  • Yer imlerini geri yükle Etkinleştirilirse, yer işaretleri programın +bitiminde kaydedilir ve yeniden başlatıldığında geri yüklenir.
  • +
  • Dosya başına ayarları geri yükle Etkinleştirilirse, dosya başına +ayarlar açma/kapatma sekmelerinde kaydedilir/geri yüklenir.
  • +
  • Veritabanı aralığını kaydetme Sekmelerin, yer imlerinin veya dosya +başına ayarlarının veritabanına kaydedildikten sonraki aralık.
  • +
  • Sunuyu eşitle Etkinleştirilirse, ana görünüm sunum görünümünü kontrol +etmek için kullanılabilir.
  • +
  • Sunum ekranı Sunu görünümünü görüntülemek için ekranın dizini.
  • +
  • Anahat görüntüsünü eşitle Etkinleştirilirse anahat görünümü, geçerli +sayfa her değiştirildiğinde geçerli sayfaya işaret eden ilk girişi +vurgulayacaktır.
  • +
  • Asgari kaydırma Etkinleştirilirse, hedef konum henüz görünür değilse, +görüntüleme bağlantı noktası kaydırılır.
  • +
  • Yakınlaştırma etmeni Ölçek etmeninin çarpılma sayısını +belirtir. Yakınlaştırma üzerine bölünmüş. Dışarı.
  • +
  • Vurgulama rengi Vurguların rengini belirler.
  • +
  • Vurgulama süresi Geçici vurgulama sürelerini belirler.
  • +
  • Ek açıklama rengi Program tarafından eklenen ek açıklamaların rengi, +SVG renk anahtar kelimeleri veya onaltılık gösterim '#rrggbb' kullanılarak.
  • +
  • Kaynak düzenleyici Kaynakları düzenlemeye başlayan program. '%1' +mutlak dosya yolu ile değiştirildi. '%2' sıra. '%3' yerine satırları +geldi. Sütun numarası.
  • +
+ +

Grafik ayarları

+ +
    +
  • Döşeme kullan Sayfalar, bellek kullanımını azaltmak için oluşturma ve +önbelleğe alma işlemlerinden önce başlıklara bölünür.
  • +
  • Eski benek haritası sakla Etkinleştirilirse büyütme faktörünün +değiştirilmesi üzerine, artan bellek kullanımı pahasına mevcut olana dek, +pixmap benzerlerini çizmek için önbelleğe alınmış pixmap'ler +kullanılacaktır.
  • +
  • Cihaz benek oranını kullan Etkinleştirilirse, mevcut en yüksek cihaz +pikseli oranı fiziksel ve görüntü mantıksal çözünürlükte oluşturulur.
  • +
  • Sayfaları süsle Sayfaların artalandan ayrı olup olmadığını belirler.
  • +
  • Bağlantıları süsle Bağlantıların kırmızı çerçevelerle vurgulanıp +vurgulanmadığını belirler.
  • +
  • Form alanlarını süsle Form alanlarının mavi çerçevelerle vurgulanıp +vurgulanmadığını belirler.
  • +
  • Artalan rengi Artalanın rengini SVG renk anahtar kelimeleriyle veya +onaltılık gösterimle '#rrggbb' kullanarak belirler.
  • +
  • Kağıt rengi SVG renk anahtar kelimeleri veya onaltılık gösterimi +'#rrggbb' kullanarak sayfaların rengini belirler.
  • +
  • Sunum artalan rengi Sunum görünümünün artalan renginin +hesaplamasındaki kağıt rengini geçersiz kılar ve SVG renk anahtar +kelimeleriyle veya '#rrggbb' onaltılı gösterimini kullanarak tanımlanır.
  • +
  • Satır başına sayfalar 'çok sayfalı' sayfa düzeni kipindeki satır +başına sayfa sayısı.
  • +
  • Sayfa aralığı Sayfalar arasında görüntülenen dikey ve yatay alanı +belirler.
  • +
  • Küçük resim aralığı Küçük resimler arasında gösterilen dikey ve yatay +alanı belirler.
  • +
  • Küçük resim boyutu Küçük resimlerin boyutunu belirler.
  • +
  • Önbellek boyutu Program, işlenen sayfaları bu sınırın üzerinde +önbelleğe almaya çalışacak ve artan bellek kullanımı pahasına oluşturma hızı +artacaktır.
  • +
  • Önbellekleme Yazılımı, görünür olmayan sayfaları, oluşturma hızını +arttırarak artan önbellek kullanımı pahasına getirmeye çalışacaktır.
  • +
  • Önbellekleme mesafesi Geçerli satırın ötesinde satır sayısı ve +geçerli satırdan önek getirilen satırların iki katı.
  • +
  • PDF ayarları +
      +
    • Keskinlik yumuşatma Performans kalitesini artırarak görüntü +kalitesini artırır
    • +
    • Metin yumuşatma Metin görüntüleme kalitesini performans pahasına +iyileştirir.
    • +
    • Metin keskinliği Bazı yazı tipleri için metin görüntüleme kalitesini +artırabilir.
    • +
    • Üst Baskı Önizleme Etkinleştirilirse, bir kat daha üst üste bir +mürekkep baskı önizlemesi görüntülenir.
    • +
    • İnce çizgi kipi İnce çizgiler çizmek için kullanılan iyileştirmeyi +seçer.
    • +
    • Arka uç Sayfaları işlemek için kullanılan artalanı seçer.
    • +
    +
  • +
  • PS ayarları +
      +
    • Grafik yumuşatma bitleri Grafikler için yumuşatma miktarını belirler.
    • +
    • Metin yumuşatma bitleri Metin için yumuşatma miktarını belirler.
    • +
    +
  • +
+ +

Arayüz ayarları

+ +
    +
  • Genişletilmiş arama platformu Etkinleştirilirse, varsayılan arama +platformu, tüm sekmelerin sonuçlarını gösteren bir genel bakışla +genişletilir. (Yeniden başlattıktan sonra etkili olur.)
  • +
  • Ek açıklama yer paylaşımı Etkinleştirilirse, bir sayfadaki tüm ek +açıklamalar etkileşimli bir yer paylaşımı olarak görüntülenecektir. Aksi +takdirde, her açıklama ayrı bir açılır pencere olarak ele alınacaktır.
  • +
  • Form alanı yer paylaşımı Etkinleştirilirse, sayfadaki tüm form +alanları etkileşimli bir yer paylaşımı olarak görüntülenecektir. Aksi +takdirde her form alanı ayrı bir açılır pencere olarak ele alınacaktır.
  • +
  • Sekme konumu Ana görünüm sekmelerinin hangi kenarında +görüntüleneceğini tanımlar.
  • +
  • Sekme görünürlüğü İkiden az belge açıldığında sekmelerin +görüntülenip görüntülenmeyeceğini belirler.
  • +
  • Sekmeleri yay Sekmelerin tüm sekme çubuğunda eşit olarak yayılıp +yayılmayacağını belirler.
  • +
  • Geçerli sekmenin yanındaki yeni sekme Etkinleştirilirse, etkin +sekmenin sağında yeni sekmeler açılır.
  • +
  • Son sekmeden çık Etkinleştirilirse, uygulama son sekme kapandıktan +sonra çıkar.
  • +
  • Son kullanılan say "Yakın zamanda kullanılan parkur" +etkinleştirildiyse, yakın zamanda kullanılan menüde listelenen dosya +sayısını ayarlar. (Yeniden başlattıktan sonra etkili olur.)
  • +
  • Son kapatılanı say "Yakın bir yerde sakla" seçeneği +etkinleştirilmişse, son kapatılan menüde listelenen sekmelerin sayısını +ayarlar. (Yeniden başlattıktan sonra etkili olur.)
  • +
  • Dosya araç çubuğu Dosya araç çubuğunda hangi eylemlerin görüneceğini +tanımlar. Kullanılabilir eylemler yeniSekmedeAç, açık, yenileme, +kopyaKaydet, olarakKaydet, yazdırma ve ayırıcıdır. (Yeniden başlattıktan +sonra etkili olur.)
  • +
  • Araç çubuğunu düzenle Düzenleme araç çubuğunda hangi eylemlerin +görüneceğini tanımlar. Kullanılabilir işlemler Geçerli Sayfa, Önceki Sayfa, +Sonraki Sayfa, İlk Sayfa, Son Sayfa, Sayfaya Atla, Geri Atla, İleri Atla, +Bul, Pano Kipine Kopyala, Ek Açıklama Kipi ve ayırıcı ekleyin. (Yeniden +başlattıktan sonra etkili olur.)
  • +
  • Araç çubuğunu görüntüle Görünüm araç çubuğunda hangi eylemlerin +görünür olduğunu tanımlar. Kullanılabilir eylemler ölçek etmeni, +yakınlaştır, uzaklaştır, sürekli kip, ikili sayfa kipi, ikili sayfa, kapak +sayfası kipi, çoklu sayfa kipi, özgün boyut, sayfa genişlik kipine sığdır, +sayfa boyut sığdır, sola döndür, sağa döndür, tam ekran , sunum ve +ayırıcı. (Yeniden başlattıktan sonra etkili olur.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Kaydırılabilir menüler Varsayılan biçemi geçersiz kılacak ve böylece +kullanılabilir ekran alanından büyükse açılır menüler birden çok sütunda +gösterilecek şekilde kaydırılacaktır. (Yeniden başlattıktan sonra etkili +olur.)
  • +
  • Aranabilir menüler Sekmelerin ve yer imleri menülerinin varsayılan +klavye gezinimini, sizin gibi bir arama mekanizması ile genişletir.
  • +
  • Araç ve menü çubuklarını tam ekranla değiştirme Tam ekran kipini +değiştirirken aracın ve menü çubuklarının görünürlüğünü daima değiştirir.
  • +
  • Sayfa etiketini kullan Kullanılabilir olduğunda, belge tarafından +sağlanan sayfa etiketinin sayfa numaraları yerine kullanılacağını belirler.
  • +
  • Sekme başlığı olarak belge başlığı Dosya adı yerine meta verilerden +türetilmiş sekme başlığını belirler.
  • +
  • Pencere başlığında geçerli sayfa Etkinleştirilirse, geçerli sayfa ve +etkin sekmedeki sayfanın sayfa sayısı pencere başlığında görüntülenir.
  • +
  • Pencere başlığında örnek adı Etkinleştirilirse ve geçerli örnek adı +verilirse, adı pencere başlığında görüntülenir.
  • +
  • Geçerli küçük resmi vurgulayın Etkinleştirilirse, geçerli sayfa küçük +resimler görünümünde vurgulanır.
  • +
  • Küçük resimleri sınırlandırın Bu seçenek etkinleştirilirse ve bir +arama yapıldığında yalnızca arama teriminin bulunduğu sayfalar küçük resim +görünümünde gösterilir.
  • +
+ +

Kısayol ayarları

+ +

Kısayol ayarları klavye kısayollarının kişisel tercihine ayarlanmasına izin +verir. Kısayolları düzenlemek ve yeni kısayolu girmek için kısayolu çift +tıklatarak değiştirilir. Her eylem, noktalı virgül ile ayrılmış bir liste +girerek çeşitli kısayollara sahip olabilir. Tek harf olmayan anahtarların +isimleri açıkça belirtilir (ör. "Alt", "Ctrl", "PgDown"), burada eşleşmeyle +büyük/küçük harf duyarlı değildir. Kısayol değiştirici tuşlar içeriyorsa, +tuşların adları artı işaretiyle birleştirilir ve değiştirici tuşlar önce +listelenmelidir, ör. "Ctrl+A" veya "Ctrl ++".

+ +

Değiştirici ayarları

+ +
    +
  • Yakınlaştır Ana görünümde fare tekerleğini kullanarak yakınlaştırma +yapmak için klavye düzenleyicileri.
  • +
  • Döndür Ana görünüşte fare tekerleğini kullanarak döndürmek için +klavye değiştiricileri.
  • +
  • Kaydır Ana görünümde fare tekerleğini kullanarak klavye +değiştiricilerini yatay olarak kaydırma.
  • +
  • Panoya kopyala Bir sayfadaki metinleri veya resimleri panoya +kopyalamak için klavye değiştiricileri.
  • +
  • Ek açıklama ekle Bir sayfaya ek açıklamalar eklemek için klavye +değiştiricileri.
  • +
  • Seçime yakınlaştır Bir sayfada bir seçime basmak için klavye +düzenleyicileri.
  • +
+ + + + diff --git a/help/help_uk.html b/help/help_uk.html new file mode 100644 index 0000000..f309015 --- /dev/null +++ b/help/help_uk.html @@ -0,0 +1,588 @@ + + + + + + + + + Довідка + + + + +

Довідка

+ +

Зміст

+
    +
  1. Головне меню
  2. +
      +
    1. Файл
    2. +
    3. Зміни
    4. +
    5. Перегляд
    6. +
    7. Вкладки
    8. +
    9. Закладки
    10. +
    11. Довідка
    12. +
    +
  3. Головна панель перегляду
  4. +
  5. Допоміжні панелі
  6. +
  7. Параметри
  8. +
      +
    1. Параметри поведінки
    2. +
    3. Параметри графіки
    4. +
    5. Параметри інтерфейсу
    6. +
    7. Параметри клавіатурних скорочень
    8. +
    9. Параметри модифікаторів
    10. +
    +
+ +

Вступ

+ +

qpdfview — програма для перегляду документів з використанням +вкладок. У програмі використано бібліотеку Poppler для реалізації підтримки +PDF, бібліотеку libspectre для реалізації підтримки PS, бібліотеку DjVuLibre +для реалізації підтримки DjVu, бібліотеку CUPS для реалізації підтримки +друку та набір бібліотек Qt для реалізації інтерфейсу.

+ +

Будь ласка, зверніться до сторінки підручника (man), щоб дізнатися більше +про параметри командного рядка і файли налаштувань.

+ +

Головне меню

+ +

Файл

+ +
    +
  • Відкрити... — відкриває діалогове вікно вибору файла, який слід +відкрити у поточній вкладці. Якщо у вікні програми не відкрито жодної +вкладки, файл буде відкрито у новій вкладці.
  • +
  • Відкрити у новій вкладці... — відкриває діалогове вікно вибору +файлів, які слід відкрити у нових вкладках.
  • +
  • Останні відкриті — містить список останніх відкритих документів (якщо +увімкнено у параметрах програми).
  • +
  • Оновити — перезавантажити файл, вміст якого показано у поточній +вкладці.
  • +
  • Зберегти — зберігає анотації і вміст полів форм до файла, який +показано на поточній вкладці.
  • +
  • Зберегти як... — відкрити діалогове вікно для збереження файла, +показаного у поточній вкладці разом зі змінами у анотаціях та заповненими +полями форм.
  • +
  • Зберегти копію... — відкриває діалогове вікно для зберігання +незміненої копії файла, який показано на поточній вкладці.
  • +
  • Друкувати... — відкрити діалогове вікно для друку файла, вміст якого +показано у поточній вкладці.
  • +
  • Вийти — закрити усі вкладки і завершити роботу програми.
  • +
+ +

Зміни

+ +
    +
  • Наступна/Попередня/Перша/Остання сторінка — перейти до наступної, +попередньої, першої чи останньої сторінки документа.
  • +
  • Перейти до сторінки... — відкрити діалогове вікно для введення номеру +сторінки, яку слід показати у поточній вкладці.
  • +
  • Перейти назад/вперед — перейти назад або вперед журналом перегляду +сторінок.
  • +
  • Пошук...: відкрити панель пошуку під головною панеллю. Пошук буде +розпочато автоматично за дві секунди після останньої зміни у рядку +пошуку. Також пошук можна розпочати вручну натисканням клавіші Enter. Якщо +під час натискання клавіші Enter утримувати натисненою клавішу Shift, пошук +буде виконано на усіх вкладках, а не лише на поточній. (Цю поведінку буде +замінено на зворотну, якщо у параметрах програму буде увімкнено панель +розширеного пошуку.)
  • +
  • Знайти попереднє/наступне — перейти до попереднього або наступного +випадку використання у документі рядка, пошук якого виконується.
  • +
  • Скасувати пошук: скасувати поточний сеанс пошуку і закрити панель +пошуку.
  • +
  • Копіювати до буфера — якщо позначено, програма зачекає, доки ви +позначите область у документі, з якої слід скопіювати текст або зображення.
  • +
  • Додати коментар — якщо позначено цей пункт, програма зачекає, доки ви +позначите у документі область, що якої слід додати анотацію або коментар.
  • +
  • Параметри... — відкрити діалогове вікно параметрів програми. За +допомогою натискання кнопки з написом «Типові» можна повернутися до типових +значень усіх параметрів на усіх вкладках. За допомогою натискання кнопки з +написом «Типові на поточній вкладці» можна повернутися до типових значень +параметрів лише для поточної вкладки.
  • +
+ +

Змінити номер поточної сторінки можна введенням номера бажаної +сторінки до поля для редагування тексту на панелі інструментів +редагування. Передати фокусування на поле можна за допомогою натискання +комбінації клавіш Ctrl+K. Після введення значення слід натиснути клавішу +Enter.

+ +

Перегляд

+ +
    +
  • Неперервний перегляд — визначити, чи слід під час показу документа +гортати сторінки неперервно без перестрибування між окремими сторінками.
  • +
  • Дві сторінки — визначити, чи слід використовувати у компонуванні +сторінок два стовпчики.
  • +
  • Дві сторінки та обкладинка — визначити, чи слід використовувати у +компонуванні сторінок два стовпчики з проміжком після сторінки обкладинки.
  • +
  • Декілька сторінок — визначити, чи слід показувати сторінки документа +у декілька стовпців. Кількість показаних стовпців можна змінити за допомогою +діалогового вікна параметрів роботи програми.
  • +
  • Справа ліворуч: визначає спосіб упорядковування у компонуваннях з +декількома сторінками на рядок.
  • +
  • Збільшити: збільшити масштаб на 10 відсотків. Максимальним масштабом +є масштаб у 5000 відсотків.
  • +
  • Зменшити: зменшити масштаб на 10 відсотків. Мінімальним масштабом є +масштаб у 10 відсотків.
  • +
  • Початковий розмір — відновити масштабування у 100 відсотків.
  • +
  • За шириною — використати масштабування, за якого усі сторінки +заповнюватимуть усю ширину головної панелі перегляду програми.
  • +
  • Сторінка цілком — використати масштабування, за якого усі сторінки +заповнюватимуть усю ширину або висоту головної панелі перегляду програми.
  • +
  • Повернути ліворуч — повернути сторінки ліворуч або проти годинникової +стрілки на 90 градусів.
  • +
  • Повернути праворуч — повернути сторінки праворуч або за годинниковою +стрілкою на 90 градусів.
  • +
  • Інвертувати кольори — визначає, чи слід інвертувати кольори під час +показу сторінок документів.
  • +
  • Перетворити на відтінки сірого: визначає, чи слід програмі +перетворювати кольори на відтінки сірого під час приготування документа до +показу.
  • +
  • Обрізати поля: увімкнути вилучення порожніх полів після обробки.
  • +
  • Компонування: увімкнути компонування обробленої сторінки з кольором +паперу для коригування тла сканованих документів.
  • +
  • Панелі інструментів — у цьому меню наведено список усіх доступних +панелей інструментів, за допомогою яких можна отримувати доступ до кнопок +дій, якими користуються найчастіше.
  • +
  • Бічні панелі — у цьому меню міститься список усіх доступних бічних +панелей, за допомогою яких програма показує допоміжну інформацію.
  • +
  • Шрифти... — відкрити діалогове вікно зі списком шрифтів, використаних +у поточному документі.
  • +
  • На весь екран — вмикає або вимикає повноекранний режим роботи +програми, тобто режим, у якому вікно програми максимізується, а декорації +вікна приховуються.
  • +
  • Презентація... — переводить програму у режим презентації, вийти з +якого можна за допомогою натискання клавіші F12 або Esc. Клавішами Home/End +можна скористатися для того, щоб перейти до першої або останньої сторінок +документа відповідно. Натисканням клавіші зі стрілкою праворуч, клавіші зі +стрілкою вниз, пробілу та клавіші Page Down можна перейти до перегляду +наступної сторінки. Натисканням клавіші зі стрілкою ліворуч, клавіші зі +стрілкою вгору, клавіші Backspace та клавіші Page Up можна перейти до +попередньої сторінки. Натисканням комбінації клавіш Ctrl+Enter можна перейти +до сторінки, яку ви переглядали до останнього переходу сторінками документа.
  • +
+ +

Масштаб можна змінити до бажаного значення за допомогою текстового +поля на панелі інструментів перегляду. Передати фокусування на поле можна за +допомогою натискання комбінації клавіш Ctrl+L. Після введення значення слід +натиснути клавішу Enter.

+ +

Вкладки

+ +
    +
  • Попередня/Наступна вкладка — робить поточною попередню або наступну +вкладку. Перехід вкладками виконується циклічно.
  • +
  • Закрити вкладку — закриває поточну вкладку.
  • +
  • Закрити всі вкладки — закриває усі вкладки.
  • +
  • Закрити усі вкладки, крім поточної — закрити усі вкладки, окрім +поточної вкладки.
  • +
  • Останні закриті — містить список останніх закритих вкладок (якщо +увімкнено у параметрах програми).
  • +
+ +

У цьому меню буде наведено список усіх вкладок. Зробити вкладку поточною +можна шляхом натискання відповідного пункту у меню. Закрити вкладку можна +клацанням середньою кнопкою миші на відповідному пункті меню. Перші дев’ять +вкладок у списку також можна активувати одночасним натисканням клавіші Alt +та клавіші номера вкладки (від 1 до 9).modifier and pressing keys one to +nine.

+ +

Закладки

+ +
    +
  • Попередня закладка — перейти до найближчої закладки, розташування +якої передує поточній сторінці.
  • +
  • Наступна закладка — перейти до найближчої закладки, розташованої +після поточної сторінки.
  • +
  • Додати закладку — додає закладку до поточного файла і сторінки.
  • +
  • Вилучити закладку — вилучає закладку для поточного файла і сторінки.
  • +
  • Вилучити усі закладки — вилучити з документа усі закладки.
  • +
  • Відкрити — відкриває відповідний файл у поточній вкладці. Якщо у +вікні програми не відкрито жодної вкладки, файл буде відкрито у новій +вкладці.
  • +
  • Відкрити у новій вкладці — відкрити відповідний файл у новій вкладці.
  • +
  • Перейти до сторінки — перейти до відповідної сторінки, якщо +відповідний файл вже відкрито. Якщо файл не відкрито, його буде відкрито у +новій вкладці.
  • +
+ +

Довідка

+ +
    +
  • Зміст — показує цей документ.
  • +
  • Про програму — показує дані щодо версії програми.
  • +
+ +

Головна панель перегляду

+ +

За допомогою клавіш Backspace/пробіл можна перейти до попередньої/наступної +сторінки. Натисканням клавіш Home/End можна перейти до першої/останньої +сторінки документа. За допомогою клавіш зі стрілками та клавіш Page Up/Page +Down можна гортати документ. За допомогою одночасного натискання клавіш Ctrl +і Enter можна перейти до сторінки, яку було відкрито перед виконанням +останньої дії з переходу документом.

+ +

За допомогою коліщатка миші можна гортати документ вгору і вниз. Якщо під +час гортання утримувати натисненою клавішу ALT, гортання +відбуватиметься праворуч-ліворуч. Утримуванням натиснутою клавіші +CTRL можна перевести коліщатко у режим масштабування документа. Якщо +утримувати натисненою клавішу SHIFT, гортанням коліщатка можна буде +обертати документ. Клавіатурне керування можна змінити за допомогою +діалогового вікна параметрів програми. Якщо ви натиснете і утримуватимете +середню кнопку миші (коліщатко) і пересунете вказівник миші, ви зможете +позначити область для масштабування.

+ +

Посилання позначаються червоними рамками (якщо позначення посилань увімкнено +у параметрах програми). Клацанням лівою кнопкою миші можна перейти до +пов’язаної з посиланням сторінки або відкрити адресу у типовій програмі для +перегляду (якщо це увімкнено у параметрах програми). Клацанням середньою +кнопкою миші на посиланні можна відкрити пов’язану з ним сторінку у новій +вкладці. Якщо ви просто наведете вказівник миші на посилання, програма +покаже панель з адресою, на яку вона посилається.

+ +

Поля форм буде позначено синіми рамками (якщо це увімкнено у параметрах +програми). Після клацання лівою кнопкою миші на полі форми можна змінити +вміст поля. Якщо ви наведете вказівник миші на поле форми, програма покаже +назву поля на панелі підказки.

+ +

Код початкового документа може бути відкрито у редакторі коду за допомогою +контекстного меню, у якому може міститися пункт переходу до відповідного +вузла SyncTeX.

+ +

Щоб скопіювати фрагмент тексту або зображення, натисніть і +утримуйте клавішу Shift, натисніть ліву кнопку миші і, утримуючи її, +обведіть рамкою область, яку слід скопіювати. Щойно ви відпустите кнопку +миші, програма покаже контекстне меню, за допомогою якого ви зможете +скопіювати текст або зображення до буфера обміну даними.

+ +

Щоб додати анотацію, натисніть і утримуйте клавішу Ctrl, +натисніть і утримуйте ліву кнопку миші, перетягніть вказівник миші, щоб +окреслити область, до якої буде додано анотацію. Щойно кнопку миші буде +відпущено, програма відкриє контекстне меню для вибору між додаванням тексту +та позначенням кольором. Клацанням лівою кнопкою миші можна перейти до +редагування анотацій. Клацанням правою кнопкою миші можна +вилучити анотацію. (Для додавання або вилучення анотацій вам слід +встановити версію 0.20.1 або новішу бібліотеки Poppler.) Після наведення +вказівника миші на анотацію, програма покаже у контекстному вікні вміст +анотації.

+ +

Щоб масштабувати область перегляду за позначеним, натисніть і +утримуйте клавіші Shift та Ctrl, натисніть і утримуйте ліву +кнопку миші, перетягніть вказівник миші так, щоб окреслити область, за якою +буде виконано масштабування.

+ +

Увімкнути або вимкнути показ панелі інструментів та смужки меню +можна за допомогою придатних до налаштовування клавіатурних +скорочень. Типовими значеннями цих скорочень є «Shift+Alt+T» та +«Shift+Alt+M».

+ +

Допоміжні панелі

+ +

Перегляд змісту — панель із оглядом вмісту документа. Наведенням +вказівника миші на пункт змісту з наступним клацанням лівою кнопкою миші +можна перейти до відповідної сторінки на основній панелі +перегляду. Контекстним меню можна скористатися для розгортання або згортання +усіх підпунктів поточного пункту.

+ +

Крім того, навігацію панеллю змісту можна здійснювати за допомогою +клавіатури або коліщатка миші. Якщо натиснути і утримувати клавішу Shift, +одночасно натискаючи клавіші зі стрілками вгору або вниз, програма гортатиме +текст документа. Одночасним натисканням клавіші Shift та клавіш зі стрілками +ліворуч або праворуч можна згортати або розгортати один рівень підпунктів +поточного пункту у змісті. За допомогою одночасного натискання клавіші Ctrl +та клавіш зі стрілками ліворуч або праворуч можна повністю згорнути або +розгорнути увесь підлеглий список поточного пункту. Утримуючи натисненою +клавішу Shift і прокручуючи коліщатко миші можна змінити позначений пункт +змісту. Утриманням натисненою клавіш Ctrl з одночасним прокручуванням +коліщатка миші можна розгортати або згортати список підпунктів позначеного +пункту.

+ +

На панелі перегляду властивостей буде показано додаткові дані щодо +документа.

+ +

На панелі мініатюр буде показано зменшені версії сторінок +документа. Наведенням вказівника на пункт сторінки із наступним клацанням +лівою кнопкою миші можна перейти до перегляду відповідної сторінки у +документі.

+ +

На панелі перегляду закладок буде показано закладки, пов’язані із +документом у поточній вкладці. За допомогою контекстного меню панелі можна +перейти до попередньої або наступної закладки чи додати закладки. Крім того, +у контекстному меню окремих закладок передбачено пункти для редагування та +вилучення закладок.

+ +

Якщо відповідний пункт позначено у параметрах роботи програми, на панелі +розширеного пошуку буде показано огляд результатів усіх пошуків на усіх +вкладках. Також буде показано контекст знайденого рядка у тексті (сам рядок +буде позначено). Наведенням вказівника миші на пункт результатів з наступним +клацанням лівою кнопкою миші можна перейти до відповідної вкладки і позиції +тексту у документі.

+ +

Параметри

+ +

Параметри поведінки

+ +
    +
  • Відкривати URL — визначає, чи слід програмі відкривати посилання з +адресами URL у типовій програмі для перегляду відповідних даних.
  • +
  • Автооновлення — визначає, чи слід автоматично перезавантажувати +документи, якщо до відповідних файлів було внесено зміни.
  • +
  • Пам’ятати останні відкриті — якщо буде позначено цей пункт, доступним +стане меню останніх відкритих документів. Кількість пунктів у меню можна +визначити за допомогою параметра «Кількість останніх відкритих». Зміни +набудуть чинності після перезапуску програми.
  • +
  • Пам’ятати останні закриті: якщо буде позначено цей пункт, програма +показуватиме меню зі списком нещодавно закритих документів. Кількість +документів у списку визначатиметься значенням параметра «Кількість записів +останніх закритих документів». Збереження вмісту вкладок може призвести до +значного збільшення споживання пам’яті програмою. Значення параметра буде +застосовано лише після перезавантаження програми.
  • +
  • Відновлювати вкладки — якщо позначено цей пункт, програма зберігатиме +дані щодо вкладок та їхніх властивостей і відновлюватиме ці дані під час +запуску.
  • +
  • Відновлювати закладки — якщо позначено цей пункт, програма +зберігатиме дані щодо закладок і відновлюватиме ці дані під час запуску.
  • +
  • Відновлювати налаштування окремих документів — якщо буде позначено +цей пункт, програма зберігатиме і відновлюватиме параметри показу окремих +файлів під час відкриття і закриття вкладок.
  • +
  • Інтервал між збереженнями бази даних: інтервал між послідовними +сеансами збереження даних щодо вкладок, закладок та параметрів показу файлів +до бази даних.
  • +
  • Синхронна презентація — якщо буде позначено цей пункт, головною +панеллю перегляду можна буде користуватися для керування показом +презентації.
  • +
  • Екран презентації — за допомогою цього пункту можна визначити індекс +екрана, на якому слід показувати презентацію.
  • +
  • Синхронізувати перегляд ескізу — якщо позначено цей пункт, на панелі +ескізів під час кожної зміни сторінок буде підсвічено перший запис, що +вказуватиме на поточну сторінку.
  • +
  • Мінімальне гортання: якщо буде позначено цей пункт, поле перегляду +буде пересунуто, лише якщо позицію призначення не видно.
  • +
  • Коефіцієнт масштабування: число, на яке буде помножено масштаб під +час збільшення або поділено масштаб під час зменшення.
  • +
  • Колір підсвічування — цей пункт визначає колір підсвічування.
  • +
  • Тривалість підсвічування — за допомогою цього пункту можна визначити +тривалість тимчасового підсвічування.
  • +
  • Колі анотацій — цей пункт визначає колір анотацій, які додаватимуться +програмою. Колір можна визначити за допомогою ключового слова SVG або +шістнадцяткового позначення у форматі «#ччззсс».
  • +
  • Редактор вихідного файла — програма, яку буде запущено для +редагування файла початкових даних. «%1» замінюється абсолютним шляхом до +файла. «%2» та «%3» замінюються номером рядка та стовпчика відповідно.
  • +
+ +

Параметри графіки

+ +
    +
  • Мозаїчність: сторінки буде поділено між елементами мозаїки панелей +показу до показу документа на екрані, буде використано кешування для +зменшення споживання пам’яті.
  • +
  • Зберігати застарілі растрові зображення — якщо буде позначено цей +пункт, програма використовуватиме кешовані растрові зображення для малювання +проміжних зображень сторінок під час зміни масштабу за рахунок збільшення +споживання пам’яті.
  • +
  • Використовувати співвідношення у пікселях пристрою — якщо буде +позначено цей пункт, програма використовуватиме для відтворення на фізичних +носіях і показу на екрані найвище з доступних значень роздільної здатності +відповідного пристрою.
  • +
  • Рамка навколо сторінки — цей пункт визначає, чи слід показувати +навколо сторінки рамку для відокремлення її від тла.
  • +
  • Виокремлювати посилання — за допомогою цього пункту можна визначити, +чи слід програмі виокремлювати посилання червоними рамками.
  • +
  • Виокремлювати поля форм — за допомогою цього пункту можна визначити, +чи слід програмі виокремлювати поля форм синіми рамками.
  • +
  • Колір тла — за допомогою цього пункту можна визначити колір +тла. Колір тла можна задати ключовим словом SVG або у форматі +шістнадцяткового числа «#ччззсс».
  • +
  • Колір паперу — за допомогою цього пункту можна визначити колір +«паперу» сторінок. Колір можна задати ключовим словом SVG або у форматі +шістнадцяткового числа «#ччззсс».
  • +
  • Колір тла презентації — цей пункт перевизначає колір паперу під час +визначення кольору тла презентації. Колір можна задати ключовим словом SVG +або у форматі шістнадцяткового числа «#ччззсс».
  • +
  • Сторінок у ряд — визначає кількість сторінок у ряд у режимі +одночасного показу декількох сторінок.
  • +
  • Між сторінками — визначає вертикальний і горизонтальний проміжок між +сторінками під час показу документа.
  • +
  • Між мініатюрами — визначає вертикальний і горизонтальний проміжок між +мініатюрами на панелі показу ескізів сторінок.
  • +
  • Розмір мініатюр — цей пункт визначає розмір мініатюр на панелі +ескізів.
  • +
  • Розмір кешу — програма намагатиметься кешувати зображення сторінок у +цих межах, збільшуючи швидкість показу за рахунок збільшення об’єму +використаної пам’яті.
  • +
  • Передзавантаження — якщо буде позначено цей пункт, програма +намагатиметься обробити для показу дані сторінок, які ще не показано, +збільшуючи швидкість показу за рахунок збільшення об’єму використаного кешу.
  • +
  • Довжина передзавантаження — цей пункт визначає кількість рядів +сторінок за поточним рядом і подвоєну кількість рядів перед поточним рядом, +які попередньо завантажуватимуться програмою.
  • +
  • Параметри PDF +
      +
    • Згладжування — покращує якість показу за рахунок певної втрати +швидкодії програми.
    • +
    • Згладжування тексту — покращує якість показу тексту за рахунок певної +втрати швидкодії.
    • +
    • Гінтінґ тексту — може покращити якість показу графіки для певних +шрифтів.
    • +
    • Перегляд наддруку — якщо буде позначено цей пункт, програма +показуватиме попередній перегляд результатів друку шарами чорнил різного +кольору.
    • +
    • Режим тонких ліній надає змогу вибрати спосіб оптимізації під час +показу тонких ліній.
    • +
    • Модуль обробки надає змогу вибрати модуль обробки і показу сторінок.
    • +
    +
  • +
  • Параметри PS +
      +
    • Бітова маска згладжування графіки — цей пункт визначає рівень +згладжування графічних зображень.
    • +
    • Бітова маска згладжування тексту — цей пункт визначає рівень +згладжування тексту.
    • +
    +
  • +
+ +

Параметри інтерфейсу

+ +
    +
  • Розширена панель пошуку: якщо позначено цей пункт, типову панель +пошуку буде розширено оглядом результатів пошуку на усіх вкладках. Зміна +параметра набуде чинності після перезапуску програми.
  • +
  • Накладка анотації: якщо позначено цей пункт, усі анотації на сторінці +буде показано як інтерактивні накладки. Якщо пункт не буде позначено, +програма вважатиме кожну анотацію окремим контекстним вікном.
  • +
  • Накладка поля форми: якщо позначено цей пункт, усі поля форм на +сторінці буде показано як інтерактивну накладку. Якщо пункт позначено не +буде, кожне з полів форм вважатиметься окремим контекстним вікном.
  • +
  • Розташування вкладок — визначає, на якому боці головної панелі +перегляду буде показано вкладки.
  • +
  • Показувати вкладки — визначає, чи буде показано вкладки, якщо +відкрито менше за два документи.
  • +
  • Розтягнути вкладки: визначає, чи слід рівномірно розтягувати вкладки +вздовж усієї панелі вкладок.
  • +
  • Нова вкладка поруч з поточною — якщо позначено цей пункт, нові +вкладки відкриватимуться праворуч від активної вкладки.
  • +
  • Вийти після останньої вкладки: якщо позначено, програма завершуватиме +роботу після закриття останньої вкладки.
  • +
  • Кількість останніх відкритих — визначає кількість записів у списку +останніх відкритих документів, якщо позначено пункт «Пам’ятати останні +відкриті». (Зміни буде задіяно після перезапуску програми.)
  • +
  • Кількість останніх закритих — визначає кількість записів у списку +останніх закритих документів, якщо позначено пункт «Пам’ятати останні +закриті». (Зміни буде задіяно після перезапуску програми.)
  • +
  • Панель «Файл» — цей пункт визначає, які кнопки буде показано на +панелі інструментів «Файл». Можливі кнопки: openInNewTab, open, refresh, +saveCopy, saveAs, print та separator. Зміни набудуть чинності після +перезапуску програми.
  • +
  • Панель «Редагування» — цей пункт визначає перелік кнопок, які буде +показано на панелі інструментів редагування. Можливі кнопки: currentPage, +previousPage, nextPage, firstPage, lastPage, jumpToPage, jumpBackward, +jumpForward, search, copyToClipboardMode, addAnnotationMode та +separator. Зміни набудуть чинності після перезапуску програми.
  • +
  • Панель «Перегляд» — визначає, які пункти дій буде показано на панелі +перегляду. Можна використовувати такі пункти: scaleFactor, zoomIn, zoomOut, +continuousMode, twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, +originalSize, fitToPageWidthMode, fitToPageSizeMode, rotateLeft, +rotateRight, fullscreen, presentation і separator. (Зміни буде задіяно після +перезапуску програми.)
  • +
  • Контекстне меню документа — визначає, які пункти дій будуть видимими +у контекстному меню документа. Доступними пунктами дій є openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch і роздільник.
  • +
  • Контекстне меню вкладки — визначає, які пункти дій будуть видимими у +контекстному меню вкладки. Доступними пунктами дій є openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, copyFilePath, +selectFilePath, closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight і роздільник.
  • +
  • Меню з гортанням: перевизначити типовий стиль, щоб спадні меню +горталися, а не показувалися у декілька стовпчиків, якщо вони не вміщаються +на екрані. (Потребує перезапуску програми.)
  • +
  • Придатні до пошуку меню: розширює типову навігацію вкладками та +закладками за допомогою клавіатурних скорочень можливістю шукати пункти +простим введенням назв із клавіатури.
  • +
  • Вимкнути панелі у повноекранному режимі: завжди вимикати показ панелі +інструментів та смужки меню у повноекранному режимі і вмикати показ після +виходу з цього режиму.
  • +
  • Використовувати мітку сторінки: визначає, чи буде використано +визначену у документі мітку сторінки, якщо таку визначено, замість номеру +сторінки.
  • +
  • Назва документа як назва вкладки: визначає, чи слід визначати +заголовок вкладки на основі метаданих, а не назви файла.
  • +
  • Поточна сторінка у заголовку вікна — якщо позначено цей пункт, у +заголовку вікна програми буде показано дані щодо поточної сторінки і +кількості сторінок документа у активній вкладці програми.
  • +
  • Назва екземпляра у заголовку вікна: якщо буде позначено цей пункт і +поточний запущений екземпляр програми матиме якусь назву, цю назву буде +показано у заголовку вікна програми.
  • +
  • Підсвічування поточної мініатюри — якщо позначено цей пункт, програма +підсвічуватиме поточну сторінку на панелі мініатюр.
  • +
  • Обмежити мініатюри результатами — якщо позначено цей пункт і +виконується пошук, програма показуватиме на панелі мініатюр лише сторінки, +де було знайдено рядок пошуку.
  • +
+ +

Параметри скорочень

+ +

За допомогою вкладки параметрів клавіатурних скорочень можна скоригувати +перелік клавіатурних скорочень відповідно до ваших уподобань. Щоб змінити +скорочення для якоїсь з дій, двічі клацніть лівою кнопкою миші на +відповідному пункті і введіть нове скорочення. Для кожної з дій можна +вказати декілька скорочень, відокремлених крапкою з комою. Назви клавіш, які +складаються з декількох літер, слід вказувати явним чином (наприклад, «Alt», +«Ctrl», «PgDown»). Відповідність клавіш встановлюється без врахування +регістру. Якщо клавіатурне скорочення містить клавіші-модифікатори, слід +відокремлювати клавішу-модифікатор від решти клавіш скорочення символом +«+». Клавішу-модифікатор має бути вказано першою. Приклади: «Ctrl+A» або +«Ctrl++».

+ +

Параметри модифікаторів

+ +
    +
  • Масштабування — клавіша-модифікатор для масштабування за допомогою +коліщатка миші у головній панелі перегляду.
  • +
  • Обертання — клавіша-модифікатор для обертання за допомогою коліщатка +миші у головній панелі перегляду.
  • +
  • Гортання — клавіша-модифікатор для горизонтального гортання за +допомогою коліщатка миші у головній панелі перегляду.
  • +
  • Копіювати до буфера — клавіша-модифікатор для копіювання текстових +фрагментів та зображень зі сторінки до буфера обміну даними системи.
  • +
  • Додавання анотації — клавіша-модифікатор для додавання анотацій на +сторінку.
  • +
  • Масштабувати за позначеним: клавіші, які слід натиснути для +масштабування області перегляду за позначеним фрагментом сторінки.
  • +
+ + + + diff --git a/help/help_vi.html b/help/help_vi.html new file mode 100644 index 0000000..1f1661d --- /dev/null +++ b/help/help_vi.html @@ -0,0 +1,504 @@ + + + + + + + + + Help + + + + +

Help

+ +

Table of contents

+
    +
  1. Main menu
  2. +
      +
    1. File
    2. +
    3. Edit
    4. +
    5. View
    6. +
    7. Tabs
    8. +
    9. Bookmarks
    10. +
    11. Help
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. Settings
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

Introduction

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

Main menu

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_zh_CN.html b/help/help_zh_CN.html new file mode 100644 index 0000000..c14b75a --- /dev/null +++ b/help/help_zh_CN.html @@ -0,0 +1,503 @@ + + + + + + + + + 帮助 + + + + +

帮助

+ +

目录

+
    +
  1. 主菜单
  2. +
      +
    1. 文件
    2. +
    3. 编辑
    4. +
    5. 视图
    6. +
    7. 标签页
    8. +
    9. 书签
    10. +
    11. 帮助
    12. +
    +
  3. 主视图
  4. +
  5. Auxiliary views
  6. +
  7. 设置
  8. +
      +
    1. Behavior settings
    2. +
    3. Graphics settings
    4. +
    5. Interface settings
    6. +
    7. Shortcut settings
    8. +
    9. Modifier settings
    10. +
    +
+ +

简介

+ +

qpdfview 是一个标签式文档查看器。它使用 Poppler 来提供 PDF 支持、使用 libspecture 来提供 PS +支持、使用 DjVuLibre 提供 DjVu 支持、使用 CUPS 提供打印支持并使用 Qt 工具箱编写其用户界面。

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

主菜单

+ +

File

+ +
    +
  • Open... Opens a dialog to choose a file to open in the current +tab. If there is no tab, the file is opened in a new tab.
  • +
  • Open in new tab... Opens a dialog to choose files to open in new +tabs.
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • Refresh Reloads the file displayed in the current tab.
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • Print... Opens a dialog to print the file displayed in the current +tab.
  • +
  • Exit Closes all tabs and ends the program.
  • +
+ +

Edit

+ +
    +
  • Next/Previous/First/Last page Skips to the next/previous/first/last +page of the document.
  • +
  • Jump to page... Opens a dialog to enter a page to display in the +current tab.
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

View

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • Zoom in Increases the scale factor by 10 percent. The maximum scale +factor is 5000 percent.
  • +
  • Zoom out Decreases the scale factor by 10 percent. The minimum scale +factor is 10 percent.
  • +
  • Original size Resets the scale factor to 100 percent.
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • Rotate left Rotates the pages left/counterclockwise by 90 degrees.
  • +
  • Rotate right Rotates the pages right/clockwise by 90 degrees.
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • Tool bars This menu contains a list of available tool bars for +accessing frequently used actions.
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • Fonts... Opens a dialog listing the fonts used in the document.
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/help/help_zh_TW.html b/help/help_zh_TW.html new file mode 100644 index 0000000..894b806 --- /dev/null +++ b/help/help_zh_TW.html @@ -0,0 +1,496 @@ + + + + + + + + + 幫助 + + + + +

幫助

+ +

目錄

+
    +
  1. 主選單
  2. +
      +
    1. 檔案
    2. +
    3. 編輯
    4. +
    5. 檢視
    6. +
    7. 分頁
    8. +
    9. 書籤
    10. +
    11. 幫助
    12. +
    +
  3. Main view
  4. +
  5. Auxiliary views
  6. +
  7. 設定
  8. +
      +
    1. 行為設定
    2. +
    3. 圖形設定
    4. +
    5. 介面設定
    6. +
    7. 捷徑設定
    8. +
    9. Modifier settings
    10. +
    +
+ +

簡介

+ +

qpdfview is a tabbed document viewer. It uses Poppler for PDF +support, libspectre for PS support, DjVuLibre for DjVu support, CUPS for +printing support and the Qt toolkit for its interface.

+ +

Please refer to the manual page for information on command-line options and +configuration files.

+ +

主選單

+ +

檔案

+ +
    +
  • 開啟... 開啟對話方塊來選擇要在目前的分頁開啟的檔案。如果沒有分頁,檔案會在新分頁中開啟。
  • +
  • 在新分頁中開啟... 開啟對話方塊來選擇要在新分頁開啟的檔案。
  • +
  • Recently used Contains a list of the most recently used files (if +enabled in the settings).
  • +
  • 重新整理 重新讀取在目前的分頁中顯示的檔案。
  • +
  • Save Saves changes to annotations and form fields to the file +displayed in the current tab.
  • +
  • Save as... Opens a dialog to save the file displayed in the current +tab including changes to annotations and form fields.
  • +
  • Save copy... Opens a dialog to save an umodified copy of the file +displayed in the current tab.
  • +
  • 列印... 開啟對話方塊來列印目前分頁的檔案。
  • +
  • 退出 關閉所有分頁並結束程式。
  • +
+ +

編輯

+ +
    +
  • 下一頁/上一頁/第一頁/最後一頁 跳到文件的下一頁/上一頁/第一頁/最後一頁。
  • +
  • 跳到頁面... 開啟對話方塊來輸入要顯示在目前分頁的頁面。
  • +
  • Jump backward/forward Jumps backward/forward in the history of +displayed page.
  • +
  • Search... Opens the search dock below the main view. The search +automatically starts two seconds after the last change of the search term or +is manually started by pressing the return key. If the Shift modifier is +held when the return key is pressed, the search starts in all tabs instead +of just the current tab. (This effect is reversed if the extended search +dock is enabled in the settings.)
  • +
  • Find previous/next Jumps to the previous/next occurrence of the +search term in the document.
  • +
  • Cancel search Cancels the currently running search and closes the +search dock.
  • +
  • Copy to clipboard If checked, the program will wait for a frame to be +dragged to copy texts or images.
  • +
  • Add annotation If checked, the program will wait for a frame to be +dragged to add annotations.
  • +
  • Settings... Opens the settings dialog. The button labeled 'Defaults' +will revert all settings on all tabs to their default values. The button +labeled 'Defaults on current tab' will revert only the settings on the +current tab to their default values.
  • +
+ +

The current page can be changed by entering the desired page into +the text field in the edit tool bar, which can be focused using Ctrl+K, and +pressing the return key.

+ +

檢視

+ +
    +
  • Continuous Determines whether all rows of the page layout are visible +at once.
  • +
  • Two pages Determines whether the page layout uses two columns.
  • +
  • Two pages with cover page Determines whether the page layout uses two +columns with a break after the cover page.
  • +
  • Multiple pages Determines whether the page layout uses multiple +columns. The number of columns can be changed in the settings dialog.
  • +
  • Right to left Determines how pages are arranged in layouts with +multiple pages per row.
  • +
  • 放大 增加縮放係數百分之十。縮放係數的最大值是百分之 5000 。
  • +
  • 縮小 減少縮放係數百分之十。縮放係數的最小值是百分之 10 。
  • +
  • 原始大小 重設縮放係數到百分之 100 。
  • +
  • Fit to page width Determines the scale factor such that all pages +fully fit into the main view horizontally.
  • +
  • Fit to page size Determines the scale factor such that all pages +fully fit into the main view horizontally and vertically.
  • +
  • 向左旋轉 向左/逆時針旋轉頁面 90 度。
  • +
  • 向右旋轉 向右/順時針旋轉頁面 90 度。
  • +
  • Invert colors Determines whether pages are rendered with inverted +colors.
  • +
  • Convert to grayscale Determines whether pages are converted to +grayscale after rendering.
  • +
  • Trim margins Enables the removal of empty page margins after +rendering.
  • +
  • Composition Enables the composition of the rendered page with the +paper color to adjust the background of scanned documents.
  • +
  • 工具列 這個選單包含可用的能存取常用的動作的工具列的清單。
  • +
  • Docks This menu contains a list of available docks for displaying +supplementary information.
  • +
  • 字型... 開啟列出在這個文件中使用的字型的對話方塊。
  • +
  • Fullscreen Toggles the fullscreen mode, i.e. the window is shown +maximized and without decoration.
  • +
  • Presentation... Enters presentation mode which can be left by +pressing F12 or escape. The home/end key is used to display the first/last +page. Arrow keys right and down, space and the page down key jump to the +next page. Arrow keys left and up, backspace and the page up key jump to the +previous page. Pressing control and return jumps back to the page before the +last jump.
  • +
+ +

The scale factor can be changed by entering the desired percentage +into the text field in the view tool bar, which can be focused using Ctrl+L, +and pressing the return key.

+ +

Tabs

+ +
    +
  • Previous/Next tab Makes the previous/next tab the current tab. Cycles +to the last/first tab if the first/last tab is the current tab.
  • +
  • Close tab Closes the current tab.
  • +
  • Close all tabs Closes all tabs.
  • +
  • Close all tabs but current tab Closes all tabs except for the current +tab.
  • +
  • Recently closed Contains a list of the most recently closed tabs (if +enabled in the settings).
  • +
+ +

This menu contains a list of all tabs which can be made the current tab by +clicking on the corresponding menu item. Tabs can also be closed by +middle-clicking. The first nine tabs can also be activated by holding the +Alt modifier and pressing keys one to nine.

+ +

Bookmarks

+ +
    +
  • Previous bookmark Jumps to the closest bookmark before the current +page.
  • +
  • Next bookmark Jumps to the closest bookmark after the current page.
  • +
  • Add bookmark Adds a bookmark for the current file and page.
  • +
  • Remove bookmark Removes the bookmark for the current file and page.
  • +
  • Remove all bookmarks Removes all bookmarks.
  • +
  • Open Opens the corresponding file in the current tab. If there is no +tab, the file is opened in a new tab.
  • +
  • Open in new tab Opens the corresponding file in a new tab.
  • +
  • Jump to page Jumps to the corresponding page if the corresponding +file is already open. Otherwise the corresponding file is opened in a new +tab.
  • +
+ +

Help

+ +
    +
  • Contents Displays this document.
  • +
  • About Displays the program version.
  • +
+ +

Main view

+ +

The backspace/space key skips to the previous/next page. The home/end key +skips to the first/last page. The arrow, page up and page down keys scroll +the viewport. Pressing control and return jumps to the page before the last +jump.

+ +

Using the mouse wheel scrolls up and down. Holding ALT while using +the mouse wheel scrolls left and right. Holding CTRL while using the +mouse wheel scales the document. Holding SHIFT while using the mouse +wheel rotates the document. (Keyboard modifiers can be changed in the +settings dialog.) Click and hold the middle mouse button to select a +rectangle to zoom to.

+ +

Links are highlighted by red frames (if enabled in the settings). Left-click +on a link to show the linked page or open the linked URL in the default +browser (if enabled in the settings). Middle-click on a link to show the +linked page in a new tab. Hovering over a link displays its destination as a +tool tip.

+ +

Form fields are highlighted by blue frames (if enabled in the +settings). Left-click on a form field to edit its contents. Hovering over a +form field displays its name as a tool tip.

+ +

The source of a position in the document can be opened in the source editor +using the context menu which optionally contains an item for the first +matching SyncTeX node.

+ +

To copy texts or images, hold SHIFT, click and hold the left +mouse button to drag a frame around the area to copy. Once the mouse button +is released, a pop-up menu is displayed to select whether to copy texts or +images into the clipboard.

+ +

To add annotations, hold CTRL, click and hold the left mouse +button to drag a frame around the region to annotate. Once the mouse button +is released, a pop-up menu is displayed to select whether to add text or +highlight annotations. Left-click to edit annotations. Right-click +to remove annotations. (Adding and removing annotations requires +version 0.20.1 or higher of the Poppler library.) Hovering over an +annotation displays its contents as a tool tip.

+ +

To zoom to a selection, hold SHIFT and CTRL, click +and hold the left mouse button to drag a frame around region to zoom into.

+ +

The visibility of the tool and menu bars can be toggled using +configurable keyboard shortcuts whose default values are "Shift+Alt+T" and +"Shift+Alt+M".

+ +

Auxiliary views

+ +

The outline view displays an overview of the contents of the +document. A left click on an entry jumps to the respective page in the main +view. The context menu can be used to expand/collapse all items below the +selected item.

+ +

The outline view can also be navigated using the keyboard and the mouse +wheel. Holding Shift and using the Up/Down keys will scroll the +view. Holding Shift and using the Left/Right keys will collapse/expand one +level of items below the selected item. Holding Control and using the +Left/Right keys will completely collapse/expand the selected item and its +children. Holding Shift and using the mousel wheel will change the selected +item. Holding Control and using the mouse wheel will expand/collapse the +selected item.

+ +

The properties view displays additional information contained in +the document.

+ +

The thumbnails view displays smaller versions of the pages of the +document. A left click on an entry jumps to the respective page in the main +view.

+ +

The bookmarks view shows the bookmarks related to the document +displayed in the current tab. The context menu contains entries to jump to +the previous/next boookmark or to add bookmarks. The context menu of each +entry also contains entries to edit and delete bookmarks.

+ +

If enabled in the settings, the extended search dock shows an +overview containing the results of all searches being performed in all +tabs. It also shows the text surrounding a result with the search term being +emphasized. Clicking on a result opens the corresponding tab and jumps to +its position.

+ +

Settings

+ +

Behavior settings

+ +
    +
  • Open URL Determines whether links to URL are opened in the default +browser.
  • +
  • Auto-refresh Determines whether files are automatically reloaded if +changed on disk.
  • +
  • Track recently used If enabled, a recently used menu is available and +lists as many recently used files as set in the "Recently used count" +option. (Effective after restart.)
  • +
  • Keep recently closed If enabled, a recently closed menu is available +and lists as many recently closed tabs as set in the "Recently closed count" +option. Keeping the tabs available could increase memory usage +considerably. (Effective after restart.)
  • +
  • Restore tabs If enabled, tabs and their properties are saved on +ending the program and restored on restart.
  • +
  • Restore bookmarks If enabled, bookmarks are saved on ending the +program and restored on restart.
  • +
  • Restore per-file settings If enabled, per-file settings are +saved/restored on opening/closing tabs.
  • +
  • Save database interval The interval after which tabs, bookmarks or +per-file settings are saved to the database.
  • +
  • Synchronize presentation If enabled, the main view can be used to +control the presentation view.
  • +
  • Presentation screen The index of the screen to display the +presentation view on.
  • +
  • Synchronize outline view If enabled, the outline view will highlight +the first entry pointing to the current page whenever the current page +changes.
  • +
  • Minimal scrolling If enabled, the view port will only be scrolled if +the target position is not yet visible.
  • +
  • Zoom factor The number by which the scale factor is multiplied +resp. divided upon zooming in resp. out.
  • +
  • Highlight color Determines the color of highlights.
  • +
  • Highlight duration Determines the duration of temporary highlights.
  • +
  • Annotation color The color of annotations added by the program using +SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Source editor The program which is started to edit sources. '%1' is +replaced by the absolute file path. '%2' resp. '%3' is replaced by line +resp. column number.
  • +
+ +

Graphics settings

+ +
    +
  • Use tiling Pages will be divided into tiles before rendering and +caching to reduce memory usage.
  • +
  • Keep obsolete pixmaps If enabled, then upon change of the zoom +factor, cached pixmaps will be used to draw approximations of final pixmaps +until these are available at the cost of increased memory usage.
  • +
  • Use device pixel ratio If enabled, the highest available device pixel +ratio is used to render at physical and display at logical resolution.
  • +
  • Decorate pages Determines whether pages are set apart from the +background.
  • +
  • Decorate links Determines whether links are highlighted by red +frames.
  • +
  • Decorate form fields Determines whether form fields are highlighted +by blue frames.
  • +
  • Background color Determines the color of the background using SVG +color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Paper color Determines the color of pages using SVG color keywords or +hexadecimal notation '#rrggbb'.
  • +
  • Presentation background color Overrides the paper color in the +computation of the background color of the presentation view and is defined +using SVG color keywords or hexadecimal notation '#rrggbb'.
  • +
  • Pages per row Number of pages per row in the 'multiple pages' layout +mode.
  • +
  • Page spacing Determines both vertical and horizontal space displayed +between pages.
  • +
  • Thumbnail spacing Determines both vertical and horizontal space +displayed between thumbnails.
  • +
  • Thumbnail size Determines the size of the thumbnails.
  • +
  • Cache size The program will try to cache rendered pages within this +limit increasing rendering speed at the cost of increased memory usage.
  • +
  • Prefetch The program will try to render pages that are not yet +visible increasing rendering speed at the cost of increased cache usage.
  • +
  • Prefetch distance The number of rows beyond the current row and twice +the number of rows before the current row that are prefetched.
  • +
  • PDF settings +
      +
    • Antialiasing Improves display quality at the cost of performance
    • +
    • Text antialiasing Improves text display quality at the cost of +performance
    • +
    • Text hinting May improve text display quality for certain fonts.
    • +
    • Overprint preview If enabled, a preview of printing one layer of ink +on top of another is displayed.
    • +
    • Thin line mode Chooses the optimization used to draw thin lines.
    • +
    • Backend Chooses the backend used to render pages.
    • +
    +
  • +
  • PS settings +
      +
    • Graphics antialias bits Determines the amount of antialiasing for +graphics.
    • +
    • Text antialias bits Determines the amount of antialiasing for text.
    • +
    +
  • +
+ +

Interface settings

+ +
    +
  • Extended search dock If enabled, the default search dock is extended +by an overview showing the results of all tabs. (Effective after restart.)
  • +
  • Annotation overlay If enabled, all annotations on a page will be +displayed as an interactive overlay. Otherwise each annotation will be +handled as a separate pop-up window.
  • +
  • Form field overlay If enabled, all form fields on a page will be +displayed as an interactive overlay. Otherwise each form field will be +handled as a separate pop-up window.
  • +
  • Tab position Defines at which edge of the main view tabs will be +displayed.
  • +
  • Tab visibility Determines whether tabs will be displayed if less than +two documents are opened.
  • +
  • Spread tabs Determines if tabs will be spread out evenly over the +whole tab bar.
  • +
  • New tab next to current tab If enabled, new tabs are opened to the +right of the active tab.
  • +
  • Exit after last tab If enabled, the application exits after the last +tab is closed.
  • +
  • Recently used count Sets the number of files that are listed in the +recently used menu, if "Track recently used" is enabled. (Effective after +restart.)
  • +
  • Recently closed count Sets the number of tabs that are listed in the +recently closed menu, if "Keep recently closed" is enabled. (Effective after +restart.)
  • +
  • File tool bar Defines which actions are visible in the file tool +bar. Available actions are openInNewTab, open, refresh, saveCopy, saveAs, +print and separator. (Effective after restart.)
  • +
  • Edit tool bar Defines which actions are visible in the edit tool +bar. Available actions are currentPage, previousPage, nextPage, firstPage, +lastPage, jumpToPage, jumpBackward, jumpForward, search, +copyToClipboardMode, addAnnotationMode and separator. (Effective after +restart.)
  • +
  • View tool bar Defines which actions are visible in the view tool +bar. Available actions are scaleFactor, zoomIn, zoomOut, continuousMode, +twoPagesMode, twoPagesWithCoverPageMode, multiplePagesMode, originalSize, +fitToPageWidthMode, fitToPageSizeMode, rotateLeft, rotateRight, fullscreen, +presentation and separator. (Effective after restart.)
  • +
  • Document context menu Defines which actions are visible in the +document's context menu. Available actions are openCopyInNewTab, +openCopyInNewWindow, openContainingFolder, moveToInstance, previousPage, +nextPage, firstPage, lastPage, jumpToPage, jumpBackward, jumpForward, +setFirstPage, findPrevious, findNext, cancelSearch and separator.
  • +
  • Tab context menu Defines which actions are visible in a tab's context +menu. Available actions are openCopyInNewTab, openCopyInNewWindow, +openContainingFolder, moveToInstance, copyFilePath, selectFilePath, +closeAllTabs, closeAllTabsButThisOne, closeAllTabsToTheLeft, +closeAllTabsToTheRight and separator.
  • +
  • Scrollable menus Will override the default style so that pop-up menus +scroll instead being laid-out in mutliple columns if they are larger than +the available screen space. (Effective after restart.)
  • +
  • Searchable menus Extends the default keyboard navigation of the tabs +and bookmarks menus by a search-as-you-type mechanism.
  • +
  • Toggle tool and menu bars with fullscreen Always toggles the +visibility of the tool and menu bars when toggling fullscreen mode.
  • +
  • Use page label Determines if document-supplied page label will be +used instead of page numbers when available.
  • +
  • Document title as tab title Determines if the tab title as derived +from the meta-data instead of the file name.
  • +
  • Current page in window title If enabled, the current page and number +of pages of the document in the active tab are displayed in the window +title.
  • +
  • Instance name in window title If enabled and the current instance is +named, its name is displayed in the window title.
  • +
  • Highlight current thumbnail If enabled, the current page is +highlighted in the thumbnails view.
  • +
  • Limit thumbnails to results If this option is enabled and a search is +conducted, only the pages where the search term is found are displayed in +the thumbnails view.
  • +
+ +

Shortcut settings

+ +

The shortcut settings allows the adjustment of keyboard shortcuts to +personal preference. Shortcuts are changed by double-clicking on the +shortcut to edit it and entering the new shortcut. Each action can have +several shortcuts by entering a semicolon-separated list of them. Names of +keys that are not single letters are written out explicitly (e.g. "Alt", +"Ctrl", "PgDown"), where the matching is not case sensitive. If the shortcut +contains modifier keys, the names of the keys are joined by a plus sign and +modifier keys must be listed first, e.g. "Ctrl+A" or "Ctrl++".

+ +

Modifier settings

+ +
    +
  • Zoom The keyboard modifiers to zoom using the mouse wheel in the main +view.
  • +
  • Rotate The keyboard modifiers to rotate using the mouse wheel in the +main view.
  • +
  • Scroll The keyboard modifiers to scroll horizontally using the mouse +wheel in the main view.
  • +
  • Copy to clipboard The keyboard modifiers to copy texts or images from +a page to the clipboard.
  • +
  • Add annotation The keyboard modifiers to add annotations to a page.
  • +
  • Zoom to selection The keyboard modifiers to zoom to a slection on a +page.
  • +
+ + + + diff --git a/icons.qrc b/icons.qrc new file mode 100644 index 0000000..912f6c2 --- /dev/null +++ b/icons.qrc @@ -0,0 +1,41 @@ + + + icons/qpdfview.svg + icons/image-loading.svg + icons/image-missing.svg + icons/document-open.svg + icons/tab-new.svg + icons/folder.svg + icons/view-refresh.svg + icons/document-print.svg + icons/document-save.svg + icons/document-save-as.svg + icons/go-previous.svg + icons/go-next.svg + icons/go-first.svg + icons/go-last.svg + icons/go-jump.svg + icons/media-seek-backward.svg + icons/media-seek-forward.svg + icons/edit-find.svg + icons/go-up.svg + icons/go-down.svg + icons/process-stop.svg + icons/edit-copy.svg + icons/mail-attachment.svg + icons/continuous.svg + icons/two-pages.svg + icons/two-pages-with-cover-page.svg + icons/multiple-pages.svg + icons/right-to-left.svg + icons/zoom-in.svg + icons/zoom-out.svg + icons/zoom-original.svg + icons/fit-to-page-width.svg + icons/fit-to-page-size.svg + icons/object-rotate-left.svg + icons/object-rotate-right.svg + icons/view-fullscreen.svg + icons/x-office-presentation.svg + + diff --git a/icons/continuous.svg b/icons/continuous.svg new file mode 100644 index 0000000..333af87 --- /dev/null +++ b/icons/continuous.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/document-open.svg b/icons/document-open.svg new file mode 100644 index 0000000..d64f98a --- /dev/null +++ b/icons/document-open.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/document-print.svg b/icons/document-print.svg new file mode 100644 index 0000000..6396d22 --- /dev/null +++ b/icons/document-print.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/document-save-as.svg b/icons/document-save-as.svg new file mode 100644 index 0000000..32e4f56 --- /dev/null +++ b/icons/document-save-as.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/document-save.svg b/icons/document-save.svg new file mode 100644 index 0000000..5630a39 --- /dev/null +++ b/icons/document-save.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/edit-copy.svg b/icons/edit-copy.svg new file mode 100644 index 0000000..3a17068 --- /dev/null +++ b/icons/edit-copy.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/edit-find.svg b/icons/edit-find.svg new file mode 100644 index 0000000..06f15ec --- /dev/null +++ b/icons/edit-find.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/fit-to-page-size.svg b/icons/fit-to-page-size.svg new file mode 100644 index 0000000..d933584 --- /dev/null +++ b/icons/fit-to-page-size.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/fit-to-page-width.svg b/icons/fit-to-page-width.svg new file mode 100644 index 0000000..23d186a --- /dev/null +++ b/icons/fit-to-page-width.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/folder.svg b/icons/folder.svg new file mode 100644 index 0000000..321bb37 --- /dev/null +++ b/icons/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/go-down.svg b/icons/go-down.svg new file mode 100644 index 0000000..e6d670a --- /dev/null +++ b/icons/go-down.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-first.svg b/icons/go-first.svg new file mode 100644 index 0000000..4d44d13 --- /dev/null +++ b/icons/go-first.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-jump.svg b/icons/go-jump.svg new file mode 100644 index 0000000..0a9fd5c --- /dev/null +++ b/icons/go-jump.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-last.svg b/icons/go-last.svg new file mode 100644 index 0000000..416a4ba --- /dev/null +++ b/icons/go-last.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-next.svg b/icons/go-next.svg new file mode 100644 index 0000000..8f445a6 --- /dev/null +++ b/icons/go-next.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-previous.svg b/icons/go-previous.svg new file mode 100644 index 0000000..73645cd --- /dev/null +++ b/icons/go-previous.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/icons/go-up.svg b/icons/go-up.svg new file mode 100644 index 0000000..718bc73 --- /dev/null +++ b/icons/go-up.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/icons/image-loading.svg b/icons/image-loading.svg new file mode 100644 index 0000000..11d7092 --- /dev/null +++ b/icons/image-loading.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/image-missing.svg b/icons/image-missing.svg new file mode 100644 index 0000000..f09cd9b --- /dev/null +++ b/icons/image-missing.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/mail-attachment.svg b/icons/mail-attachment.svg new file mode 100644 index 0000000..39d0eff --- /dev/null +++ b/icons/mail-attachment.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/icons/media-seek-backward.svg b/icons/media-seek-backward.svg new file mode 100644 index 0000000..ab5f53a --- /dev/null +++ b/icons/media-seek-backward.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/media-seek-forward.svg b/icons/media-seek-forward.svg new file mode 100644 index 0000000..9cf05ae --- /dev/null +++ b/icons/media-seek-forward.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/multiple-pages.svg b/icons/multiple-pages.svg new file mode 100644 index 0000000..6f76abc --- /dev/null +++ b/icons/multiple-pages.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/object-rotate-left.svg b/icons/object-rotate-left.svg new file mode 100644 index 0000000..dc7119f --- /dev/null +++ b/icons/object-rotate-left.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/object-rotate-right.svg b/icons/object-rotate-right.svg new file mode 100644 index 0000000..7383240 --- /dev/null +++ b/icons/object-rotate-right.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/process-stop.svg b/icons/process-stop.svg new file mode 100644 index 0000000..ce15297 --- /dev/null +++ b/icons/process-stop.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/qpdfview.svg b/icons/qpdfview.svg new file mode 100644 index 0000000..1e939ee --- /dev/null +++ b/icons/qpdfview.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/qpdfview_os2.ico b/icons/qpdfview_os2.ico new file mode 100644 index 0000000000000000000000000000000000000000..ff13debd19841b36b1bcf7ec54333b55223edb7b GIT binary patch literal 7824 zcmeHLeQ+FQ8Q)}cWbgaP^&=nHy9sHN)RuN)KSSHJp;%iOpg^a5^n;e6wnfr5j1{Yf zGcyE?a8vJ(LsmGM#kqk6S7(J)7iXy}^8%}^vg%4#UE_kMb2!&FO2k?lpLh3mbGck+ z9A_B+AW!DKXW!@f?Yr;p`#!(lZu&QM5d`rm5`Mt0+1d)fbKox-CWsImcM&%cb?^r^ zIXO9%e>&>syC6&9{KbnGi^Za4S%pHuG|ltp&+EEgDwR}K6-6L$&xP6NEQpaVj4!# z)Jv98EEFtF)Y9!OF*88ta>K*JBO@b4J`w{HQMFi!j~Xup&ze zmmL@w(8ZjgYqG#)Gns;+nHoaOFg#W{d)!34DzlozAedHmP!>6)Niv%?#!IGYIIUO^c~%uUOBHeqBk_!-qw%7piVV*(GOS?s1e2qSun1DV zVCq8pfT1EOH*ClpJgP#m$a5^r+Jf6NbT%_03cRHVNKsUFRFhbm&dEALTvpRmU1n8@ z5z_+_eLPFkrez^j(D|&cYq`-ON#I~(85)wAVOAPGNYrTnyPSlhR%$Nc^V$*;NYMtFwlovQ6|;)y#0ac6)8FfG{-l?W&DPOu9ew2M$gQAR|GzzfNrId_ z2d82`1|BzTWA?A(F$>{7{s_gsvFza!)9xoeg8nSrb00ML=(cTMqQdIksN-WTF)xsa zR9M0b*2XI8Bm zx%1j5_dI-8C@>Qj41OkhB>jc%j;;5+aIpX9+n!(kKyhJHB`y}Dd~mZ=)PL8$r|CnT zS1(x5+3~~C&%VB)7S8XFM8CQ3{O1k!SsjsemsTS_{r@uG6{>0}2w`A+hcV73U_4jS}MJnf49xt!FvuR+*zdB)d zOFFu*?fdq#_g)Ow!2RR&|XF9%-zFYu&PC_t>c$cdh$M&zki=+0ai$qEt;>d+XvmdWRO?a_jvAe|mHC z8$W%|4>)Ht!=@?k1Ipjp{^;$m4gQ+>^zRxsg}?EuqbpjgaL#)8Tdz9#)Wls3;w@YYuW=GY~1SN!#tfB&1QES-D@hHq&u6bwFz(i#PdBI3uzZ4@Pda)DPuEkyDG9^^XzL%ANmu6`1r!e{FqE{C$}ovY`|k{7~C z)?zQEod>nUVu!-E)Y(c0LTAqc=Y5WP1wgy7bYbQ4gv-v`s@2#8nuR3`E0!l%<-8Az z6=)TfDy&oSSb$bwslZC%359cg%8x|?Gy+QmRtQfZ+&mTs z&;~3GSQ)DBkMd)(2d>9dZ!^6sFz)%7arKy;*X-DURCEb0`UYv>< zM_=6A(edutD$QR-iqx4hw!MJ{emQdFl2&|VQ&;+KbRUpSSCT} zupdO&4+?IupESVHIf6id(*Ps0V;>Mis!pO)Bn{0%DN^U5X(@6@f_@=IY7iUNQ)Fo( zMHY+{$wQoD!PBQ2(;7^{{(u7y8w2)2JZ67^;V-XLFoM_8*FcitKoi*#!~y~9NK#E_ z9=v0FgDW?o$id~S4?n(*!k;3L4@T1+FZ4hEK$G2%QU2(@Lkl|h9CP}0l>eQ9&d!d$ zXTxQ@f6Lgep7s3>!@~LgM_*$a!$(_fMvTMxQo&v+rw{q^D!F}kIlO*(Da!q+b+A8` JDwY7I`yYc*s;K|~ literal 0 HcmV?d00001 diff --git a/icons/qpdfview_os2.rc b/icons/qpdfview_os2.rc new file mode 100644 index 0000000..2717e35 --- /dev/null +++ b/icons/qpdfview_os2.rc @@ -0,0 +1 @@ +ICON 1 DISCARDABLE "qpdfview_os2.ico" diff --git a/icons/qpdfview_win32.ico b/icons/qpdfview_win32.ico new file mode 100644 index 0000000000000000000000000000000000000000..8e1774b875da77bd44b360253a90307b7da714ad GIT binary patch literal 8198 zcmeI1e{5S<6~|9vo4gnQY}_A-GsRYxHc3g^DD-F6Hf?EFHJ!G$Yt^m4+i9ikSlVWy zi~?f0NMw{1m8=O;K8iQbvqXCMl2r-zBuqWzkNG zQ5yC6v_!c~8e_-Ne?J8fm!Y8{8Xg`-oL~e0aw&n5G5C*uvqG3e%q^9OVD4woHU%F; zh<%m{@NpD#mjw8cO(PB%2jk|UOC$t}j~qciAxgu~XedCbsFzY=m{RdD#Ss6T7@-2z zavc4nB3{H)q9lCHV9YW2A_j*j3BQt2KlS(bW85HOfHjRr$&d9YV9Xr+kwQZ>iFFha zvmE?Pq2II+A}N zQhKaFiC6@_M=76*QxN+`fIoT6b8;+?`Vhq;ArjfX@}HqlFo1oK$Jk-SCPQ)W5v&(< z@FOcmu|^UVuzzFG2Y5fPh=7^iW>N5a065-}1`A7%by z55@vsN{<&X-z@ouPE$PSqmdDepGs0R9HM}41ThLwA{wHBfdQ;th(ZA$@*w7daqt@w zG4C1dpbh1i+0o#Z z=jW_qN}e};3UaBsI+k!-jny3NEDavBxxV2p)*Bm_*_k+_@n;5zWWCj0YpbiX8!QbC zF!S8iD4QvECbPMAHj__&dX~l5*4AdQ&vP`Io%NnwvlTPd&SbV*A+@tDk>~>}SMFW< zTZ7%+Snv6hTQyVdII{u6*VGvfUtHUJZprRfZr}D-qs`&2uP?VVRU0jJhV^T2@A__M z=fZ7P22E&TKJRY}TV6oa$QKx%~L?ZA-T-{^p81?X#x$XXS0S!>g|TxU>D)Wy^;5Y)YRJY!;#Ouv8Iw8&)e)zAG-4S zV=%j=wd2VCdrqynZ%TjY3jOgvc;0qm=i<#B3l`k_(6a4YdQ-2he7Ta{AKv-i(CRZ^ zfL+Jt?R&O-dG-C0L`R`WDuA`-WWAC@m-*?Sg!S0{m|NDRL_)d3w z({oJ=TG|({xPPg^Ha*T9AIxS>@-MAD(AV;%mLu=2n&>-itEpt?+O%ok=!HA>u6m?< z#p<7|S#Pk}xr%npu7$gM&d$Gc#{>O;erv;q08l3*zEsC z^TKjFHGZx|g0JxQ*I=f|4ef6F+b{p|7tM<0W%JYeQ%r8YSvO^N>}Zii_m`h8mF&=K z1)1I-$IdNH^cEHDbY1B~1v{-TJ!ke6>`J@QpFc`FcJSU%^nG<*pLfLvbv4Lv{Sv!J zkdGo~iOHz^SIHS_va&(V8HTd5UCrGe!+Zih_aZS)_aLoB(mCCTf+jPZKEvrVoIb

2>FV(-XF8u3soPzm_b6PBQ(UL*B5E_xmN}c@xJKDJV$U%#z?S)%UArn>U#gC& zXl-G{+#p{WvK~~;pjxuZNG%gJfLfjl)0-4Zt_34AL}rAn1G21_>A0p2Y|PM@k+BZO zs@}w)7);ENm=UoKOsd|(U>GdSP?(W$x!%g)7HrGVmXWOvwrYDBYQeM&X&KS#VCk%K zI2g?`m<7u+lw~Aau9qQ}F)R?45p0QGp;rc_U{Z#pj7W7LRmSId2BTn6hN6r_br99` z3_`)63_%%zmifo=3@X8t3@K%z)Ie5i&tMWP$xu=zNev`*Js=Vc$q-T|$f92MpJ(t0 zc4X)%ljAf!U{GU0MuJ7X;y;5x9qcOTWu4A`Xs?2wHor3HE7un(PDQD*_Bvo`59RtP zumhuVz1B|4|9AZjkV^xuDFc@j)IzOUSD&MJ?IU-Z;t&HH+uc-5uVaj5gXtz2^@b*NBY zY82}@hb-(i(Z|rPmML|L9sX)|Q?C<+!AhtA@VPA)q*-hSvu` zA}87l1^I+l%FwH)vsTuQVZE##!D_j9{>q + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/tab-new.svg b/icons/tab-new.svg new file mode 100644 index 0000000..ffe7039 --- /dev/null +++ b/icons/tab-new.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/two-pages-with-cover-page.svg b/icons/two-pages-with-cover-page.svg new file mode 100644 index 0000000..e19308d --- /dev/null +++ b/icons/two-pages-with-cover-page.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/two-pages.svg b/icons/two-pages.svg new file mode 100644 index 0000000..716ac86 --- /dev/null +++ b/icons/two-pages.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/view-fullscreen.svg b/icons/view-fullscreen.svg new file mode 100644 index 0000000..854fba0 --- /dev/null +++ b/icons/view-fullscreen.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/view-refresh.svg b/icons/view-refresh.svg new file mode 100644 index 0000000..249897e --- /dev/null +++ b/icons/view-refresh.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/x-office-presentation.svg b/icons/x-office-presentation.svg new file mode 100644 index 0000000..9b5bb28 --- /dev/null +++ b/icons/x-office-presentation.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/zoom-in.svg b/icons/zoom-in.svg new file mode 100644 index 0000000..b61cba7 --- /dev/null +++ b/icons/zoom-in.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/icons/zoom-original.svg b/icons/zoom-original.svg new file mode 100644 index 0000000..5c35a12 --- /dev/null +++ b/icons/zoom-original.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + +1:1 + diff --git a/icons/zoom-out.svg b/icons/zoom-out.svg new file mode 100644 index 0000000..edc31fa --- /dev/null +++ b/icons/zoom-out.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/image-plugin.pro b/image-plugin.pro new file mode 100644 index 0000000..3ac5caf --- /dev/null +++ b/image-plugin.pro @@ -0,0 +1,24 @@ +include(qpdfview.pri) + +TARGET = qpdfview_image +TEMPLATE = lib +CONFIG += plugin +static_image_plugin:CONFIG += static + +TARGET_SHORT = qpdfimg +!isEmpty(PLUGIN_DESTDIR): DESTDIR = $$PLUGIN_DESTDIR + +OBJECTS_DIR = objects-image +MOC_DIR = moc-image + +HEADERS = sources/model.h sources/imagemodel.h +SOURCES = sources/imagemodel.cpp + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +!static_image_plugin { + target.path = $${PLUGIN_INSTALL_PATH} + INSTALLS += target +} diff --git a/miscellaneous/qpdfview.1 b/miscellaneous/qpdfview.1 new file mode 100644 index 0000000..18c2ec5 --- /dev/null +++ b/miscellaneous/qpdfview.1 @@ -0,0 +1,184 @@ +.\" +.\" +.\" Copyright 2012-2013 Benjamin Eltzner +.\" Copyright 2012-2015 Adam Reichold +.\" Copyright 2012 Michał Trybus +.\" +.\" This file is part of qpdfview. +.\" +.\" qpdfview is free software: you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation, either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" qpdfview 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 qpdfview. If not, see . +.\" +.\" This file is additionally licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported (CC-BY-SA) license. The full text of the license can be found at https://creativecommons.org/licenses/by-sa/3.0/legalcode +.\" +.\" +.TH QPDFVIEW 1 "July 2012" +.SH NAME +qpdfview \- tabbed document viewer +.SH SYNOPSIS +.B qpdfview +.I [options] [--] [file[#page]] [file[#src:name:line:column]] ... +.SH DESCRIPTION +.B qpdfview +is a simple viewer for document files in the portable document format (PDF). It uses the Poppler library for rendering and the Qt toolkit for its interface. +.SH OPTIONS +.IP "\-\-help" +Displays usage information. +.IP "\-\-quiet" +Suppresses warning messages which are displayed if the program fails to open a file. +.IP "\-\-search text" +Initiates a search for +.I text +in the current tab. +.IP \-\-unique +If an instance of qpdfview is started with this option, any files that are opened using this option afterwards, are opened as tabs in the original window. If a file is already opened in a tab of the original window, it is merely reloaded. +.IP "\-\-instance name" +Uses +.I name +as the name of the instance contacted or created using the "\-\-unique" option. This allows one to run multiple instances and remotely open and refresh tabs in any of them by passing the instance name. The argument must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. +.IP "\-\-choose-instance" +Can be combined with the "\-\-unique" option to display a dialog at start-up where the instance name can be chosen with all instances that have tabs stored as suggestions. +.IP [file[#page]] +.I file +specifies the file to open. The optional parameter +.I page +opens the file at the given page. Multiple files will be opened in separate tabs. +.IP [file[#src:name:line:column]] +Forward search using SyncTeX is performed using the optional parameters +.I name +which is the name of the source file, +.I line +which is the line number in the source file and +.I column +which is the column number in the source file where the number 0 matches all lines respectively columns. +.SH INTER-PROCESS COMMUNICATION +If the program is invoked using the "\-\-unique" option, it registers an introspectable D-Bus interface at "local.qpdfview/MainWindow" which can be used to communicate with the application. If the "\-\-instance" option is used, the D-Bus interface is registered at "local.qpdfview.name/MainWindow". +.SH CONFIGURATION FILES +qpdfview uses configuration files usually located at +.RS +"~/.config/qpdfview" +.RE +with the majority of settings contained in "qpdfview.conf". + +Persitent state like per-file settings, bookmarks and tabs is stored in an SQLite database usually located at +.RS +"~/.local/share/data/qpdfview/qpdfview". +.RE + +The icon theme used by Qt can be changed by setting the key "iconTheme" in the section "mainWindow". The application-wide Qt style sheet can be changed by setting the key "styleSheet" in the section "mainWindow". + +The tile size in pixels used for tiled rendering can be adjusted by setting the key "tileSize" in the section "pageItem". The default value is 1024 pixels. + +The mimimum resp. maximum scale factor can be modified by changing the keys "minimumScaleFactor" resp. "maximumScaleFactor" in the section "documentView". The default values are 0.1 resp. 10.0. + +The timeout for auto-refresh resp. prefetch can be changed by setting the keys "autoRefreshTimeout" resp. "prefetchTimeout" in the section "documentView". The defaults are 750 resp. 250 milliseconds. + +The maximum number of per-file settings can be modified by changing the key "perFileSettingsLimit" in the section "mainWindow". The default value is 1000. +.SH EXAMPLES +.RS +The command +.RE +.B qpdfview foo.pdf#3 bar.pdf +.RS +opens "foo.pdf" in the first tab displaying the third page of the document and "bar.pdf" in the second tab displaying the beginning of the document. + +The command +.RE +.B qpdfview \-\-quiet foobar/* +.RS +opens all files that can be opened in the directory "foobar", suppressing warning messages for files that cannot be opened. + +The command +.RE +.B qpdfview \-\-search foo bar.pdf +.RS +opens "bar.pdf" in the first tab and starts a search for "foo". + +Subsequent execution of the commands +.RE +.B qpdfview \-\-unique foo.pdf bar.pdf +.RS +and +.RE +.B qpdfview \-\-unique foo.pdf#5 +.RS +opens "foo.pdf" and "bar.pdf", then reloads "foo.pdf" and displays its fifth page. + +Subsequent execution of the commands +.RE +.B qpdfview \-\-unique foo.pdf +.RS +and +.RE +.B qpdfview bar.pdf +.RS +and +.RE +.B qpdfview \-\-unique foo1.pdf bar1.pdf +.RS +opens "foo.pdf" in the first window, "bar.pdf" in a second window and then "foo1.pdf" and "bar1.pdf" in additional tabs in the first window. + +Subsequent execution of the commands +.RE +.B qpdfview \-\-unique \-\-instance a foo1.pdf bar1.pdf +.RS +and +.RE +.B qpdfview \-\-unique \-\-instance b foo2.pdf bar2.pdf +.RS +and +.RE +.B qpdfview \-\-unique foo3.pdf bar3.pdf +.RS +and +.RE +.B qpdfview \-\-unique \-\-instance a foo1.pdf#4 bar4.pdf +.RS +opens "foo1.pdf" and "bar1.pdf" in the first window, "foo2.pdf" and "bar2.pdf" in the second window, "foo3.pdf" and "bar3.pdf" in the third window and then reloads "foo1.pdf" and displays its fourth page and opens "bar4.pdf" in an additional tab in the first window. + +Subsequent execution of the commands +.RE +.B qpdfview \-\-unique \-\-instance a foo.pdf bar.pdf +.RS +and +.RE +.B qpdfview \-\-unique \-\-instance a \-\-search "foobar" +.RS +opens "foo.pdf" and "bar.pdf" in a window and then starts a search for the term "foobar" in the document in the active tab (which is the last opened "bar.pdf"). + +The command +.RE +.B qpdfview \-\-unique foobar.pdf#src:foobar.tex:42:0 +.RS +opens or refreshes "foobar.pdf" jumping to and highlighting the position that corresponds to line 42 of the source file "foobar.tex". + +The lines +.RE +.B [documentView] +.RS +.RE +.B autoRefreshTimeout=1250 +.RS +.RE +.B [mainWindow] +.RS +.RE +.B styleSheet="QTabBar::tab { max-width: 150px; }" +.RS +will configure the auto-refresh timeout to 1250 milliseconds and the change the maximum tab width to 150 pixel. + +.SH BUGS +If you find a bug, please report it at +.RS +"https://launchpad.net/qpdfview". +.RE diff --git a/miscellaneous/qpdfview.appdata.xml b/miscellaneous/qpdfview.appdata.xml new file mode 100644 index 0000000..8003386 --- /dev/null +++ b/miscellaneous/qpdfview.appdata.xml @@ -0,0 +1,39 @@ + + + + qpdfview.desktop + CC0-1.0 + GPL-2.0+ + qpdfview +

tabbed document viewer + +

+ qpdfview is a simple tabbed document viewer which uses the Poppler library for PDF rendering and CUPS for printing and provides a clear and simple Qt graphical user interface. Support for the DjVu and PostScript formats can be added via plugins. +

+

+ The current feature set includes: +

+
    +
  • Outline, properties and thumbnail panes
  • +
  • Scale, rotate and fit
  • +
  • Fullscreen and presentation views
  • +
  • Continuous and multi-page layouts
  • +
  • Persistent per-file settings
  • +
  • Configurable keyboard shortcuts
  • +
  • Configurable tool bars
  • +
  • Support for DjVu and PostScript documents via plug-ins
  • +
  • Search for text (PDF and DjVu only)
  • +
  • SyncTeX support (PDF only)
  • +
  • Partial annotation support (PDF only, Poppler version 0.20.1 or newer)
  • +
  • Partial form support (PDF only)
  • +
+
+ + http://screenshots.debian.net/image/13652_large.png + http://screenshots.debian.net/screenshots/q/qpdfview/13653_large.png + http://screenshots.debian.net/screenshots/q/qpdfview/9701_large.png + http://screenshots.debian.net/screenshots/q/qpdfview/9399_large.png + + https://launchpad.net/qpdfview + qpdfview@lists.launchpad.net + diff --git a/miscellaneous/qpdfview.desktop.in b/miscellaneous/qpdfview.desktop.in new file mode 100644 index 0000000..d20c763 --- /dev/null +++ b/miscellaneous/qpdfview.desktop.in @@ -0,0 +1,21 @@ +[Desktop Entry] +Type=Application +Terminal=false +Name=qpdfview +Icon=qpdfview +GenericName=tabbed document viewer +Comment=A tabbed document viewer using Qt and the Poppler library. +Categories=Viewer;Office; +Keywords=viewer;document;presentation;pdf;ps;djvu; +TryExec=qpdfview +Exec=qpdfview --unique %F +MimeType=MIME_TYPES +Actions=ChooseInstance;NonUniqueInstance; + +[Desktop Action ChooseInstance] +Name=Choose instance +Exec=qpdfview --unique --choose-instance %F + +[Desktop Action NonUniqueInstance] +Name=Non-unique instance +Exec=qpdfview %F diff --git a/pdf-plugin.pro b/pdf-plugin.pro new file mode 100644 index 0000000..1dd5e53 --- /dev/null +++ b/pdf-plugin.pro @@ -0,0 +1,44 @@ +include(qpdfview.pri) + +TARGET = qpdfview_pdf +TEMPLATE = lib +CONFIG += plugin +static_pdf_plugin:CONFIG += static + +TARGET_SHORT = qpdfpdf +!isEmpty(PLUGIN_DESTDIR): DESTDIR = $$PLUGIN_DESTDIR + +OBJECTS_DIR = objects-pdf +MOC_DIR = moc-pdf + +HEADERS = sources/model.h sources/pdfmodel.h sources/annotationwidgets.h sources/formfieldwidgets.h +SOURCES = sources/pdfmodel.cpp sources/annotationwidgets.cpp sources/formfieldwidgets.cpp + +QT += core xml gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +!without_pkgconfig { + poppler_qt_pkg = poppler-qt$${QT_MAJOR_VERSION} + + system(pkg-config --atleast-version=0.14 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_14 + system(pkg-config --atleast-version=0.18 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_18 + system(pkg-config --atleast-version=0.20.1 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_20 + system(pkg-config --atleast-version=0.22 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_22 + system(pkg-config --atleast-version=0.24 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_24 + system(pkg-config --atleast-version=0.26 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_26 + system(pkg-config --atleast-version=0.31 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_31 + system(pkg-config --atleast-version=0.35 $${poppler_qt_pkg}):DEFINES += HAS_POPPLER_35 + + CONFIG += link_pkgconfig + PKGCONFIG += $${poppler_qt_pkg} +} else { + DEFINES += $$PDF_PLUGIN_DEFINES + INCLUDEPATH += $$PDF_PLUGIN_INCLUDEPATH + LIBS += $$PDF_PLUGIN_LIBS +} + +!static_pdf_plugin { + target.path = $${PLUGIN_INSTALL_PATH} + INSTALLS += target +} diff --git a/ps-plugin.pro b/ps-plugin.pro new file mode 100644 index 0000000..185acf7 --- /dev/null +++ b/ps-plugin.pro @@ -0,0 +1,33 @@ +include(qpdfview.pri) + +TARGET = qpdfview_ps +TEMPLATE = lib +CONFIG += plugin +static_ps_plugin:CONFIG += static + +TARGET_SHORT = qpdfps +!isEmpty(PLUGIN_DESTDIR): DESTDIR = $$PLUGIN_DESTDIR + +OBJECTS_DIR = objects-ps +MOC_DIR = moc-ps + +HEADERS = sources/model.h sources/psmodel.h +SOURCES = sources/psmodel.cpp + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +!without_pkgconfig { + CONFIG += link_pkgconfig + PKGCONFIG += libspectre +} else { + DEFINES += $$PS_PLUGIN_DEFINES + INCLUDEPATH += $$PS_PLUGIN_INCLUDEPATH + LIBS += $$PS_PLUGIN_LIBS +} + +!static_ps_plugin { + target.path = $${PLUGIN_INSTALL_PATH} + INSTALLS += target +} diff --git a/qpdfview.pri b/qpdfview.pri new file mode 100644 index 0000000..6dbd353 --- /dev/null +++ b/qpdfview.pri @@ -0,0 +1,12 @@ +isEmpty(APPLICATION_VERSION):APPLICATION_VERSION = 0.4.18 + +isEmpty(TARGET_INSTALL_PATH):TARGET_INSTALL_PATH = /usr/bin +isEmpty(PLUGIN_INSTALL_PATH):PLUGIN_INSTALL_PATH = /usr/lib/qpdfview +isEmpty(DATA_INSTALL_PATH):DATA_INSTALL_PATH = /usr/share/qpdfview +isEmpty(MANUAL_INSTALL_PATH):MANUAL_INSTALL_PATH = /usr/share/man/man1 +isEmpty(ICON_INSTALL_PATH):ICON_INSTALL_PATH = /usr/share/icons/hicolor/scalable/apps +isEmpty(LAUNCHER_INSTALL_PATH):LAUNCHER_INSTALL_PATH = /usr/share/applications +isEmpty(APPDATA_INSTALL_PATH):APPDATA_INSTALL_PATH = /usr/share/appdata + +win32:include(qpdfview_win32.pri) +os2:include(qpdfview_os2.pri) diff --git a/qpdfview.pro b/qpdfview.pro new file mode 100644 index 0000000..b9c112f --- /dev/null +++ b/qpdfview.pro @@ -0,0 +1,73 @@ +include(qpdfview.pri) + +TEMPLATE = subdirs +CONFIG += ordered + +!without_pdf { + SUBDIRS += pdf-plugin.pro + application.pro.depends = pdf-plugin.pro +} + +!without_ps { + SUBDIRS += ps-plugin.pro + application.pro.depends = ps-plugin.pro +} + +!without_djvu { + SUBDIRS += djvu-plugin.pro + application.pro.depends = djvu-plugin.pro +} + +with_fitz { + SUBDIRS += fitz-plugin.pro + application.pro.depends = fitz-plugin.pro +} + +!without_image { + SUBDIRS += image-plugin.pro + application.pro.depends = image-plugin.pro +} + +SUBDIRS += application.pro + +TRANSLATIONS += \ + translations/qpdfview_ast.ts \ + translations/qpdfview_az.ts \ + translations/qpdfview_be.ts \ + translations/qpdfview_bg.ts \ + translations/qpdfview_bs.ts \ + translations/qpdfview_ca.ts \ + translations/qpdfview_cs.ts \ + translations/qpdfview_da.ts \ + translations/qpdfview_de.ts \ + translations/qpdfview_el.ts \ + translations/qpdfview_en_GB.ts \ + translations/qpdfview_eo.ts \ + translations/qpdfview_es.ts \ + translations/qpdfview_eu.ts \ + translations/qpdfview_fi.ts \ + translations/qpdfview_fr.ts \ + translations/qpdfview_gl.ts \ + translations/qpdfview_he.ts \ + translations/qpdfview_hr.ts \ + translations/qpdfview_hu.ts \ + translations/qpdfview_id.ts \ + translations/qpdfview_it.ts \ + translations/qpdfview_kk.ts \ + translations/qpdfview_ky.ts \ + translations/qpdfview_lt.ts \ + translations/qpdfview_ms.ts \ + translations/qpdfview_my.ts \ + translations/qpdfview_pl.ts \ + translations/qpdfview_pt.ts \ + translations/qpdfview_pt_BR.ts \ + translations/qpdfview_ro.ts \ + translations/qpdfview_ru.ts \ + translations/qpdfview_sk.ts \ + translations/qpdfview_sv.ts \ + translations/qpdfview_th.ts \ + translations/qpdfview_tr.ts \ + translations/qpdfview_ug.ts \ + translations/qpdfview_uk.ts \ + translations/qpdfview_vi.ts \ + translations/qpdfview_zh_CN.ts diff --git a/sources/annotationwidgets.cpp b/sources/annotationwidgets.cpp new file mode 100644 index 0000000..e36b921 --- /dev/null +++ b/sources/annotationwidgets.cpp @@ -0,0 +1,187 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "annotationwidgets.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#else + +#include + +#endif // QT_VERSION + +#include + +#ifndef HAS_POPPLER_24 + +#define LOCK_ANNOTATION QMutexLocker mutexLocker(m_mutex); + +#else + +#define LOCK_ANNOTATION + +#endif // HAS_POPPLER_24 + +namespace +{ + +bool hideOnEscape(QWidget* widget, QKeyEvent* event) +{ + if(event->key() == Qt::Key_Escape) + { + widget->hide(); + + event->accept(); + return true; + } + + return false; +} + +} // anonymous + +namespace qpdfview +{ + +AnnotationWidget::AnnotationWidget(QMutex* mutex, Poppler::Annotation* annotation, QWidget* parent) : QPlainTextEdit(parent), + m_mutex(mutex), + m_annotation(annotation) +{ + LOCK_ANNOTATION + + setTabChangesFocus(true); + setPlainText(m_annotation->contents()); + + connect(this, SIGNAL(textChanged()), SLOT(on_textChanged())); + connect(this, SIGNAL(textChanged()), SIGNAL(wasModified())); + + moveCursor(QTextCursor::End); +} + +void AnnotationWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QPlainTextEdit::keyPressEvent(event); + } +} + +void AnnotationWidget::on_textChanged() +{ + LOCK_ANNOTATION + + m_annotation->setContents(toPlainText()); +} + + +FileAttachmentAnnotationWidget::FileAttachmentAnnotationWidget(QMutex* mutex, Poppler::FileAttachmentAnnotation* annotation, QWidget* parent) : QToolButton(parent), + m_mutex(mutex), + m_annotation(annotation) +{ + m_menu = new QMenu(this); + m_saveAction = m_menu->addAction(tr("Save...")); + m_saveAndOpenAction = m_menu->addAction(tr("Save and open...")); + + setMenu(m_menu); + setPopupMode(QToolButton::InstantPopup); + setIcon(QIcon::fromTheme(QLatin1String("mail-attachment"), QIcon(QLatin1String(":icons/mail-attachment")))); + + connect(m_menu, SIGNAL(aboutToShow()), SLOT(on_aboutToShow())); + connect(m_menu, SIGNAL(aboutToHide()), SLOT(on_aboutToHide())); + + connect(m_saveAction, SIGNAL(triggered()), SLOT(on_save_triggered())); + connect(m_saveAndOpenAction, SIGNAL(triggered()), SLOT(on_saveAndOpen_triggered())); +} + +void FileAttachmentAnnotationWidget::keyPressEvent(QKeyEvent *event) +{ + if(!hideOnEscape(this, event)) + { + QToolButton::keyPressEvent(event); + } +} + +void FileAttachmentAnnotationWidget::on_aboutToShow() +{ + graphicsProxyWidget()->setZValue(1.0); +} + +void FileAttachmentAnnotationWidget::on_aboutToHide() +{ + graphicsProxyWidget()->setZValue(0.0); +} + +void FileAttachmentAnnotationWidget::on_save_triggered() +{ + save(false); +} + +void FileAttachmentAnnotationWidget::on_saveAndOpen_triggered() +{ + save(true); +} + +void FileAttachmentAnnotationWidget::save(bool open) +{ + LOCK_ANNOTATION + + Poppler::EmbeddedFile* embeddedFile = m_annotation->embeddedFile(); + + QString filePath = QFileDialog::getSaveFileName(0, tr("Save file attachment"), embeddedFile->name()); + + if(!filePath.isEmpty()) + { + QFile file(filePath); + + if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + file.write(embeddedFile->data()); + + file.close(); + + if(open) + { + if(!QDesktopServices::openUrl(QUrl::fromLocalFile(filePath))) + { + QMessageBox::warning(0, tr("Warning"), tr("Could not open file attachment saved to '%1'.").arg(filePath)); + } + } + } + else + { + QMessageBox::warning(0, tr("Warning"), tr("Could not save file attachment to '%1'.").arg(filePath)); + } + } +} + +} // qpdfview diff --git a/sources/annotationwidgets.h b/sources/annotationwidgets.h new file mode 100644 index 0000000..20a3fb4 --- /dev/null +++ b/sources/annotationwidgets.h @@ -0,0 +1,97 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef ANNOTATIONWIDGETS_H +#define ANNOTATIONWIDGETS_H + +#include +#include + +class QMutex; + +namespace Poppler +{ +class Annotation; +class FileAttachmentAnnotation; +} + +namespace qpdfview +{ + +class AnnotationWidget : public QPlainTextEdit +{ + Q_OBJECT + +public: + AnnotationWidget(QMutex* mutex, Poppler::Annotation* annotation, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_textChanged(); + +private: + Q_DISABLE_COPY(AnnotationWidget) + + QMutex* m_mutex; + Poppler::Annotation* m_annotation; + +}; + + +class FileAttachmentAnnotationWidget : public QToolButton +{ + Q_OBJECT + +public: + FileAttachmentAnnotationWidget(QMutex* mutex, Poppler::FileAttachmentAnnotation* annotation, QWidget* parent = 0); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_aboutToShow(); + void on_aboutToHide(); + + void on_save_triggered(); + void on_saveAndOpen_triggered(); + +private: + Q_DISABLE_COPY(FileAttachmentAnnotationWidget) + + QMutex* m_mutex; + Poppler::FileAttachmentAnnotation* m_annotation; + + void save(bool open = false); + + QMenu* m_menu; + QAction* m_saveAction; + QAction* m_saveAndOpenAction; + +}; + +} // qpdfview + +#endif // ANNOTATIONWIDGETS_H diff --git a/sources/bookmarkdialog.cpp b/sources/bookmarkdialog.cpp new file mode 100644 index 0000000..fecd4ca --- /dev/null +++ b/sources/bookmarkdialog.cpp @@ -0,0 +1,88 @@ +/* + +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "bookmarkdialog.h" + +#include +#include +#include +#include +#include + +#include "global.h" +#include "bookmarkmodel.h" + +namespace qpdfview +{ + +BookmarkDialog::BookmarkDialog(BookmarkItem& bookmark, QWidget* parent) : QDialog(parent), + m_bookmark(bookmark) +{ + setWindowTitle(tr("Bookmark")); + + QFormLayout* formLayout = new QFormLayout(this); + setLayout(formLayout); + + m_pageEdit = new QLineEdit(this); + m_pageEdit->setReadOnly(true); + m_pageEdit->setText(QString::number(m_bookmark.page)); + + formLayout->addRow(tr("Page:"), m_pageEdit); + + m_labelEdit = new QLineEdit(this); + m_labelEdit->setText(m_bookmark.label); + + formLayout->addRow(tr("Label:"), m_labelEdit); + + m_commentEdit = new QTextEdit(this); + m_commentEdit->setPlainText(m_bookmark.comment); + + formLayout->addRow(tr("Comment:"), m_commentEdit); + + m_modifiedEdit = new QLineEdit(this); + m_modifiedEdit->setReadOnly(true); + m_modifiedEdit->setText(m_bookmark.modified.toString(Qt::SystemLocaleLongDate)); + + formLayout->addRow(tr("Modified:"), m_modifiedEdit); + + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); + connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject())); + + formLayout->addWidget(m_dialogButtonBox); +} + +void BookmarkDialog::accept() +{ + QDialog::accept(); + + m_bookmark.label = m_labelEdit->text(); + m_bookmark.comment = m_commentEdit->toPlainText(); + + m_bookmark.modified = QDateTime::currentDateTime(); +} + +void BookmarkDialog::showEvent(QShowEvent*) +{ + m_labelEdit->setFocus(); +} + +} // qpdfview diff --git a/sources/bookmarkdialog.h b/sources/bookmarkdialog.h new file mode 100644 index 0000000..f5cc640 --- /dev/null +++ b/sources/bookmarkdialog.h @@ -0,0 +1,65 @@ +/* + +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef BOOKMARKDIALOG_H +#define BOOKMARKDIALOG_H + +#include + +class QDialogButtonBox; +class QLineEdit; +class QTextEdit; + +namespace qpdfview +{ + +struct BookmarkItem; + +class BookmarkDialog : public QDialog +{ + Q_OBJECT + +public: + BookmarkDialog(BookmarkItem& bookmark, QWidget* parent = 0); + +public slots: + void accept(); + +protected: + void showEvent(QShowEvent*); + +private: + Q_DISABLE_COPY(BookmarkDialog) + + BookmarkItem& m_bookmark; + + QLineEdit* m_pageEdit; + QLineEdit* m_labelEdit; + QTextEdit* m_commentEdit; + QLineEdit* m_modifiedEdit; + + QDialogButtonBox* m_dialogButtonBox; + +}; + +} // qpdfview + +#endif // BOOKMARKDIALOG_H diff --git a/sources/bookmarkmenu.cpp b/sources/bookmarkmenu.cpp new file mode 100644 index 0000000..6728a25 --- /dev/null +++ b/sources/bookmarkmenu.cpp @@ -0,0 +1,122 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "bookmarkmenu.h" + +#include "miscellaneous.h" + +#include + +namespace qpdfview +{ + +BookmarkMenu::BookmarkMenu(const QFileInfo& fileInfo, QWidget* parent) : QMenu(parent) +{ + QAction* const action = menuAction(); + + action->setText(fileInfo.completeBaseName()); + action->setToolTip(fileInfo.absoluteFilePath()); + + action->setData(fileInfo.absoluteFilePath()); + + m_openAction = addAction(tr("&Open")); + m_openAction->setIcon(loadIconWithFallback(QLatin1String("document-open"))); + m_openAction->setIconVisibleInMenu(true); + connect(m_openAction, SIGNAL(triggered()), SLOT(on_open_triggered())); + + m_openInNewTabAction = addAction(tr("Open in new &tab")); + m_openInNewTabAction->setIcon(loadIconWithFallback(QLatin1String("tab-new"))); + m_openInNewTabAction->setIconVisibleInMenu(true); + connect(m_openInNewTabAction, SIGNAL(triggered()), SLOT(on_openInNewTab_triggered())); + + m_jumpToPageActionGroup = new QActionGroup(this); + connect(m_jumpToPageActionGroup, SIGNAL(triggered(QAction*)), SLOT(on_jumpToPage_triggered(QAction*))); + + m_separatorAction = addSeparator(); + + m_removeBookmarkAction = addAction(tr("&Remove bookmark")); + connect(m_removeBookmarkAction, SIGNAL(triggered()), SLOT(on_removeBookmark_triggered())); +} + +void BookmarkMenu::addJumpToPageAction(int page, const QString& label) +{ + QAction* before = m_separatorAction; + + foreach(QAction* action, m_jumpToPageActionGroup->actions()) + { + if(action->data().toInt() == page) + { + action->setText(label); + + return; + } + else if(action->data().toInt() > page) + { + before = action; + + break; + } + } + + QAction* action = new QAction(label, this); + action->setIcon(loadIconWithFallback(QLatin1String("go-jump"))); + action->setIconVisibleInMenu(true); + action->setData(page); + + insertAction(before, action); + m_jumpToPageActionGroup->addAction(action); +} + +void BookmarkMenu::removeJumpToPageAction(int page) +{ + foreach(QAction* action, m_jumpToPageActionGroup->actions()) + { + if(action->data().toInt() == page) + { + delete action; + + break; + } + } +} + +void BookmarkMenu::on_open_triggered() +{ + emit openTriggered(absoluteFilePath()); +} + +void BookmarkMenu::on_openInNewTab_triggered() +{ + emit openInNewTabTriggered(absoluteFilePath()); +} + +void BookmarkMenu::on_jumpToPage_triggered(QAction* action) +{ + emit jumpToPageTriggered(absoluteFilePath(), action->data().toInt()); +} + +void BookmarkMenu::on_removeBookmark_triggered() +{ + emit removeBookmarkTriggered(absoluteFilePath()); +} + +} // qpdfview diff --git a/sources/bookmarkmenu.h b/sources/bookmarkmenu.h new file mode 100644 index 0000000..7ae6123 --- /dev/null +++ b/sources/bookmarkmenu.h @@ -0,0 +1,74 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef BOOKMARKMENU_H +#define BOOKMARKMENU_H + +#include + +#include + +class QFileInfo; + +#include "global.h" + +namespace qpdfview +{ + +class BookmarkMenu : public QMenu +{ + Q_OBJECT + +public: + BookmarkMenu(const QFileInfo& fileInfo, QWidget* parent = 0); + + QString absoluteFilePath() const { return menuAction()->data().toString(); } + + void addJumpToPageAction(int page, const QString& label); + void removeJumpToPageAction(int page); + +signals: + void openTriggered(const QString& filePath); + void openInNewTabTriggered(const QString& filePath); + void jumpToPageTriggered(const QString& filePath, int page); + void removeBookmarkTriggered(const QString& filePath); + +protected slots: + void on_open_triggered(); + void on_openInNewTab_triggered(); + void on_jumpToPage_triggered(QAction* action); + void on_removeBookmark_triggered(); + +private: + Q_DISABLE_COPY(BookmarkMenu) + + QAction* m_openAction; + QAction* m_openInNewTabAction; + QActionGroup* m_jumpToPageActionGroup; + QAction* m_separatorAction; + QAction* m_removeBookmarkAction; + +}; + +} // qpdfview + +#endif // BOOKMARKMENU_H diff --git a/sources/bookmarkmodel.cpp b/sources/bookmarkmodel.cpp new file mode 100644 index 0000000..0f37b32 --- /dev/null +++ b/sources/bookmarkmodel.cpp @@ -0,0 +1,160 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2014-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "bookmarkmodel.h" + +#include + +namespace qpdfview +{ + +static inline bool operator<(int page, const BookmarkItem& bookmark) { return page < bookmark.page; } +static inline bool operator<(const BookmarkItem& bookmark, int page) { return bookmark.page < page; } + +QHash< QString, BookmarkModel* > BookmarkModel::s_instances; + +BookmarkModel* BookmarkModel::fromPath(const QString& path, bool create) +{ + BookmarkModel* model = s_instances.value(path, 0); + + if(create && model == 0) + { + model = new BookmarkModel(qApp); + + s_instances.insert(path, model); + } + + return model; +} + +QList< QString > BookmarkModel::paths() +{ + return s_instances.keys(); +} + +void BookmarkModel::removePath(const QString& path) +{ + delete s_instances.take(path); +} + +void BookmarkModel::removeAllPaths() +{ + qDeleteAll(s_instances); + s_instances.clear(); +} + +void BookmarkModel::addBookmark(const BookmarkItem& bookmark) +{ + const QVector< BookmarkItem >::iterator at = qLowerBound(m_bookmarks.begin(), m_bookmarks.end(), bookmark.page); + const int row = at - m_bookmarks.begin(); + + if(at != m_bookmarks.end() && at->page == bookmark.page) + { + *at = bookmark; + + emit dataChanged(createIndex(row, 0), createIndex(row, 1)); + } + else + { + beginInsertRows(QModelIndex(), row, row); + + m_bookmarks.insert(at, bookmark); + + endInsertRows(); + } +} + +void BookmarkModel::removeBookmark(const BookmarkItem& bookmark) +{ + const QVector< BookmarkItem >::iterator at = qBinaryFind(m_bookmarks.begin(), m_bookmarks.end(), bookmark.page); + const int row = at - m_bookmarks.begin(); + + if(at != m_bookmarks.end()) + { + beginRemoveRows(QModelIndex(), row, row); + + m_bookmarks.erase(at); + + endRemoveRows(); + } +} + +void BookmarkModel::findBookmark(BookmarkItem& bookmark) const +{ + const QVector< BookmarkItem >::const_iterator at = qBinaryFind(m_bookmarks.constBegin(), m_bookmarks.constEnd(), bookmark.page); + + if(at != m_bookmarks.constEnd()) + { + bookmark = *at; + } +} + +Qt::ItemFlags BookmarkModel::flags(const QModelIndex&) const +{ + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +int BookmarkModel::columnCount(const QModelIndex&) const +{ + return 2; +} + +int BookmarkModel::rowCount(const QModelIndex& parent) const +{ + return !parent.isValid() ? m_bookmarks.count() : 0; +} + +QVariant BookmarkModel::data(const QModelIndex& index, int role) const +{ + if(!index.isValid() || index.row() >= m_bookmarks.count()) + { + return QVariant(); + } + + const BookmarkItem& bookmark = m_bookmarks.at(index.row()); + + switch(role) + { + default: + return QVariant(); + case PageRole: + return bookmark.page; + case LabelRole: + case Qt::DisplayRole: + return index.column() == 0 ? bookmark.label : QString::number(bookmark.page); + case CommentRole: + return bookmark.comment; + case Qt::ToolTipRole: + return QString("

%1

").arg(bookmark.comment); + case ModifiedRole: + return bookmark.modified; + case Qt::TextAlignmentRole: + return index.column() == 0 ? Qt::AlignLeft : Qt::AlignRight; + } +} + +BookmarkModel::BookmarkModel(QObject* parent) : QAbstractListModel(parent), + m_bookmarks() +{ +} + +} // qpdfview diff --git a/sources/bookmarkmodel.h b/sources/bookmarkmodel.h new file mode 100644 index 0000000..8f33189 --- /dev/null +++ b/sources/bookmarkmodel.h @@ -0,0 +1,105 @@ +/* + +Copyright 2014-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef BOOKMARKMODEL_H +#define BOOKMARKMODEL_H + +#include + +#include +#include +#include + +namespace qpdfview +{ + +struct BookmarkItem +{ + int page; + + QString label; + QString comment; + QDateTime modified; + + BookmarkItem(int page = -1, const QString& label = QString(), const QString& comment = QString(), const QDateTime& modified = QDateTime::currentDateTime()) : + page(page), + label(label), + comment(comment), + modified(modified) {} + +}; + +} // namespace qpdfview + +Q_DECLARE_TYPEINFO(qpdfview::BookmarkItem, Q_MOVABLE_TYPE); + +namespace qpdfview +{ + +class BookmarkModel : public QAbstractListModel +{ + Q_OBJECT + +public: + static BookmarkModel* fromPath(const QString& path, bool create = false); + + static QList< QString > paths(); + + static void removePath(const QString& path); + static void removeAllPaths(); + + + bool isEmpty() const { return m_bookmarks.isEmpty(); } + + void addBookmark(const BookmarkItem& bookmark); + void removeBookmark(const BookmarkItem& bookmark); + + void findBookmark(BookmarkItem& bookmark) const; + + + enum + { + PageRole = Qt::UserRole + 1, + LabelRole, + CommentRole, + ModifiedRole + }; + + Qt::ItemFlags flags(const QModelIndex&) const; + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + +private: + Q_DISABLE_COPY(BookmarkModel) + + static QHash< QString, BookmarkModel* > s_instances; + BookmarkModel(QObject* parent = 0); + + QVector< BookmarkItem > m_bookmarks; + +}; + +} // qpdfview + +#endif // BOOKMARKMODEL_H diff --git a/sources/database.cpp b/sources/database.cpp new file mode 100644 index 0000000..6e196b4 --- /dev/null +++ b/sources/database.cpp @@ -0,0 +1,1113 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2018 Adam Reichold +Copyright 2012 Michał Trybus +Copyright 2018 Egor Zenkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "database.h" + +#include +#include +#include +#include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#else + +#include + +#endif // QT_VERSION + +#ifdef WITH_SQL + +#include +#include + +#endif // WITH_SQL + +#include "settings.h" +#include "documentview.h" +#include "bookmarkmodel.h" + +#ifdef WITH_SQL + +namespace +{ + +using namespace qpdfview; + +class Transaction +{ +public: + Transaction(QSqlDatabase& database) : + m_database(database), + m_committed(false) + { + if(s_current != 0) + { + return; + } + + if(!m_database.transaction()) + { + throw m_database.lastError(); + } + + s_current = this; + } + + ~Transaction() throw() + { + if(s_current != this) + { + return; + } + + if(!m_committed) + { + m_database.rollback(); + } + + s_current = 0; + } + + void commit() + { + if(s_current != this) + { + return; + } + + if(!m_database.commit()) + { + throw m_database.lastError(); + } + + m_committed = true; + } + +private: + Q_DISABLE_COPY(Transaction) + + QSqlDatabase& m_database; + bool m_committed; + + static Transaction* s_current; + +}; + +Transaction* Transaction::s_current = 0; + +class Query +{ +private: + template< typename T > + class BindValue + { + private: + friend class Query; + + explicit BindValue(const T& value) : m_value(value) {} + + public: + inline operator QVariant() const + { + return Conversion< T >::convert(m_value); + } + + private: + const T& m_value; + + template< typename S, bool Defined = QMetaTypeId2< S >::Defined > + struct Conversion + { + static inline QVariant convert(const S& value) + { + return QVariant(value); + } + }; + + template< typename S > + struct Conversion< S, false > + { + static inline QVariant convert(const S& value) + { + return QVariant(static_cast< uint >(value)); + } + }; + + }; + +public: + class Value + { + private: + friend class Query; + + explicit Value(const QVariant& value) : m_value(value) {} + + public: + template< typename T > + inline operator T() const + { + return Conversion< T >::convert(m_value); + } + + private: + const QVariant m_value; + + template< typename T, bool Defined = QMetaTypeId2< T >::Defined > + struct Conversion + { + static inline T convert(const QVariant& value) + { + return value.value< T >(); + } + }; + + template< typename T > + struct Conversion< T, false > + { + static inline T convert(const QVariant& value) + { + return static_cast< T >(value.value< uint >()); + } + }; + + }; + +public: + Query(QSqlDatabase& database) : + m_query(database), + m_bindValueIndex(0), + m_valueIndex(0) + { + } + + void prepare(const QString& query) + { + if(!m_query.prepare(query)) + { + throw m_query.lastError(); + } + + m_bindValueIndex = 0; + } + + void exec() + { + if(!m_query.exec()) + { + throw m_query.lastError(); + } + + m_bindValueIndex = 0; + } + + void exec(const QString& query) + { + if(!m_query.exec(query)) + { + throw m_query.lastError(); + } + + m_bindValueIndex = 0; + } + + Query& operator <<(const QVariant& value) + { + m_query.bindValue(m_bindValueIndex++, value); + + return *this; + } + + template< typename T > + Query& operator <<(const T& value) + { + m_query.bindValue(m_bindValueIndex++, BindValue< T >(value)); + + return *this; + } + + bool nextRecord() + { + if(!m_query.isActive()) + { + throw m_query.lastError(); + } + + m_valueIndex = 0; + + return m_query.next(); + } + + Value nextValue() + { + return Value(m_query.value(m_valueIndex++)); + } + +private: + Q_DISABLE_COPY(Query) + + QSqlQuery m_query; + int m_bindValueIndex; + int m_valueIndex; + +}; + +inline QByteArray hashFilePath(const QString& filePath) +{ + return QCryptographicHash::hash(filePath.toUtf8(), QCryptographicHash::Sha1).toBase64(); +} + +} // anonymous + +#endif // WITH_SQL + +namespace qpdfview +{ + +Database* Database::s_instance = 0; + +Database* Database::instance() +{ + if(s_instance == 0) + { + s_instance = new Database(qApp); + } + + return s_instance; +} + +Database::~Database() +{ + s_instance = 0; +} + +QStringList Database::knownInstanceNames() +{ + QStringList instanceNames; + +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec("SELECT DISTINCT(instanceName) FROM tabs_v5"); + + while(query.nextRecord()) + { + const QString instanceName = query.nextValue(); + + if(!instanceName.isEmpty()) + { + instanceNames.append(instanceName); + } + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#endif // WITH_SQL + + return instanceNames; +} + +void Database::restoreTabs(const RestoreTab& restoreTab) +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.prepare("SELECT filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,renderFlags,firstPage" + " FROM tabs_v5 WHERE instanceName==? ORDER BY tabIndex"); + + query << instanceName(); + + query.exec(); + + while(query.nextRecord()) + { + if(DocumentView* newTab = restoreTab(query.nextValue())) + { + const int page = query.nextValue(); + + newTab->setContinuousMode(query.nextValue()); + newTab->setLayoutMode(query.nextValue()); + newTab->setRightToLeftMode(query.nextValue()); + + newTab->setScaleMode(query.nextValue()); + newTab->setScaleFactor(query.nextValue()); + + newTab->setRotation(query.nextValue()); + newTab->setRenderFlags(query.nextValue()); + + newTab->setFirstPage(query.nextValue()); + + newTab->jumpToPage(page, false); + } + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#else + + Q_UNUSED(restoreTab); + +#endif // WITH_SQL +} + +void Database::saveTabs(const QVector< DocumentView* >& tabs) +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.prepare("DELETE FROM tabs_v5 WHERE instanceName==?"); + + query << instanceName(); + + query.exec(); + + query.prepare("INSERT INTO tabs_v5" + " (filePath,instanceName,tabIndex,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,renderFlags,firstPage)" + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"); + + for(int tabIndex = 0; tabIndex < tabs.size(); ++tabIndex) + { + const DocumentView* const tab = tabs.at(tabIndex); + + query << tab->fileInfo().absoluteFilePath() + << instanceName() + << tabIndex + << tab->currentPage() + + << tab->continuousMode() + << tab->layoutMode() + << tab->rightToLeftMode() + + << tab->scaleMode() + << tab->scaleFactor() + + << tab->rotation() + << tab->renderFlags() + + << tab->firstPage(); + + query.exec(); + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#else + + Q_UNUSED(tabs); + +#endif // WITH_SQL +} + +void Database::clearTabs() +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec("DELETE FROM tabs_v5"); + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#endif // WITH_SQL +} + +void Database::restoreBookmarks() +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query outerQuery(m_database); + Query innerQuery(m_database); + + outerQuery.exec("SELECT DISTINCT(filePath) FROM bookmarks_v3"); + + innerQuery.prepare("SELECT page,label,comment,modified" + " FROM bookmarks_v3 WHERE filePath==?"); + + while(outerQuery.nextRecord()) + { + const QString filePath = outerQuery.nextValue(); + + innerQuery << filePath; + + innerQuery.exec(); + + BookmarkModel* model = BookmarkModel::fromPath(filePath, true); + + while(innerQuery.nextRecord()) + { + const int page = innerQuery.nextValue(); + const QString label = innerQuery.nextValue(); + const QString comment = innerQuery.nextValue(); + const QDateTime modified = innerQuery.nextValue(); + + model->addBookmark(BookmarkItem(page, label, comment, modified)); + } + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#endif // WITH_SQL +} + +void Database::saveBookmarks() +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec("DELETE FROM bookmarks_v3"); + + if(Settings::instance()->mainWindow().restoreBookmarks()) + { + query.prepare("INSERT INTO bookmarks_v3" + " (filePath,page,label,comment,modified)" + " VALUES (?,?,?,?,?)"); + + foreach(const QString& filePath, BookmarkModel::paths()) + { + const BookmarkModel* model = BookmarkModel::fromPath(filePath); + + for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row) + { + const QModelIndex index = model->index(row); + + query << filePath + + << index.data(BookmarkModel::PageRole) + << index.data(BookmarkModel::LabelRole) + << index.data(BookmarkModel::CommentRole) + << index.data(BookmarkModel::ModifiedRole); + + query.exec(); + } + } + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#endif // WITH_SQL +} + +void Database::clearBookmarks() +{ +#ifdef WITH_SQL + + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec("DELETE FROM bookmarks_v3"); + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#endif // WITH_SQL +} + +void Database::restorePerFileSettings(DocumentView* tab) +{ +#ifdef WITH_SQL + + if(!Settings::instance()->mainWindow().restorePerFileSettings()) + { + return; + } + + try + { + const QByteArray filePath = hashFilePath(tab->fileInfo().absoluteFilePath()); + + Transaction transaction(m_database); + Query query(m_database); + + query.prepare("SELECT currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,renderFlags,firstPage" + " FROM perfilesettings_v4 WHERE filePath==?"); + + query << filePath; + + query.exec(); + + if(query.nextRecord()) + { + const int page = query.nextValue(); + + tab->setContinuousMode(query.nextValue()); + tab->setLayoutMode(query.nextValue()); + tab->setRightToLeftMode(query.nextValue()); + + tab->setScaleMode(query.nextValue()); + tab->setScaleFactor(query.nextValue()); + + tab->setRotation(query.nextValue()); + + tab->setRenderFlags(query.nextValue()); + + tab->setFirstPage(query.nextValue()); + + tab->jumpToPage(page, false); + } + + query.prepare("SELECT expandedPath FROM perfilesettings_outline_v1 WHERE filePath==?"); + + query << filePath; + + query.exec(); + + QSet< QByteArray > expandedPaths; + + while(query.nextRecord()) + { + expandedPaths.insert(query.nextValue()); + } + + tab->restoreExpandedPaths(expandedPaths); + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#else + + Q_UNUSED(tab); + +#endif // WITH_SQL +} + +void Database::savePerFileSettings(const DocumentView* tab) +{ +#ifdef WITH_SQL + + if(!Settings::instance()->mainWindow().restorePerFileSettings()) + { + return; + } + + try + { + const QByteArray filePath = hashFilePath(tab->fileInfo().absoluteFilePath()); + + Transaction transaction(m_database); + Query query(m_database); + + query.prepare("INSERT OR REPLACE INTO perfilesettings_v4" + " (lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,renderFlags,firstPage)" + " VALUES (strftime('%s','now'),?,?,?,?,?,?,?,?,?,?)"); + + query << filePath + << tab->currentPage() + + << tab->continuousMode() + << tab->layoutMode() + << tab->rightToLeftMode() + + << tab->scaleMode() + << tab->scaleFactor() + + << tab->rotation() + << tab->renderFlags() + + << tab->firstPage(); + + query.exec(); + + query.prepare("DELETE FROM perfilesettings_outline_v1 WHERE filePath==?"); + + query << filePath; + + query.exec(); + + query.prepare("INSERT INTO perfilesettings_outline_v1" + " (filePath,expandedPath)" + " VALUES (?,?)"); + + foreach(const QByteArray& expandedPath, tab->saveExpandedPaths()) + { + query << filePath << expandedPath; + + query.exec(); + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } + +#else + + Q_UNUSED(tab); + +#endif // WITH_SQL +} + +Database::Database(QObject* parent) : QObject(parent) +{ +#ifdef WITH_SQL + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + const QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation); + +#else + + const QString path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); + +#endif // QT_VERSION + + QDir().mkpath(path); + + m_database = QSqlDatabase::addDatabase("QSQLITE"); + m_database.setDatabaseName(QDir(path).filePath("database")); + + if(!m_database.open()) + { + qDebug() << m_database.lastError(); + return; + } + + try + { + Query query(m_database); + + query.exec("PRAGMA synchronous = OFF"); + query.exec("PRAGMA journal_mode = MEMORY"); + } + catch(QSqlError& error) + { + qDebug() << error; + } + + const QStringList tables = m_database.tables(); + + // tabs + + if(!tables.contains("tabs_v5")) + { + if(prepareTabs_v5()) + { + if(tables.contains("tabs_v4")) + { + migrateTabs_v4_v5(); + } + else if(tables.contains("tabs_v3")) + { + migrateTabs_v3_v5(); + } + else if(tables.contains("tabs_v2")) + { + migrateTabs_v2_v5(); + } + else if(tables.contains("tabs_v1")) + { + migrateTabs_v1_v5(); + } + } + } + + // bookmarks + + if(!tables.contains("bookmarks_v3")) + { + if(prepareBookmarks_v3()) + { + if(tables.contains("bookmarks_v2")) + { + migrateBookmarks_v2_v3(); + } + else if(tables.contains("bookmarks_v1")) + { + migrateBookmarks_v1_v3(); + } + } + } + + // per-file settings + + if(!tables.contains("perfilesettings_v4")) + { + if(preparePerFileSettings_v4()) + { + if(tables.contains("perfilesettings_v3")) + { + migratePerFileSettings_v3_v4(); + } + else if(tables.contains("perfilesettings_v2")) + { + migratePerFileSettings_v2_v4(); + } + else if(tables.contains("perfilesettings_v1")) + { + migratePerFileSettings_v1_v4(); + } + } + } + + if(!tables.contains("perfilesettings_outline_v1")) + { + preparePerFileSettings_Outline_v1(); + } + + limitPerFileSettings(); + +#endif // WITH_SQL +} + +QString Database::instanceName() +{ + QString instanceName = qApp->objectName(); + + if(instanceName.isNull()) + { + instanceName = QLatin1String(""); + } + + return instanceName; +} + +#ifdef WITH_SQL + +bool Database::prepareTabs_v5() +{ + return prepareTable("CREATE TABLE tabs_v5 (" + " filePath TEXT" + " ,instanceName TEXT" + " ,tabIndex INTEGER" + " ,currentPage INTEGER" + " ,continuousMode INTEGER" + " ,layoutMode INTEGER" + " ,rightToLeftMode INTEGER" + " ,scaleMode INTEGER" + " ,scaleFactor REAL" + " ,rotation INTEGER" + " ,renderFlags INTEGER" + " ,firstPage INTEGER" + " ,PRIMARY KEY (instanceName, tabIndex)" + " )"); +} + +bool Database::prepareBookmarks_v3() +{ + return prepareTable("CREATE TABLE bookmarks_v3 (" + " filePath TEXT" + " ,page INTEGER" + " ,label TEXT" + " ,comment TEXT" + " ,modified DATETIME" + " )"); +} + +bool Database::preparePerFileSettings_v4() +{ + return prepareTable("CREATE TABLE perfilesettings_v4 (" + " lastUsed INTEGER" + " ,filePath TEXT PRIMARY KEY" + " ,currentPage INTEGER" + " ,continuousMode INTEGER" + " ,layoutMode INTEGER" + " ,rightToLeftMode INTEGER" + " ,scaleMode INTEGER" + " ,scaleFactor REAL" + " ,rotation INTEGER" + " ,renderFlags INTEGER" + " ,firstPage INTEGER" + " )"); +} + +bool Database::preparePerFileSettings_Outline_v1() +{ + return prepareTable("CREATE TABLE perfilesettings_outline_v1 (" + " filePath TEXT" + " ,expandedPath TEXT" + " ,FOREIGN KEY (filePath) REFERENCES perfilesettings_v4 (filePath) ON DELETE CASCADE" + " )"); +} + +void Database::migrateTabs_v4_v5() +{ + migrateTable("INSERT INTO tabs_v5" + " SELECT filePath,instanceName,(SELECT MAX(tabIndex)+1 FROM tabs_v5 WHERE tabs_v5.instanceName=tabs_v4.instanceName),currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,0,-1" + " FROM tabs_v4", + + "DROP TABLE tabs_v4", + + "Migrated tabs from v4 to v5, dropping v4."); +} + +void Database::migrateTabs_v3_v5() +{ + migrateTable("INSERT INTO tabs_v5" + " SELECT filePath,instanceName,(SELECT MAX(tabIndex)+1 FROM tabs_v5 WHERE tabs_v5.instanceName=tabs_v3.instanceName),currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,0,-1" + " FROM tabs_v3", + + "DROP TABLE tabs_v3", + + "Migrated tabs from v3 to v5, dropping v3."); +} + +void Database::migrateTabs_v2_v5() +{ + migrateTable("INSERT INTO tabs_v5" + " SELECT filePath,instanceName,(SELECT MAX(tabIndex)+1 FROM tabs_v5 WHERE tabs_v5.instanceName=tabs_v2.instanceName),currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation,0,-1" + " FROM tabs_v2", + + "DROP TABLE tabs_v2" , + + "Migrated tabs from v2 to v5, dropping v2."); +} + +void Database::migrateTabs_v1_v5() +{ + migrateTable("INSERT INTO tabs_v5" + " SELECT filePath,'',(SELECT MAX(tabIndex)+1 FROM tabs_v5 WHERE tabs_v5.instanceName=''),currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation,0,-1" + " FROM tabs_v1", + + "DROP TABLE tabs_v1", + + "Migrated tabs from v1 to v5, dropping v1."); +} + +void Database::migrateBookmarks_v2_v3() +{ + migrateTable("INSERT INTO bookmarks_v3" + " SELECT filePath,page,label,'',datetime('now')" + " FROM bookmarks_v2", + + "DROP TABLE bookmarks_v2", + + "Migrated bookmarks from v2 to v3, dropping v2."); +} + +void Database::migrateBookmarks_v1_v3() +{ + try + { + Transaction transaction(m_database); + Query outerQuery(m_database); + Query innerQuery(m_database); + + outerQuery.exec("SELECT filePath,pages FROM bookmarks_v1"); + + innerQuery.prepare("INSERT INTO bookmarks_v3" + " (filePath,page,label,comment,modified)" + " VALUES (?,?,?,'',datetime('now'))"); + + while(outerQuery.nextRecord()) + { + const QString filePath = outerQuery.nextValue(); + const QString pages = outerQuery.nextValue(); + + foreach(const QString& page, pages.split(",", QString::SkipEmptyParts)) + { + innerQuery << filePath + << page + << tr("Jump to page %1").arg(page); + + innerQuery.exec(); + } + } + + qWarning() << "Migrated bookmarks from v1 to v3, dropping v1."; + + outerQuery.exec("DROP TABLE bookmarks_v1"); + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } +} + +void Database::migratePerFileSettings_v3_v4() +{ + migrateTable("INSERT INTO perfilesettings_v4" + " SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,0,firstPage" + " FROM perfilesettings_v3", + + "DROP TABLE perfilesettings_v3", + + "Migrated per-file settings from v3 to v4, dropping v3."); +} + +void Database::migratePerFileSettings_v2_v4() +{ + migrateTable("INSERT INTO perfilesettings_v4" + " SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,rightToLeftMode,scaleMode,scaleFactor,rotation,0,-1" + " FROM perfilesettings_v2", + + "DROP TABLE perfilesettings_v2", + + "Migrated per-file settings from v2 to v4, dropping v2."); +} + +void Database::migratePerFileSettings_v1_v4() +{ + migrateTable("INSERT INTO perfilesettings_v4" + " SELECT lastUsed,filePath,currentPage,continuousMode,layoutMode,0,scaleMode,scaleFactor,rotation,0,-1" + " FROM perfilesettings_v1", + + "DROP TABLE perfilesettings_v1", + + "Migrated per-file settings from v1 to v4, dropping v1."); +} + +bool Database::prepareTable(const QString& prepare) +{ + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec(prepare); + + transaction.commit(); + return true; + } + catch(QSqlError& error) + { + qDebug() << error; + return false; + } +} + +void Database::migrateTable(const QString& migrate, const QString& prune, const QString& warning) +{ + try + { + Transaction transaction(m_database); + Query query(m_database); + + query.exec(migrate); + + qWarning() << warning; + + query.exec(prune); + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } +} + +void Database::limitPerFileSettings() +{ + try + { + Transaction transaction(m_database); + Query query(m_database); + + if(Settings::instance()->mainWindow().restorePerFileSettings()) + { + query.prepare("DELETE FROM perfilesettings_v4" + " WHERE filePath NOT IN (" + " SELECT filePath FROM perfilesettings_v4" + " ORDER BY lastUsed DESC LIMIT ?" + " )"); + + query << Settings::instance()->mainWindow().perFileSettingsLimit(); + + query.exec(); + } + else + { + query.exec("DELETE FROM perfilesettings_v4"); + } + + transaction.commit(); + } + catch(QSqlError& error) + { + qDebug() << error; + } +} + +#endif // WITH_SQL + +} // qpdfview diff --git a/sources/database.h b/sources/database.h new file mode 100644 index 0000000..cd8a7a7 --- /dev/null +++ b/sources/database.h @@ -0,0 +1,108 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013-2018 Adam Reichold +Copyright 2018 Egor Zenkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef DATABASE_H +#define DATABASE_H + +#include + +#ifdef WITH_SQL + +#include + +#endif // WITH_SQL + +class QDateTime; + +#include "global.h" + +namespace qpdfview +{ + +class DocumentView; + +class Database : public QObject +{ + Q_OBJECT + +public: + static Database* instance(); + ~Database(); + + QStringList knownInstanceNames(); + + struct RestoreTab + { + virtual DocumentView* operator()(const QString& absoluteFilePath) const = 0; + }; + + void restoreTabs(const RestoreTab& restoreTab); + void saveTabs(const QVector< DocumentView* >& tabs); + void clearTabs(); + + void restoreBookmarks(); + void saveBookmarks(); + void clearBookmarks(); + + void restorePerFileSettings(DocumentView* tab); + void savePerFileSettings(const DocumentView* tab); + +private: + Q_DISABLE_COPY(Database) + + static Database* s_instance; + Database(QObject* parent = 0); + + static QString instanceName(); + +#ifdef WITH_SQL + + bool prepareTabs_v5(); + bool prepareBookmarks_v3(); + bool preparePerFileSettings_v4(); + bool preparePerFileSettings_Outline_v1(); + + void migrateTabs_v4_v5(); + void migrateTabs_v3_v5(); + void migrateTabs_v2_v5(); + void migrateTabs_v1_v5(); + void migrateBookmarks_v2_v3(); + void migrateBookmarks_v1_v3(); + void migratePerFileSettings_v3_v4(); + void migratePerFileSettings_v2_v4(); + void migratePerFileSettings_v1_v4(); + + bool prepareTable(const QString& prepare); + void migrateTable(const QString& migrate, const QString& prune, const QString& warning); + + void limitPerFileSettings(); + + QSqlDatabase m_database; + +#endif // WITH_SQL + +}; + +} // qpdfview + +#endif // DATABASE_H diff --git a/sources/djvumodel.cpp b/sources/djvumodel.cpp new file mode 100644 index 0000000..68a38bc --- /dev/null +++ b/sources/djvumodel.cpp @@ -0,0 +1,1003 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2018 Marshall Banana +Copyright 2013-2014, 2018 Adam Reichold +Copyright 2013 Alexander Volkov + +This file is part of qpdfview. + +The implementation is based on KDjVu by Pino Toscano. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "djvumodel.h" + +#include + +#include +#include + +#if defined(Q_OS_WIN) && defined(DJVU_STATIC) + +#define DDJVUAPI /**/ +#define MINILISPAPI /**/ + +#endif // Q_OS_WIN DJVU_STATIC + +#include +#include + +#define LOCK_PAGE QMutexLocker mutexLocker(&m_parent->m_mutex); +#define LOCK_DOCUMENT QMutexLocker mutexLocker(&m_mutex); + +#if DDJVUAPI_VERSION < 23 + +#define LOCK_PAGE_GLOBAL QMutexLocker globalMutexLocker(m_parent->m_globalMutex); +#define LOCK_DOCUMENT_GLOBAL QMutexLocker globalMutexLocker(m_globalMutex); + +#else + +#define LOCK_PAGE_GLOBAL +#define LOCK_DOCUMENT_GLOBAL + +#endif // DDJVUAPI_VERSION + +namespace +{ + +using namespace qpdfview; +using namespace qpdfview::Model; + +inline miniexp_t miniexp_cadddr(miniexp_t exp) +{ + return miniexp_cadr(miniexp_cddr(exp)); +} + +inline miniexp_t miniexp_caddddr(miniexp_t exp) +{ + return miniexp_caddr(miniexp_cddr(exp)); +} + +inline miniexp_t skip(miniexp_t exp, int offset) +{ + while(offset-- > 0) + { + exp = miniexp_cdr(exp); + } + + return exp; +} + +void clearMessageQueue(ddjvu_context_t* context, bool wait) +{ + if(wait) + { + ddjvu_message_wait(context); + } + + while(true) + { + if(ddjvu_message_peek(context) != 0) + { + ddjvu_message_pop(context); + } + else + { + break; + } + } +} + +void waitForMessageTag(ddjvu_context_t* context, ddjvu_message_tag_t tag) +{ + ddjvu_message_wait(context); + + while(true) + { + ddjvu_message_t* message = ddjvu_message_peek(context); + + if(message != 0) + { + if(message->m_any.tag == tag) + { + break; + } + + ddjvu_message_pop(context); + } + else + { + break; + } + } +} + +QPainterPath loadLinkBoundary(const QString& type, miniexp_t boundaryExp, QSizeF size) +{ + QPainterPath boundary; + + const int count = miniexp_length(boundaryExp); + + if(count == 4 && (type == QLatin1String("rect") || type == QLatin1String("oval"))) + { + QPoint p(miniexp_to_int(miniexp_car(boundaryExp)), miniexp_to_int(miniexp_cadr(boundaryExp))); + QSize s(miniexp_to_int(miniexp_caddr(boundaryExp)), miniexp_to_int(miniexp_cadddr(boundaryExp))); + + p.setY(size.height() - s.height() - p.y()); + + const QRectF r(p, s); + + if(type == QLatin1String("rect")) + { + boundary.addRect(r); + } + else + { + boundary.addEllipse(r); + } + } + else if(count > 0 && count % 2 == 0 && type == QLatin1String("poly")) + { + QPolygon polygon; + + for(int index = 0; index < count; index += 2) + { + QPoint p(miniexp_to_int(miniexp_nth(index, boundaryExp)), miniexp_to_int(miniexp_nth(index + 1, boundaryExp))); + + p.setY(size.height() - p.y()); + + polygon << p; + } + + boundary.addPolygon(polygon); + } + + return QTransform::fromScale(1.0 / size.width(), 1.0 / size.height()).map(boundary); +} + +Link* loadLinkTarget(const QPainterPath& boundary, miniexp_t targetExp, int index, const QHash< QString, int >& pageByName) +{ + QString target; + + if(miniexp_stringp(targetExp)) + { + target = QString::fromUtf8(miniexp_to_str(targetExp)); + } + else if(miniexp_length(targetExp) == 3 && qstrcmp(miniexp_to_name(miniexp_car(targetExp)), "url") == 0) + { + target = QString::fromUtf8(miniexp_to_str(miniexp_cadr(targetExp))); + } + + if(target.isEmpty()) + { + return 0; + } + + if(target.at(0) == QLatin1Char('#')) + { + target.remove(0, 1); + + bool ok = false; + int targetPage = target.toInt(&ok); + + if(!ok) + { + const int page = pageByName.value(target); + + if(page != 0) + { + targetPage = page; + } + else + { + return 0; + } + } + else + { + if(target.at(0) == QLatin1Char('+') || target.at(0) == QLatin1Char('-')) + { + targetPage += index + 1; + } + } + + return new Link(boundary, targetPage); + } + else + { + return new Link(boundary, target); + } +} + +QList< Link* > loadLinks(miniexp_t linkExp, QSizeF size, int index, const QHash< QString, int >& pageByName) +{ + QList< Link* > links; + + for(miniexp_t linkItem = miniexp_nil; miniexp_consp(linkExp); linkExp = miniexp_cdr(linkExp)) + { + linkItem = miniexp_car(linkExp); + + if(miniexp_length(linkItem) < 4 || qstrcmp(miniexp_to_name(miniexp_car(linkItem)), "maparea") != 0) + { + continue; + } + + miniexp_t targetExp = miniexp_cadr(linkItem); + miniexp_t boundaryExp = miniexp_cadddr(linkItem); + + if(!miniexp_symbolp(miniexp_car(boundaryExp))) + { + continue; + } + + const QString type = QString::fromUtf8(miniexp_to_name(miniexp_car(boundaryExp))); + + if(type == QLatin1String("rect") || type == QLatin1String("oval") || type == QLatin1String("poly")) + { + QPainterPath boundary = loadLinkBoundary(type, miniexp_cdr(boundaryExp), size); + + if(!boundary.isEmpty()) + { + Link* link = loadLinkTarget(boundary, targetExp, index, pageByName); + + if(link != 0) + { + links.append(link); + } + } + } + } + + return links; +} + +QString loadText(miniexp_t textExp, QSizeF size, const QRectF& rect) +{ + if(miniexp_length(textExp) < 6 && !miniexp_symbolp(miniexp_car(textExp))) + { + return QString(); + } + + const int xmin = miniexp_to_int(miniexp_cadr(textExp)); + const int ymin = miniexp_to_int(miniexp_caddr(textExp)); + const int xmax = miniexp_to_int(miniexp_cadddr(textExp)); + const int ymax = miniexp_to_int(miniexp_caddddr(textExp)); + + if(rect.intersects(QRect(xmin, size.height() - ymax, xmax - xmin, ymax - ymin))) + { + const QString type = QString::fromUtf8(miniexp_to_name(miniexp_car(textExp))); + + if(type == QLatin1String("word")) + { + return QString::fromUtf8(miniexp_to_str(miniexp_nth(5, textExp))); + } + else + { + QStringList text; + + textExp = skip(textExp, 5); + + for(miniexp_t textItem = miniexp_nil; miniexp_consp(textExp); textExp = miniexp_cdr(textExp)) + { + textItem = miniexp_car(textExp); + + text.append(loadText(textItem, size, rect)); + } + + return type == QLatin1String("line") ? text.join(" ") : text.join("\n"); + } + } + + return QString(); +} + +QList< QRectF > findText(miniexp_t pageTextExp, QSizeF size, const QTransform& transform, const QStringList& words, bool matchCase, bool wholeWords) +{ + if(words.isEmpty()) + { + return QList< QRectF >(); + } + + const Qt::CaseSensitivity caseSensitivity = matchCase ? Qt::CaseSensitive : Qt::CaseInsensitive; + + QRectF result; + int wordIndex = 0; + + QList< miniexp_t > texts; + QList< QRectF > results; + + texts.append(pageTextExp); + + while(!texts.isEmpty()) + { + miniexp_t textExp = texts.takeFirst(); + + if(miniexp_length(textExp) < 6 || !miniexp_symbolp(miniexp_car(textExp))) + { + continue; + } + + const QString type = QString::fromUtf8(miniexp_to_name(miniexp_car(textExp))); + + if(type == QLatin1String("word")) + { + const QString text = QString::fromUtf8(miniexp_to_str(miniexp_nth(5, textExp))); + + int index = 0; + + while((index = text.indexOf(words.at(wordIndex), index, caseSensitivity)) != -1) + { + const int nextIndex = index + words.at(wordIndex).length(); + + const bool wordBegins = index == 0 || !text.at(index - 1).isLetterOrNumber(); + const bool wordEnds = nextIndex == text.length() || !text.at(nextIndex).isLetterOrNumber(); + + if(!wholeWords || (wordBegins && wordEnds)) + { + const int xmin = miniexp_to_int(miniexp_cadr(textExp)); + const int ymin = miniexp_to_int(miniexp_caddr(textExp)); + const int xmax = miniexp_to_int(miniexp_cadddr(textExp)); + const int ymax = miniexp_to_int(miniexp_caddddr(textExp)); + + result = result.united(QRectF(xmin, size.height() - ymax, xmax - xmin, ymax - ymin)); + + // Advance after partial match + if(++wordIndex == words.size()) + { + results.append(transform.mapRect(result)); + + // Reset after full match + result = QRectF(); + wordIndex = 0; + } + } + else + { + // Reset after malformed match + result = QRectF(); + wordIndex = 0; + } + + if((index = nextIndex) >= text.length()) + { + break; + } + } + + if(index < 0) + { + // Reset after empty match + result = QRectF(); + wordIndex = 0; + } + } + else + { + textExp = skip(textExp, 5); + + for(miniexp_t textItem = miniexp_nil; miniexp_consp(textExp); textExp = miniexp_cdr(textExp)) + { + textItem = miniexp_car(textExp); + + texts.append(textItem); + } + } + } + + return results; +} + +Outline loadOutline(miniexp_t outlineExp, const QHash< QString, int >& pageByName) +{ + Outline outline; + + for(miniexp_t outlineItem = miniexp_nil; miniexp_consp(outlineExp); outlineExp = miniexp_cdr(outlineExp)) + { + outlineItem = miniexp_car(outlineExp); + + if(miniexp_length(outlineItem) < 2 || !miniexp_stringp(miniexp_car(outlineItem)) || !miniexp_stringp(miniexp_cadr(outlineItem))) + { + continue; + } + + const QString title = QString::fromUtf8(miniexp_to_str(miniexp_car(outlineItem))); + + if(title.isEmpty()) + { + continue; + } + + outline.push_back(Section()); + Section& section = outline.back(); + section.title = title; + + QString destination = QString::fromUtf8(miniexp_to_str(miniexp_cadr(outlineItem))); + + if(!destination.isEmpty() && destination.at(0) == QLatin1Char('#')) + { + destination.remove(0, 1); + + bool ok = false; + int page = destination.toInt(&ok); + + if(!ok) + { + const int destinationPage = pageByName.value(destination); + + if(destinationPage != 0) + { + ok = true; + page = destinationPage; + } + } + + if(ok) + { + section.link.page = page; + } + } + + if(miniexp_length(outlineItem) > 2) + { + section.children = loadOutline(skip(outlineItem, 2), pageByName); + } + } + + return outline; +} + +Properties loadProperties(miniexp_t annoExp) +{ + Properties properties; + + for(miniexp_t annoItem = miniexp_nil; miniexp_consp(annoExp); annoExp = miniexp_cdr(annoExp)) + { + annoItem = miniexp_car(annoExp); + + if(miniexp_length(annoItem) < 2 || qstrcmp(miniexp_to_name(miniexp_car(annoItem)), "metadata") != 0) + { + continue; + } + + annoItem = miniexp_cdr(annoItem); + + for(miniexp_t keyValueItem = miniexp_nil; miniexp_consp(annoItem); annoItem = miniexp_cdr(annoItem)) + { + keyValueItem = miniexp_car(annoItem); + + if(miniexp_length(keyValueItem) != 2) + { + continue; + } + + const QString key = QString::fromUtf8(miniexp_to_name(miniexp_car(keyValueItem))); + const QString value = QString::fromUtf8(miniexp_to_str(miniexp_cadr(keyValueItem))); + + if(!key.isEmpty() && !value.isEmpty()) + { + properties.push_back(qMakePair(key, value)); + } + } + } + + return properties; +} + +} // anonymous + +namespace qpdfview +{ + +namespace Model +{ + +DjVuPage::DjVuPage(const DjVuDocument* parent, int index, const ddjvu_pageinfo_t& pageinfo) : + m_parent(parent), + m_index(index), + m_size(pageinfo.width, pageinfo.height), + m_resolution(pageinfo.dpi) +{ +} + +DjVuPage::~DjVuPage() +{ +} + +QSizeF DjVuPage::size() const +{ + return 72.0 / m_resolution * m_size; +} + +QImage DjVuPage::render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const +{ + LOCK_PAGE + + ddjvu_page_t* page = ddjvu_page_create_by_pageno(m_parent->m_document, m_index); + + if(page == 0) + { + return QImage(); + } + + ddjvu_status_t status; + + while(true) + { + status = ddjvu_page_decoding_status(page); + + if(status < DDJVU_JOB_OK) + { + clearMessageQueue(m_parent->m_context, true); + } + else + { + break; + } + } + + if(status >= DDJVU_JOB_FAILED) + { + ddjvu_page_release(page); + + return QImage(); + } + + switch(rotation) + { + default: + case RotateBy0: + ddjvu_page_set_rotation(page, DDJVU_ROTATE_0); + break; + case RotateBy90: + ddjvu_page_set_rotation(page, DDJVU_ROTATE_270); + break; + case RotateBy180: + ddjvu_page_set_rotation(page, DDJVU_ROTATE_180); + break; + case RotateBy270: + ddjvu_page_set_rotation(page, DDJVU_ROTATE_90); + break; + } + + ddjvu_rect_t pagerect; + + pagerect.x = 0; + pagerect.y = 0; + + switch(rotation) + { + default: + case RotateBy0: + case RotateBy180: + pagerect.w = qRound(horizontalResolution / m_resolution * m_size.width()); + pagerect.h = qRound(verticalResolution / m_resolution * m_size.height()); + break; + case RotateBy90: + case RotateBy270: + pagerect.w = qRound(horizontalResolution / m_resolution * m_size.height()); + pagerect.h = qRound(verticalResolution / m_resolution * m_size.width()); + break; + } + + ddjvu_rect_t renderrect; + + if(boundingRect.isNull()) + { + renderrect.x = pagerect.x; + renderrect.y = pagerect.y; + renderrect.w = pagerect.w; + renderrect.h = pagerect.h; + } + else + { + renderrect.x = boundingRect.x(); + renderrect.y = boundingRect.y(); + renderrect.w = boundingRect.width(); + renderrect.h = boundingRect.height(); + } + + QImage image(renderrect.w, renderrect.h, QImage::Format_RGB32); + + if(!ddjvu_page_render(page, DDJVU_RENDER_COLOR, &pagerect, &renderrect, m_parent->m_format, image.bytesPerLine(), reinterpret_cast< char* >(image.bits()))) + { + image = QImage(); + } + + clearMessageQueue(m_parent->m_context, false); + + ddjvu_page_release(page); + + return image; +} + +QString DjVuPage::label() const +{ + return m_parent->m_titleByIndex.value(m_index); +} + +QList< Link* > DjVuPage::links() const +{ + LOCK_PAGE + + miniexp_t pageAnnoExp = miniexp_nil; + + { + LOCK_PAGE_GLOBAL + + while(true) + { + pageAnnoExp = ddjvu_document_get_pageanno(m_parent->m_document, m_index); + + if(pageAnnoExp == miniexp_dummy) + { + clearMessageQueue(m_parent->m_context, true); + } + else + { + break; + } + } + } + + const QList< Link* > links = loadLinks(pageAnnoExp, m_size, m_index, m_parent->m_pageByName); + + { + LOCK_PAGE_GLOBAL + + ddjvu_miniexp_release(m_parent->m_document, pageAnnoExp); + } + + return links; +} + +QString DjVuPage::text(const QRectF& rect) const +{ + LOCK_PAGE + + miniexp_t pageTextExp = miniexp_nil; + + { + LOCK_PAGE_GLOBAL + + while(true) + { + pageTextExp = ddjvu_document_get_pagetext(m_parent->m_document, m_index, "word"); + + if(pageTextExp == miniexp_dummy) + { + clearMessageQueue(m_parent->m_context, true); + } + else + { + break; + } + } + } + + const QTransform transform = QTransform::fromScale(m_resolution / 72.0, m_resolution / 72.0); + + const QString text = loadText(pageTextExp, m_size, transform.mapRect(rect)).simplified(); + + { + LOCK_PAGE_GLOBAL + + ddjvu_miniexp_release(m_parent->m_document, pageTextExp); + } + + return text.simplified(); +} + +QList< QRectF > DjVuPage::search(const QString& text, bool matchCase, bool wholeWords) const +{ + LOCK_PAGE + + miniexp_t pageTextExp = miniexp_nil; + + { + LOCK_PAGE_GLOBAL + + while(true) + { + pageTextExp = ddjvu_document_get_pagetext(m_parent->m_document, m_index, "word"); + + if(pageTextExp == miniexp_dummy) + { + clearMessageQueue(m_parent->m_context, true); + } + else + { + break; + } + } + } + + const QTransform transform = QTransform::fromScale(72.0 / m_resolution, 72.0 / m_resolution); + const QStringList words = text.split(QRegExp(QLatin1String("\\W+")), QString::SkipEmptyParts); + + const QList< QRectF > results = findText(pageTextExp, m_size, transform, words, matchCase, wholeWords); + + { + LOCK_PAGE_GLOBAL + + ddjvu_miniexp_release(m_parent->m_document, pageTextExp); + } + + return results; +} + +DjVuDocument::DjVuDocument(QMutex* globalMutex, ddjvu_context_t* context, ddjvu_document_t* document) : + m_mutex(), + m_globalMutex(globalMutex), + m_context(context), + m_document(document), + m_format(0), + m_pageByName(), + m_titleByIndex() +{ + unsigned int mask[] = {0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}; + + m_format = ddjvu_format_create(DDJVU_FORMAT_RGBMASK32, 4, mask); + ddjvu_format_set_row_order(m_format, 1); + ddjvu_format_set_y_direction(m_format, 1); + + prepareFileInfo(); +} + +DjVuDocument::~DjVuDocument() +{ + ddjvu_document_release(m_document); + ddjvu_context_release(m_context); + ddjvu_format_release(m_format); +} + +int DjVuDocument::numberOfPages() const +{ + LOCK_DOCUMENT + + return ddjvu_document_get_pagenum(m_document); +} + +Page* DjVuDocument::page(int index) const +{ + LOCK_DOCUMENT + + ddjvu_status_t status; + ddjvu_pageinfo_t pageinfo; + + while(true) + { + status = ddjvu_document_get_pageinfo(m_document, index, &pageinfo); + + if(status < DDJVU_JOB_OK) + { + clearMessageQueue(m_context, true); + } + else + { + break; + } + } + + if(status >= DDJVU_JOB_FAILED) + { + return 0; + } + + return new DjVuPage(this, index, pageinfo); +} + +QStringList DjVuDocument::saveFilter() const +{ + return QStringList() << QLatin1String("DjVu (*.djvu *.djv)"); +} + +bool DjVuDocument::canSave() const +{ + return true; +} + +bool DjVuDocument::save(const QString& filePath, bool withChanges) const +{ + Q_UNUSED(withChanges); + + LOCK_DOCUMENT + +#ifdef _MSC_VER + + FILE* file = _wfopen(reinterpret_cast< const wchar_t* >(filePath.utf16()), L"w+"); + +#else + + FILE* file = fopen(QFile::encodeName(filePath), "w+"); + +#endif // _MSC_VER + + if(file == 0) + { + return false; + } + + ddjvu_job_t* job = ddjvu_document_save(m_document, file, 0, 0); + + while(!ddjvu_job_done(job)) + { + clearMessageQueue(m_context, true); + } + + fclose(file); + + return !ddjvu_job_error(job); +} + +Outline DjVuDocument::outline() const +{ + Outline outline; + + LOCK_DOCUMENT + + miniexp_t outlineExp = miniexp_nil; + + { + LOCK_DOCUMENT_GLOBAL + + while(true) + { + outlineExp = ddjvu_document_get_outline(m_document); + + if(outlineExp == miniexp_dummy) + { + clearMessageQueue(m_context, true); + } + else + { + break; + } + } + } + + if(miniexp_length(outlineExp) > 1 && qstrcmp(miniexp_to_name(miniexp_car(outlineExp)), "bookmarks") == 0) + { + outline = loadOutline(skip(outlineExp, 1), m_pageByName); + } + + { + LOCK_DOCUMENT_GLOBAL + + ddjvu_miniexp_release(m_document, outlineExp); + } + + return outline; +} + +Properties DjVuDocument::properties() const +{ + Properties properties; + + LOCK_DOCUMENT + + miniexp_t annoExp = miniexp_nil; + + { + LOCK_DOCUMENT_GLOBAL + + while(true) + { + annoExp = ddjvu_document_get_anno(m_document, TRUE); + + if(annoExp == miniexp_dummy) + { + clearMessageQueue(m_context, true); + } + else + { + break; + } + } + } + + properties = loadProperties(annoExp); + + { + LOCK_DOCUMENT_GLOBAL + + ddjvu_miniexp_release(m_document, annoExp); + } + + return properties; +} + +void DjVuDocument::prepareFileInfo() +{ + for(int index = 0, count = ddjvu_document_get_filenum(m_document); index < count; ++index) + { + ddjvu_fileinfo_t fileinfo; + + if(ddjvu_document_get_fileinfo(m_document, index, &fileinfo) != DDJVU_JOB_OK || fileinfo.type != 'P') + { + continue; + } + + const QString id = QString::fromUtf8(fileinfo.id); + const QString name = QString::fromUtf8(fileinfo.name); + const QString title = QString::fromUtf8(fileinfo.title); + + m_pageByName[id] = m_pageByName[name] = m_pageByName[title] = fileinfo.pageno + 1; + + if(!title.endsWith(".djvu", Qt::CaseInsensitive) && !title.endsWith(".djv", Qt::CaseInsensitive)) + { + m_titleByIndex[fileinfo.pageno] = title; + } + } + + m_pageByName.squeeze(); + m_titleByIndex.squeeze(); +} + +} // Model + +DjVuPlugin::DjVuPlugin(QObject* parent) : QObject(parent), + m_globalMutex() +{ + setObjectName("DjVuPlugin"); +} + +Model::Document* DjVuPlugin::loadDocument(const QString& filePath) const +{ + ddjvu_context_t* context = ddjvu_context_create("qpdfview"); + + if(context == 0) + { + return 0; + } + +#if DDJVUAPI_VERSION >= 19 + + ddjvu_document_t* document = ddjvu_document_create_by_filename_utf8(context, filePath.toUtf8(), FALSE); + +#else + + ddjvu_document_t* document = ddjvu_document_create_by_filename(context, QFile::encodeName(filePath), FALSE); + +#endif // DDJVUAPI_VERSION + + if(document == 0) + { + ddjvu_context_release(context); + + return 0; + } + + waitForMessageTag(context, DDJVU_DOCINFO); + + if(ddjvu_document_decoding_error(document)) + { + ddjvu_document_release(document); + ddjvu_context_release(context); + + return 0; + } + + return new Model::DjVuDocument(&m_globalMutex, context, document); +} + +} // qpdfview + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) + +Q_EXPORT_PLUGIN2(qpdfview_djvu, qpdfview::DjVuPlugin) + +#endif // QT_VERSION diff --git a/sources/djvumodel.h b/sources/djvumodel.h new file mode 100644 index 0000000..987116b --- /dev/null +++ b/sources/djvumodel.h @@ -0,0 +1,140 @@ +/* + +Copyright 2013 Adam Reichold +Copyright 2013 Alexander Volkov + +This file is part of qpdfview. + +The implementation is based on KDjVu by Pino Toscano. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef DJVUMODEL_H +#define DJVUMODEL_H + +#include +#include + +typedef struct ddjvu_context_s ddjvu_context_t; +typedef struct ddjvu_format_s ddjvu_format_t; +typedef struct ddjvu_document_s ddjvu_document_t; +typedef struct ddjvu_pageinfo_s ddjvu_pageinfo_t; + +#include "model.h" + +namespace qpdfview +{ + +class DjVuPlugin; + +namespace Model +{ + class DjVuPage : public Page + { + friend class DjVuDocument; + + public: + ~DjVuPage(); + + QSizeF size() const; + + QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const; + + QString label() const; + + QList< Link* > links() const; + + QString text(const QRectF& rect) const; + + QList< QRectF > search(const QString& text, bool matchCase, bool wholeWords) const; + + private: + Q_DISABLE_COPY(DjVuPage) + + DjVuPage(const class DjVuDocument* parent, int index, const ddjvu_pageinfo_t& pageinfo); + + const class DjVuDocument* m_parent; + + int m_index; + QSizeF m_size; + int m_resolution; + + }; + + class DjVuDocument : public Document + { + friend class DjVuPage; + friend class qpdfview::DjVuPlugin; + + public: + ~DjVuDocument(); + + int numberOfPages() const; + + Page* page(int index) const; + + QStringList saveFilter() const; + + bool canSave() const; + bool save(const QString& filePath, bool withChanges) const; + + Outline outline() const; + Properties properties() const; + + private: + Q_DISABLE_COPY(DjVuDocument) + + DjVuDocument(QMutex* globalMutex, ddjvu_context_t* context, ddjvu_document_t* document); + + mutable QMutex m_mutex; + mutable QMutex* m_globalMutex; + + ddjvu_context_t* m_context; + ddjvu_document_t* m_document; + ddjvu_format_t* m_format; + + QHash< QString, int > m_pageByName; + QHash< int, QString > m_titleByIndex; + + void prepareFileInfo(); + + }; +} + +class DjVuPlugin : public QObject, Plugin +{ + Q_OBJECT + Q_INTERFACES(qpdfview::Plugin) + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + Q_PLUGIN_METADATA(IID "local.qpdfview.Plugin") + +#endif // QT_VERSION + +public: + DjVuPlugin(QObject* parent = 0); + + Model::Document* loadDocument(const QString& filePath) const; + +private: + mutable QMutex m_globalMutex; + +}; + +} // qpdfview + +#endif // DJVUMODEL_H diff --git a/sources/documentlayout.cpp b/sources/documentlayout.cpp new file mode 100644 index 0000000..27dd91a --- /dev/null +++ b/sources/documentlayout.cpp @@ -0,0 +1,362 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "documentlayout.h" + +#include "settings.h" +#include "pageitem.h" + +namespace +{ + +using namespace qpdfview; + +const qreal viewportPadding = 6.0f; + +} // anonymous + +namespace qpdfview +{ + +Settings* DocumentLayout::s_settings = 0; + +DocumentLayout::DocumentLayout() +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } +} + +DocumentLayout* DocumentLayout::fromLayoutMode(LayoutMode layoutMode) +{ + switch(layoutMode) + { + default: + case SinglePageMode: return new SinglePageLayout; + case TwoPagesMode: return new TwoPagesLayout; + case TwoPagesWithCoverPageMode: return new TwoPagesWithCoverPageLayout; + case MultiplePagesMode: return new MultiplePagesLayout; + } +} + +bool DocumentLayout::isCurrentPage(const QRectF& visibleRect, const QRectF& pageRect) const +{ + // Works with vertically scrolling layouts, i.e. all currently implemented layouts. + const qreal pageVisibleHeight = pageRect.intersected(visibleRect).height(); + const qreal pageTopOffset = pageRect.top() - visibleRect.top(); + + if(visibleRect.height() > 2.0f * pageRect.height()) // Are more than two pages visible? + { + const qreal halfPageHeight = 0.5f * pageRect.height(); + + return pageVisibleHeight >= halfPageHeight && pageTopOffset < halfPageHeight && pageTopOffset >= -halfPageHeight; + } + else + { + return pageVisibleHeight >= 0.5f * visibleRect.height(); + } +} + +qreal DocumentLayout::visibleHeight(int viewportHeight) const +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + + return viewportHeight - 2.0f * pageSpacing; +} + + +int SinglePageLayout::currentPage(int page) const +{ + return page; +} + +int SinglePageLayout::previousPage(int page) const +{ + return qMax(page - 1, 1); +} + +int SinglePageLayout::nextPage(int page, int count) const +{ + return qMin(page + 1, count); +} + +QPair< int, int > SinglePageLayout::prefetchRange(int page, int count) const +{ + const int prefetchDistance = s_settings->documentView().prefetchDistance(); + + return qMakePair(qMax(page - prefetchDistance / 2, 1), + qMin(page + prefetchDistance, count)); +} + +int SinglePageLayout::leftIndex(int index) const +{ + return index; +} + +int SinglePageLayout::rightIndex(int index, int count) const +{ + Q_UNUSED(count); + + return index; +} + +qreal SinglePageLayout::visibleWidth(int viewportWidth) const +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + + return viewportWidth - viewportPadding - 2.0f * pageSpacing; +} + +void SinglePageLayout::prepareLayout(const QVector< PageItem* >& pageItems, bool /* rightToLeft */, + qreal& left, qreal& right, qreal& height) +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + qreal pageHeight = 0.0f; + + for(int index = 0; index < pageItems.count(); ++index) + { + PageItem* page = pageItems.at(index); + const QRectF boundingRect = page->boundingRect(); + + page->setPos(-boundingRect.left() - 0.5f * boundingRect.width(), height - boundingRect.top()); + + pageHeight = boundingRect.height(); + + left = qMin(left, -0.5f * boundingRect.width() - pageSpacing); + right = qMax(right, 0.5f * boundingRect.width() + pageSpacing); + height += pageHeight + pageSpacing; + } +} + + +int TwoPagesLayout::currentPage(int page) const +{ + return page % 2 != 0 ? page : page - 1; +} + +int TwoPagesLayout::previousPage(int page) const +{ + return qMax(page - 2, 1); +} + +int TwoPagesLayout::nextPage(int page, int count) const +{ + return qMin(page + 2, count); +} + +QPair< int, int > TwoPagesLayout::prefetchRange(int page, int count) const +{ + const int prefetchDistance = s_settings->documentView().prefetchDistance(); + + return qMakePair(qMax(page - prefetchDistance, 1), + qMin(page + 2 * prefetchDistance + 1, count)); +} + +int TwoPagesLayout::leftIndex(int index) const +{ + return index % 2 == 0 ? index : index - 1; +} + +int TwoPagesLayout::rightIndex(int index, int count) const +{ + return qMin(index % 2 == 0 ? index + 1 : index, count - 1); +} + +qreal TwoPagesLayout::visibleWidth(int viewportWidth) const +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + + return (viewportWidth - viewportPadding - 3.0f * pageSpacing) / 2.0f; +} + +void TwoPagesLayout::prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height) +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + qreal pageHeight = 0.0f; + + for(int index = 0; index < pageItems.count(); ++index) + { + PageItem* page = pageItems.at(index); + const QRectF boundingRect = page->boundingRect(); + + const qreal leftPos = -boundingRect.left() - boundingRect.width() - 0.5f * pageSpacing; + const qreal rightPos = -boundingRect.left() + 0.5f * pageSpacing; + + if(index == leftIndex(index)) + { + page->setPos(rightToLeft ? rightPos : leftPos, height - boundingRect.top()); + + pageHeight = boundingRect.height(); + + if(rightToLeft) + { + right = qMax(right, boundingRect.width() + 1.5f * pageSpacing); + } + else + { + left = qMin(left, -boundingRect.width() - 1.5f * pageSpacing); + } + + if(index == rightIndex(index, pageItems.count())) + { + right = qMax(right, 0.5f * pageSpacing); + height += pageHeight + pageSpacing; + } + } + else + { + page->setPos(rightToLeft ? leftPos : rightPos, height - boundingRect.top()); + + pageHeight = qMax(pageHeight, boundingRect.height()); + + if(rightToLeft) + { + left = qMin(left, -boundingRect.width() - 1.5f * pageSpacing); + } + else + { + right = qMax(right, boundingRect.width() + 1.5f * pageSpacing); + } + + height += pageHeight + pageSpacing; + } + } +} + + +int TwoPagesWithCoverPageLayout::currentPage(int page) const +{ + return page == 1 ? page : (page % 2 == 0 ? page : page - 1); +} + +int TwoPagesWithCoverPageLayout::leftIndex(int index) const +{ + return index == 0 ? index : (index % 2 != 0 ? index : index - 1); +} + +int TwoPagesWithCoverPageLayout::rightIndex(int index, int count) const +{ + return qMin(index % 2 != 0 ? index + 1 : index, count - 1); +} + + +int MultiplePagesLayout::currentPage(int page) const +{ + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return page - ((page - 1) % pagesPerRow); +} + +int MultiplePagesLayout::previousPage(int page) const +{ + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return qMax(page - pagesPerRow, 1); +} + +int MultiplePagesLayout::nextPage(int page, int count) const +{ + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return qMin(page + pagesPerRow, count); +} + +QPair MultiplePagesLayout::prefetchRange(int page, int count) const +{ + const int prefetchDistance = s_settings->documentView().prefetchDistance(); + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return qMakePair(qMax(page - pagesPerRow * (prefetchDistance / 2), 1), + qMin(page + pagesPerRow * (prefetchDistance + 1) - 1, count)); +} + +int MultiplePagesLayout::leftIndex(int index) const +{ + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return index - (index % pagesPerRow); +} + +int MultiplePagesLayout::rightIndex(int index, int count) const +{ + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return qMin(index - (index % pagesPerRow) + pagesPerRow - 1, count - 1); +} + +qreal MultiplePagesLayout::visibleWidth(int viewportWidth) const +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + const int pagesPerRow = s_settings->documentView().pagesPerRow(); + + return (viewportWidth - viewportPadding - (pagesPerRow + 1) * pageSpacing) / pagesPerRow; +} + +void MultiplePagesLayout::prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height) +{ + const qreal pageSpacing = s_settings->documentView().pageSpacing(); + qreal pageHeight = 0.0; + + for(int index = 0; index < pageItems.count(); ++index) + { + PageItem* page = pageItems.at(index); + const QRectF boundingRect = page->boundingRect(); + + const qreal leftPos = left - boundingRect.left() + pageSpacing; + const qreal rightPos = right - boundingRect.left() - boundingRect.width() - pageSpacing; + + page->setPos(rightToLeft ? rightPos : leftPos, height - boundingRect.top()); + + pageHeight = qMax(pageHeight, boundingRect.height()); + + if(rightToLeft) + { + right -= boundingRect.width() + pageSpacing; + } + else + { + left += boundingRect.width() + pageSpacing; + } + + if(index == rightIndex(index, pageItems.count())) + { + height += pageHeight + pageSpacing; + pageHeight = 0.0f; + + if(rightToLeft) + { + left = qMin(left, right - pageSpacing); + right = 0.0f; + } + else + { + right = qMax(right, left + pageSpacing); + left = 0.0f; + } + } + } +} + +} // qpdfview diff --git a/sources/documentlayout.h b/sources/documentlayout.h new file mode 100644 index 0000000..f2fd78d --- /dev/null +++ b/sources/documentlayout.h @@ -0,0 +1,143 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef DOCUMENTLAYOUT_H +#define DOCUMENTLAYOUT_H + +#include +#include + +#include "global.h" + +class QRectF; + +namespace qpdfview +{ + +class Settings; +class PageItem; + +struct DocumentLayout +{ + DocumentLayout(); + virtual ~DocumentLayout() {} + + static DocumentLayout* fromLayoutMode(LayoutMode layoutMode); + + virtual LayoutMode layoutMode() const = 0; + + virtual int currentPage(int page) const = 0; + virtual int previousPage(int page) const = 0; + virtual int nextPage(int page, int count) const = 0; + + bool isCurrentPage(const QRectF& visibleRect, const QRectF& pageRect) const; + + virtual QPair< int, int > prefetchRange(int page, int count) const = 0; + + virtual int leftIndex(int index) const = 0; + virtual int rightIndex(int index, int count) const = 0; + + virtual qreal visibleWidth(int viewportWidth) const = 0; + qreal visibleHeight(int viewportHeight) const; + + virtual void prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height) = 0; + +protected: + static Settings* s_settings; + +}; + +struct SinglePageLayout : public DocumentLayout +{ + LayoutMode layoutMode() const { return SinglePageMode; } + + int currentPage(int page) const; + int previousPage(int page) const; + int nextPage(int page, int count) const; + + QPair< int, int > prefetchRange(int page, int count) const; + + int leftIndex(int index) const; + int rightIndex(int index, int count) const; + + qreal visibleWidth(int viewportWidth) const; + + void prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height); + +}; + +struct TwoPagesLayout : public DocumentLayout +{ + LayoutMode layoutMode() const { return TwoPagesMode; } + + int currentPage(int page) const; + int previousPage(int page) const; + int nextPage(int page, int count) const; + + QPair< int, int > prefetchRange(int page, int count) const; + + int leftIndex(int index) const; + int rightIndex(int index, int count) const; + + qreal visibleWidth(int viewportWidth) const; + + void prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height); + +}; + +struct TwoPagesWithCoverPageLayout : public TwoPagesLayout +{ + LayoutMode layoutMode() const { return TwoPagesWithCoverPageMode; } + + int currentPage(int page) const; + + int leftIndex(int index) const; + int rightIndex(int index, int count) const; + +}; + +struct MultiplePagesLayout : public DocumentLayout +{ + LayoutMode layoutMode() const { return MultiplePagesMode; } + + int currentPage(int page) const; + int previousPage(int page) const; + int nextPage(int page, int count) const; + + QPair< int, int > prefetchRange(int page, int count) const; + + int leftIndex(int index) const; + int rightIndex(int index, int count) const; + + qreal visibleWidth(int viewportWidth) const; + + void prepareLayout(const QVector< PageItem* >& pageItems, bool rightToLeft, + qreal& left, qreal& right, qreal& height); + +}; + +} // qpdfview + +#endif // DOCUMENTLAYOUT_H diff --git a/sources/documentview.cpp b/sources/documentview.cpp new file mode 100644 index 0000000..af2ff45 --- /dev/null +++ b/sources/documentview.cpp @@ -0,0 +1,3109 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013 Thomas Etter +Copyright 2012-2015, 2018 Adam Reichold +Copyright 2014 Dorian Scholz +Copyright 2018 Egor Zenkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "documentview.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WITH_CUPS + +#include +#include + +#endif // WITH_CUPS + +#ifdef WITH_SYNCTEX + +#include + +#ifndef HAS_SYNCTEX_2 + +typedef synctex_scanner_t synctex_scanner_p; +typedef synctex_node_t synctex_node_p; + +#define synctex_scanner_next_result(scanner) synctex_next_result(scanner) + +#endif // HAS_SYNCTEX_2 + +#endif // WITH_SYNCTEX + +#include "settings.h" +#include "model.h" +#include "pluginhandler.h" +#include "shortcuthandler.h" +#include "thumbnailitem.h" +#include "presentationview.h" +#include "searchmodel.h" +#include "searchtask.h" +#include "miscellaneous.h" +#include "documentlayout.h" + +namespace +{ + +using namespace qpdfview; + +// taken from http://rosettacode.org/wiki/Roman_numerals/Decode#C.2B.2B +int romanToInt(const QString& text) +{ + if(text.size() == 1) + { + switch(text.at(0).toLower().toLatin1()) + { + case 'i': return 1; + case 'v': return 5; + case 'x': return 10; + case 'l': return 50; + case 'c': return 100; + case 'd': return 500; + case 'm': return 1000; + } + + return 0; + } + + int result = 0; + int previous = 0, current = 0; + + for(int i = text.size() - 1; i >= 0; --i) + { + current = romanToInt(text.at(i)); + + result += current < previous ? -current : current; + + previous = current; + } + + return result; +} + +// taken from http://rosettacode.org/wiki/Roman_numerals/Encode#C.2B.2B +QString intToRoman(int number) +{ + struct romandata_t + { + int value; + char const* numeral; + }; + + static const romandata_t romandata[] = + { + { 1000, "m" }, + { 900, "cm" }, + { 500, "d" }, + { 400, "cd" }, + { 100, "c" }, + { 90, "xc" }, + { 50, "l" }, + { 40, "xl" }, + { 10, "x" }, + { 9, "ix" }, + { 5, "v" }, + { 4, "iv" }, + { 1, "i" }, + { 0, NULL } + }; + + if(number >= 4000) + { + return QLatin1String("?"); + } + + QString result; + + for(const romandata_t* current = romandata; current->value > 0; ++current) + { + while(number >= current->value) + { + number -= current->value; + result += QLatin1String(current->numeral); + } + } + + return result; +} + +bool copyFile(QFile& source, QFile& destination) +{ + const qint64 maxSize = 4096; + qint64 size = -1; + + QScopedArrayPointer< char > buffer(new char[maxSize]); + + do + { + if((size = source.read(buffer.data(), maxSize)) < 0) + { + return false; + } + + if(destination.write(buffer.data(), size) < 0) + { + return false; + } + } + while(size > 0); + + return true; +} + +inline void adjustFileTemplateSuffix(QTemporaryFile& temporaryFile, const QString& suffix) +{ + temporaryFile.setFileTemplate(temporaryFile.fileTemplate() + QLatin1String(".") + suffix); +} + +#ifdef WITH_CUPS + +struct RemovePpdFileDeleter +{ + static inline void cleanup(const char* ppdFileName) { if(ppdFileName != 0) { QFile::remove(ppdFileName); } } +}; + +struct ClosePpdFileDeleter +{ + static inline void cleanup(ppd_file_t* ppdFile) { if(ppdFile != 0) { ppdClose(ppdFile); } } +}; + +int addCMYKorRGBColorModel(cups_dest_t* dest, int num_options, cups_option_t** options) +{ + QScopedPointer< const char, RemovePpdFileDeleter > ppdFileName(cupsGetPPD(dest->name)); + + if(ppdFileName.isNull()) + { + return num_options; + } + + QScopedPointer< ppd_file_t, ClosePpdFileDeleter > ppdFile(ppdOpenFile(ppdFileName.data())); + + if(ppdFile.isNull()) + { + return num_options; + } + + ppd_option_t* colorModel = ppdFindOption(ppdFile.data(), "ColorModel"); + + if(colorModel == 0) + { + return num_options; + } + + for(int index = 0; index < colorModel->num_choices; ++index) + { + if(qstrcmp(colorModel->choices[index].choice, "CMYK") == 0) + { + return cupsAddOption("ColorModel", "CMYK", num_options, options); + } + } + + for(int index = 0; index < colorModel->num_choices; ++index) + { + if(qstrcmp(colorModel->choices[index].choice, "RGB") == 0) + { + return cupsAddOption("ColorModel", "RGB", num_options, options); + } + } + + return num_options; +} + +#endif // WITH_CUPS + +#ifdef WITH_SYNCTEX + +DocumentView::SourceLink scanForSourceLink(const QString& filePath, const int page, QPointF pos) +{ + DocumentView::SourceLink sourceLink; + + if(synctex_scanner_p scanner = synctex_scanner_new_with_output_file(filePath.toLocal8Bit(), 0, 1)) + { + if(synctex_edit_query(scanner, page, pos.x(), pos.y()) > 0) + { + for(synctex_node_p node = synctex_scanner_next_result(scanner); node != 0; node = synctex_scanner_next_result(scanner)) + { + sourceLink.name = QString::fromLocal8Bit(synctex_scanner_get_name(scanner, synctex_node_tag(node))); + sourceLink.line = qMax(synctex_node_line(node), 0); + sourceLink.column = qMax(synctex_node_column(node), 0); + break; + } + } + + synctex_scanner_free(scanner); + } + + return sourceLink; +} + +#endif // WITH_SYNCTEX + +inline bool modifiersAreActive(const QWheelEvent* event, Qt::KeyboardModifiers modifiers) +{ + if(modifiers == Qt::NoModifier) + { + return false; + } + + return event->modifiers() == modifiers || (event->buttons() & modifiers) != 0; +} + +inline bool modifiersUseMouseButton(Settings* settings, Qt::MouseButton mouseButton) +{ + return ((settings->documentView().zoomModifiers() | settings->documentView().rotateModifiers() | settings->documentView().scrollModifiers()) & mouseButton) != 0; +} + +inline void adjustScaleFactor(RenderParam& renderParam, qreal scaleFactor) +{ + if(!qFuzzyCompare(renderParam.scaleFactor(), scaleFactor)) + { + renderParam.setScaleFactor(scaleFactor); + } +} + +inline void setValueIfNotVisible(QScrollBar* scrollBar, int value) +{ + if(value < scrollBar->value() || value > scrollBar->value() + scrollBar->pageStep()) + { + scrollBar->setValue(value); + } +} + +inline int pageOfResult(const QModelIndex& index) +{ + return index.data(SearchModel::PageRole).toInt(); +} + +inline QRectF rectOfResult(const QModelIndex& index) +{ + return index.data(SearchModel::RectRole).toRectF(); +} + +class OutlineModel : public QAbstractItemModel +{ +public: + OutlineModel(const Model::Outline& outline, DocumentView* parent) : QAbstractItemModel(parent), + m_outline(outline) + { + } + + QModelIndex index(int row, int column, const QModelIndex& parent) const + { + if(!hasIndex(row, column, parent)) + { + return QModelIndex(); + } + + if(parent.isValid()) + { + const Model::Section* section = resolveIndex(parent); + + return createIndex(row, column, §ion->children); + } + else + { + return createIndex(row, column, &m_outline); + } + } + + QModelIndex parent(const QModelIndex& child) const + { + if(!child.isValid()) + { + return QModelIndex(); + } + + const Model::Outline* children = static_cast< const Model::Outline* >(child.internalPointer()); + + if(&m_outline != children) + { + return findParent(&m_outline, children); + } + + return QModelIndex(); + } + + int columnCount(const QModelIndex&) const + { + return 2; + } + + int rowCount(const QModelIndex& parent) const + { + if(parent.isValid()) + { + const Model::Section* section = resolveIndex(parent); + + return section->children.size(); + } + else + { + return m_outline.size(); + } + } + + QVariant data(const QModelIndex& index, int role) const + { + if(!index.isValid()) + { + return QVariant(); + } + + const Model::Section* section = resolveIndex(index); + + switch(role) + { + case Qt::DisplayRole: + switch(index.column()) + { + case 0: + return section->title; + case 1: + return pageLabel(section->link.page); + default: + return QVariant(); + } + case Model::Document::PageRole: + return section->link.page; + case Model::Document::LeftRole: + return section->link.left; + case Model::Document::TopRole: + return section->link.top; + case Model::Document::FileNameRole: + return section->link.urlOrFileName; + case Model::Document::ExpansionRole: + return m_expanded.contains(section); + default: + return QVariant(); + } + } + + bool setData(const QModelIndex& index, const QVariant& value, int role) + { + if(!index.isValid() || role != Model::Document::ExpansionRole) + { + return false; + } + + const Model::Section* section = resolveIndex(index); + + if(value.toBool()) + { + m_expanded.insert(section); + } + else + { + m_expanded.remove(section); + } + + return true; + } + +private: + const Model::Outline m_outline; + + DocumentView* documentView() const + { + return static_cast< DocumentView* >(QObject::parent()); + } + + QString pageLabel(int pageNumber) const + { + return documentView()->pageLabelFromNumber(pageNumber); + } + + QSet< const Model::Section* > m_expanded; + + const Model::Section* resolveIndex(const QModelIndex& index) const + { + return &static_cast< const Model::Outline* >(index.internalPointer())->at(index.row()); + } + + QModelIndex createIndex(int row, int column, const Model::Outline* outline) const + { + return QAbstractItemModel::createIndex(row, column, const_cast< void* >(static_cast< const void* >(outline))); + } + + QModelIndex findParent(const Model::Outline* outline, const Model::Outline* children) const + { + for(Model::Outline::const_iterator section = outline->begin(); section != outline->end(); ++section) + { + if(§ion->children == children) + { + return createIndex(section - outline->begin(), 0, outline); + } + } + + for(Model::Outline::const_iterator section = outline->begin(); section != outline->end(); ++section) + { + const QModelIndex parent = findParent(§ion->children, children); + + if(parent.isValid()) + { + return parent; + } + } + + return QModelIndex(); + } + +}; + +class FallbackOutlineModel : public QAbstractTableModel +{ +public: + FallbackOutlineModel(DocumentView* parent) : QAbstractTableModel(parent) + { + } + + int columnCount(const QModelIndex&) const + { + return 2; + } + + int rowCount(const QModelIndex& parent) const + { + if(parent.isValid()) + { + return 0; + } + + return numberOfPages(); + } + + QVariant data(const QModelIndex& index, int role) const + { + if(!index.isValid()) + { + return QVariant(); + } + + const int pageNumber = index.row() + 1; + + switch(role) + { + case Qt::DisplayRole: + switch(index.column()) + { + case 0: + return DocumentView::tr("Page %1").arg(pageLabel(pageNumber)); + case 1: + return pageLabel(pageNumber); + default: + return QVariant(); + } + case Model::Document::PageRole: + return pageNumber; + case Model::Document::LeftRole: + case Model::Document::TopRole: + return qQNaN(); + default: + return QVariant(); + } + } + +private: + DocumentView* documentView() const + { + return static_cast< DocumentView* >(QObject::parent()); + } + + int numberOfPages() const + { + return documentView()->numberOfPages(); + } + + QString pageLabel(int pageNumber) const + { + return documentView()->pageLabelFromNumber(pageNumber); + } + +}; + +class PropertiesModel : public QAbstractTableModel +{ +public: + PropertiesModel(const Model::Properties& properties, DocumentView* parent = 0) : QAbstractTableModel(parent), + m_properties(properties) + { + } + + int columnCount(const QModelIndex&) const + { + return 2; + } + + int rowCount(const QModelIndex& parent) const + { + if(parent.isValid()) + { + return 0; + } + + return m_properties.size(); + } + + QVariant data(const QModelIndex& index, int role) const + { + if(!index.isValid() || role != Qt::DisplayRole) + { + return QVariant(); + } + + switch (index.column()) + { + case 0: + return m_properties[index.row()].first; + case 1: + return m_properties[index.row()].second; + default: + return QVariant(); + } + } + +private: + const Model::Properties m_properties; + +}; + +void addProperty(Model::Properties& properties, const char* name, const QString& value) +{ + properties.append(qMakePair(DocumentView::tr(name), value)); +} + +QString formatFileSize(qint64 size) +{ + static const char* const units[] = { "B", "kB", "MB", "GB" }; + static const char* const* const lastUnit = &units[sizeof(units) / sizeof(units[0]) - 1]; + const char* const* unit = &units[0]; + + while(size > 2048 && unit < lastUnit) + { + size /= 1024; + unit++; + } + + return QString("%1 %2").arg(size).arg(*unit); +} + +void addFileProperties(Model::Properties& properties, const QFileInfo& fileInfo) +{ + addProperty(properties, "File path", fileInfo.absoluteFilePath()); + addProperty(properties, "File size", formatFileSize(fileInfo.size())); + addProperty(properties, "File created", fileInfo.created().toString()); + addProperty(properties, "File last modified", fileInfo.lastModified().toString()); + addProperty(properties, "File owner", fileInfo.owner()); + addProperty(properties, "File group", fileInfo.owner()); +} + +void appendToPath(const QModelIndex& index, QByteArray& path) +{ + path.append(index.data(Qt::DisplayRole).toByteArray()).append('\0'); +} + +void saveExpandedPaths(const QAbstractItemModel* model, QSet< QByteArray >& paths, const QModelIndex& index = QModelIndex(), QByteArray path = QByteArray()) +{ + appendToPath(index, path); + + if(model->data(index, Model::Document::ExpansionRole).toBool()) + { + paths.insert(path); + } + + for(int row = 0, rowCount = model->rowCount(index); row < rowCount; ++row) + { + saveExpandedPaths(model, paths, model->index(row, 0, index), path); + } +} + +void restoreExpandedPaths(QAbstractItemModel* model, const QSet< QByteArray >& paths, const QModelIndex& index = QModelIndex(), QByteArray path = QByteArray()) +{ + appendToPath(index, path); + + if(paths.contains(path)) + { + model->setData(index, true, Model::Document::ExpansionRole); + } + + for(int row = 0, rowCount = model->rowCount(index); row < rowCount; ++row) + { + restoreExpandedPaths(model, paths, model->index(row, 0, index), path); + } +} + +} // anonymous + +namespace qpdfview +{ + +class DocumentView::VerticalScrollBarChangedBlocker +{ + Q_DISABLE_COPY(VerticalScrollBarChangedBlocker) + +private: + DocumentView* const that; + +public: + + VerticalScrollBarChangedBlocker(DocumentView* that) : that(that) + { + that->m_verticalScrollBarChangedBlocked = true; + } + + ~VerticalScrollBarChangedBlocker() + { + that->m_verticalScrollBarChangedBlocked = false; + } + +}; + +Settings* DocumentView::s_settings = 0; +ShortcutHandler* DocumentView::s_shortcutHandler = 0; +SearchModel* DocumentView::s_searchModel = 0; + +DocumentView::DocumentView(QWidget* parent) : QGraphicsView(parent), + m_autoRefreshWatcher(0), + m_autoRefreshTimer(0), + m_prefetchTimer(0), + m_document(0), + m_pages(), + m_fileInfo(), + m_wasModified(false), + m_currentPage(-1), + m_firstPage(-1), + m_past(), + m_future(), + m_layout(new SinglePageLayout), + m_continuousMode(false), + m_scaleMode(ScaleFactorMode), + m_scaleFactor(1.0), + m_rotation(RotateBy0), + m_renderFlags(0), + m_highlightAll(false), + m_rubberBandMode(ModifiersMode), + m_pageItems(), + m_thumbnailItems(), + m_highlight(0), + m_thumbnailsViewportSize(), + m_thumbnailsOrientation(Qt::Vertical), + m_thumbnailsScene(0), + m_outlineModel(0), + m_propertiesModel(0), + m_verticalScrollBarChangedBlocked(false), + m_currentResult(), + m_searchTask(0) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + if(s_shortcutHandler == 0) + { + s_shortcutHandler = ShortcutHandler::instance(); + } + + if(s_searchModel == 0) + { + s_searchModel = SearchModel::instance(); + } + + setScene(new QGraphicsScene(this)); + + setFocusPolicy(Qt::StrongFocus); + setAcceptDrops(false); + setDragMode(QGraphicsView::ScrollHandDrag); + + connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(on_verticalScrollBar_valueChanged())); + + m_thumbnailsScene = new QGraphicsScene(this); + + // highlight + + m_highlight = new QGraphicsRectItem(); + m_highlight->setGraphicsEffect(new GraphicsCompositionModeEffect(QPainter::CompositionMode_Multiply, this)); + + m_highlight->setVisible(false); + scene()->addItem(m_highlight); + + // search + + m_searchTask = new SearchTask(this); + + connect(m_searchTask, SIGNAL(finished()), SIGNAL(searchFinished())); + + connect(m_searchTask, SIGNAL(progressChanged(int)), SLOT(on_searchTask_progressChanged(int))); + connect(m_searchTask, SIGNAL(resultsReady(int,QList)), SLOT(on_searchTask_resultsReady(int,QList))); + + // auto-refresh + + m_autoRefreshWatcher = new QFileSystemWatcher(this); + + m_autoRefreshTimer = new QTimer(this); + m_autoRefreshTimer->setInterval(s_settings->documentView().autoRefreshTimeout()); + m_autoRefreshTimer->setSingleShot(true); + + connect(m_autoRefreshWatcher, SIGNAL(fileChanged(QString)), m_autoRefreshTimer, SLOT(start())); + + connect(m_autoRefreshTimer, SIGNAL(timeout()), this, SLOT(on_autoRefresh_timeout())); + + // prefetch + + m_prefetchTimer = new QTimer(this); + m_prefetchTimer->setInterval(s_settings->documentView().prefetchTimeout()); + m_prefetchTimer->setSingleShot(true); + + connect(this, SIGNAL(currentPageChanged(int)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(layoutModeChanged(LayoutMode)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(scaleModeChanged(ScaleMode)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(scaleFactorChanged(qreal)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(rotationChanged(Rotation)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(renderFlagsChanged(qpdfview::RenderFlags)), m_prefetchTimer, SLOT(start())); + + connect(m_prefetchTimer, SIGNAL(timeout()), SLOT(on_prefetch_timeout())); + + // settings + + m_continuousMode = s_settings->documentView().continuousMode(); + m_layout.reset(DocumentLayout::fromLayoutMode(s_settings->documentView().layoutMode())); + m_rightToLeftMode = s_settings->documentView().rightToLeftMode(); + + m_scaleMode = s_settings->documentView().scaleMode(); + m_scaleFactor = s_settings->documentView().scaleFactor(); + m_rotation = s_settings->documentView().rotation(); + + if(s_settings->documentView().invertColors()) + { + m_renderFlags |= InvertColors; + } + + if(s_settings->documentView().convertToGrayscale()) + { + m_renderFlags |= ConvertToGrayscale; + } + + if(s_settings->documentView().trimMargins()) + { + m_renderFlags |= TrimMargins; + } + + switch(s_settings->documentView().compositionMode()) + { + default: + case DefaultCompositionMode: + break; + case DarkenWithPaperColorMode: + m_renderFlags |= DarkenWithPaperColor; + break; + case LightenWithPaperColorMode: + m_renderFlags |= LightenWithPaperColor; + break; + } + + m_highlightAll = s_settings->documentView().highlightAll(); +} + +DocumentView::~DocumentView() +{ + m_searchTask->cancel(); + m_searchTask->wait(); + + s_searchModel->clearResults(this); + + qDeleteAll(m_pageItems); + qDeleteAll(m_thumbnailItems); + + qDeleteAll(m_pages); + delete m_document; +} + +void DocumentView::setFirstPage(int firstPage) +{ + if(m_firstPage != firstPage) + { + m_firstPage = firstPage; + + for(int index = 0; index < m_thumbnailItems.count(); ++index) + { + m_thumbnailItems.at(index)->setText(pageLabelFromNumber(index + 1)); + } + + prepareThumbnailsScene(); + + emit numberOfPagesChanged(m_pages.count()); + emit currentPageChanged(m_currentPage); + } +} + +QString DocumentView::defaultPageLabelFromNumber(int number) const +{ + QLocale modifiedLocale = locale(); + + modifiedLocale.setNumberOptions(modifiedLocale.numberOptions() | QLocale::OmitGroupSeparator); + + return modifiedLocale.toString(number); +} + +QString DocumentView::pageLabelFromNumber(int number) const +{ + QString label; + + if(hasFrontMatter()) + { + if(number < m_firstPage) + { + label = number < 4000 ? intToRoman(number) : defaultPageLabelFromNumber(-number); + } + else + { + label = defaultPageLabelFromNumber(number - m_firstPage + 1); + } + } + else if(number >= 1 && number <= m_pages.count()) + { + const QString& pageLabel = m_pages.at(number - 1)->label(); + + if(number != pageLabel.toInt()) + { + label = pageLabel; + } + } + + if(label.isEmpty()) + { + label = defaultPageLabelFromNumber(number); + } + + return label; +} + +int DocumentView::pageNumberFromLabel(const QString& label) const +{ + if(hasFrontMatter()) + { + bool ok = false; + int value = locale().toInt(label, &ok); + + if(ok) + { + if(value < 0) + { + value = -value; // front matter + } + else + { + value = value + m_firstPage - 1; // body matter + } + } + else + { + value = romanToInt(label); + } + + return value; + } + + for(int index = 0; index < m_pages.count(); ++index) + { + if(m_pages.at(index)->label() == label) + { + return index + 1; + } + } + + return locale().toInt(label); +} + +QString DocumentView::title() const +{ + QString title; + + if(s_settings->mainWindow().documentTitleAsTabTitle()) + { + for(int row = 0, rowCount = m_propertiesModel->rowCount(); row < rowCount; ++row) + { + const QString key = m_propertiesModel->index(row, 0).data().toString(); + const QString value = m_propertiesModel->index(row, 1).data().toString(); + + if(QLatin1String("Title") == key) + { + title = value; + break; + } + } + } + + if(title.isEmpty()) + { + title = m_fileInfo.completeBaseName(); + } + + return title; +} + +QStringList DocumentView::openFilter() +{ + return PluginHandler::openFilter(); +} + +QStringList DocumentView::saveFilter() const +{ + return m_document->saveFilter(); +} + +bool DocumentView::canSave() const +{ + return m_document->canSave(); +} + +void DocumentView::setContinuousMode(bool continuousMode) +{ + if(m_continuousMode != continuousMode) + { + m_continuousMode = continuousMode; + + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + adjustScrollBarPolicy(); + + prepareView(left, top); + + emit continuousModeChanged(m_continuousMode); + + s_settings->documentView().setContinuousMode(m_continuousMode); + } +} + +LayoutMode DocumentView::layoutMode() const +{ + return m_layout->layoutMode(); +} + +void DocumentView::setLayoutMode(LayoutMode layoutMode) +{ + if(m_layout->layoutMode() != layoutMode && layoutMode >= 0 && layoutMode < NumberOfLayoutModes) + { + m_layout.reset(DocumentLayout::fromLayoutMode(layoutMode)); + + if(m_currentPage != m_layout->currentPage(m_currentPage)) + { + m_currentPage = m_layout->currentPage(m_currentPage); + + emit currentPageChanged(m_currentPage); + } + + prepareScene(); + prepareView(); + + emit layoutModeChanged(layoutMode); + + s_settings->documentView().setLayoutMode(layoutMode); + } +} + +void DocumentView::setRightToLeftMode(bool rightToLeftMode) +{ + if(m_rightToLeftMode != rightToLeftMode) + { + m_rightToLeftMode = rightToLeftMode; + + prepareScene(); + prepareView(); + + emit rightToLeftModeChanged(m_rightToLeftMode); + + s_settings->documentView().setRightToLeftMode(m_rightToLeftMode); + } +} + +void DocumentView::setScaleMode(ScaleMode scaleMode) +{ + if(m_scaleMode != scaleMode && scaleMode >= 0 && scaleMode < NumberOfScaleModes) + { + m_scaleMode = scaleMode; + + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + adjustScrollBarPolicy(); + + prepareScene(); + prepareView(left, top); + + emit scaleModeChanged(m_scaleMode); + + s_settings->documentView().setScaleMode(m_scaleMode); + } +} + +void DocumentView::setScaleFactor(qreal scaleFactor) +{ + if(!qFuzzyCompare(m_scaleFactor, scaleFactor) + && scaleFactor >= s_settings->documentView().minimumScaleFactor() + && scaleFactor <= s_settings->documentView().maximumScaleFactor()) + { + m_scaleFactor = scaleFactor; + + if(m_scaleMode == ScaleFactorMode) + { + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + prepareScene(); + prepareView(left, top); + } + + emit scaleFactorChanged(m_scaleFactor); + + s_settings->documentView().setScaleFactor(m_scaleFactor); + } +} + +void DocumentView::setRotation(Rotation rotation) +{ + if(m_rotation != rotation && rotation >= 0 && rotation < NumberOfRotations) + { + m_rotation = rotation; + + prepareScene(); + prepareView(); + + emit rotationChanged(m_rotation); + + s_settings->documentView().setRotation(m_rotation); + } +} + +void DocumentView::setRenderFlags(qpdfview::RenderFlags renderFlags) +{ + if(m_renderFlags != renderFlags) + { + const qpdfview::RenderFlags changedFlags = m_renderFlags ^ renderFlags; + + m_renderFlags = renderFlags; + + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + prepareScene(); + prepareView(left, top); + + prepareThumbnailsScene(); + + if(changedFlags.testFlag(InvertColors)) + { + prepareBackground(); + + emit invertColorsChanged(invertColors()); + + s_settings->documentView().setInvertColors(invertColors()); + } + + if(changedFlags.testFlag(ConvertToGrayscale)) + { + emit convertToGrayscaleChanged(convertToGrayscale()); + + s_settings->documentView().setConvertToGrayscale(convertToGrayscale()); + } + + if(changedFlags.testFlag(TrimMargins)) + { + emit trimMarginsChanged(trimMargins()); + + s_settings->documentView().setTrimMargins(trimMargins()); + } + + if(changedFlags.testFlag(DarkenWithPaperColor) || changedFlags.testFlag(LightenWithPaperColor)) + { + emit compositionModeChanged(compositionMode()); + + s_settings->documentView().setCompositionMode(compositionMode()); + } + + emit renderFlagsChanged(m_renderFlags); + } +} + +void DocumentView::setRenderFlag(qpdfview::RenderFlag renderFlag, bool enabled) +{ + if(enabled) + { + setRenderFlags(m_renderFlags | renderFlag); + } + else + { + setRenderFlags(m_renderFlags & ~renderFlag); + } +} + +CompositionMode DocumentView::compositionMode() const +{ + if(m_renderFlags.testFlag(DarkenWithPaperColor)) + { + return DarkenWithPaperColorMode; + } + else if(m_renderFlags.testFlag(LightenWithPaperColor)) + { + return LightenWithPaperColorMode; + } + else + { + return DefaultCompositionMode; + } +} + +void DocumentView::setCompositionMode(CompositionMode compositionMode) +{ + switch(compositionMode) + { + default: + case DefaultCompositionMode: + setRenderFlags((renderFlags() & ~DarkenWithPaperColor) & ~LightenWithPaperColor); + break; + case DarkenWithPaperColorMode: + setRenderFlags((renderFlags() | DarkenWithPaperColor) & ~LightenWithPaperColor); + break; + case LightenWithPaperColorMode: + setRenderFlags((renderFlags() & ~DarkenWithPaperColor) | LightenWithPaperColor); + break; + } +} + +void DocumentView::setHighlightAll(bool highlightAll) +{ + if(m_highlightAll != highlightAll) + { + m_highlightAll = highlightAll; + + if(m_highlightAll) + { + for(int index = 0; index < m_pages.count(); ++index) + { + const QList< QRectF >& results = s_searchModel->resultsOnPage(this, index + 1); + + m_pageItems.at(index)->setHighlights(results); + m_thumbnailItems.at(index)->setHighlights(results); + } + } + else + { + for(int index = 0; index < m_pages.count(); ++index) + { + m_pageItems.at(index)->setHighlights(QList< QRectF >()); + m_thumbnailItems.at(index)->setHighlights(QList< QRectF >()); + } + } + + emit highlightAllChanged(m_highlightAll); + + s_settings->documentView().setHighlightAll(highlightAll); + } +} + +void DocumentView::setRubberBandMode(RubberBandMode rubberBandMode) +{ + if(m_rubberBandMode != rubberBandMode && rubberBandMode >= 0 && rubberBandMode < NumberOfRubberBandModes) + { + m_rubberBandMode = rubberBandMode; + + foreach(PageItem* page, m_pageItems) + { + page->setRubberBandMode(m_rubberBandMode); + } + + emit rubberBandModeChanged(m_rubberBandMode); + } +} + +void DocumentView::setThumbnailsViewportSize(QSize thumbnailsViewportSize) +{ + if(m_thumbnailsViewportSize != thumbnailsViewportSize) + { + m_thumbnailsViewportSize = thumbnailsViewportSize; + + prepareThumbnailsScene(); + } +} + +void DocumentView::setThumbnailsOrientation(Qt::Orientation thumbnailsOrientation) +{ + if(m_thumbnailsOrientation != thumbnailsOrientation) + { + m_thumbnailsOrientation = thumbnailsOrientation; + + prepareThumbnailsScene(); + } +} + +QSet< QByteArray > DocumentView::saveExpandedPaths() const +{ + QSet< QByteArray > expandedPaths; + + ::saveExpandedPaths(m_outlineModel.data(), expandedPaths); + + return expandedPaths; +} + +void DocumentView::restoreExpandedPaths(const QSet< QByteArray >& expandedPaths) +{ + ::restoreExpandedPaths(m_outlineModel.data(), expandedPaths); +} + +QAbstractItemModel* DocumentView::fontsModel() const +{ + return m_document->fonts(); +} + +bool DocumentView::searchWasCanceled() const +{ + return m_searchTask->wasCanceled(); +} + +int DocumentView::searchProgress() const +{ + return m_searchTask->progress(); +} + +QString DocumentView::searchText() const +{ + return m_searchTask->text(); +} + +bool DocumentView::searchMatchCase() const +{ + return m_searchTask->matchCase(); +} + +bool DocumentView::searchWholeWords() const +{ + return m_searchTask->wholeWords(); +} + +QPair< QString, QString > DocumentView::searchContext(int page, const QRectF& rect) const +{ + if(page < 1 || page > m_pages.size() || rect.isEmpty()) + { + return qMakePair(QString(), QString()); + } + + // Fetch at most half of a line as centered on the given rectangle as possible. + const qreal pageWidth = m_pages.at(page - 1)->size().width(); + const qreal width = qMax(rect.width(), pageWidth / qreal(2)); + const qreal x = qBound(qreal(0), rect.x() + rect.width() / qreal(2) - width / qreal(2), pageWidth - width); + + const QRectF surroundingRect(x, rect.top(), width, rect.height()); + + const QString& matchedText = m_pages.at(page - 1)->cachedText(rect); + const QString& surroundingText = m_pages.at(page - 1)->cachedText(surroundingRect); + + return qMakePair(matchedText, surroundingText); +} + +bool DocumentView::hasSearchResults() +{ + return s_searchModel->hasResults(this); +} + +QString DocumentView::resolveFileName(QString fileName) const +{ + if(QFileInfo(fileName).isRelative()) + { + fileName = m_fileInfo.dir().filePath(fileName); + } + + return fileName; +} + +QUrl DocumentView::resolveUrl(QUrl url) const +{ + const QString path = url.path(); + + if(url.isRelative() && QFileInfo(path).isRelative()) + { + url.setPath(m_fileInfo.dir().filePath(path)); + } + + return url; +} + +DocumentView::SourceLink DocumentView::sourceLink(QPoint pos) +{ + SourceLink sourceLink; + +#ifdef WITH_SYNCTEX + + if(const PageItem* page = dynamic_cast< PageItem* >(itemAt(pos))) + { + const int sourcePage = page->index() + 1; + const QPointF sourcePos = page->sourcePos(page->mapFromScene(mapToScene(pos))); + + sourceLink = scanForSourceLink(m_fileInfo.absoluteFilePath(), sourcePage, sourcePos); + } + +#else + + Q_UNUSED(pos); + +#endif // WITH_SYNCTEX + + return sourceLink; +} + +void DocumentView::openInSourceEditor(const DocumentView::SourceLink& sourceLink) +{ + if(!s_settings->documentView().sourceEditor().isEmpty()) + { + const QString absoluteFilePath = m_fileInfo.dir().absoluteFilePath(sourceLink.name); + const QString sourceEditorCommand = s_settings->documentView().sourceEditor().arg(absoluteFilePath, QString::number(sourceLink.line), QString::number(sourceLink.column)); + + QProcess::startDetached(sourceEditorCommand); + } + else + { + QMessageBox::information(this, tr("Information"), tr("The source editor has not been set.")); + } +} + +void DocumentView::show() +{ + QGraphicsView::show(); + + prepareView(); +} + +bool DocumentView::open(const QString& filePath) +{ + Model::Document* document = PluginHandler::instance()->loadDocument(filePath); + + if(document != 0) + { + QVector< Model::Page* > pages; + + if(!checkDocument(filePath, document, pages)) + { + delete document; + qDeleteAll(pages); + + return false; + } + + m_fileInfo.setFile(filePath); + m_wasModified = false; + + m_currentPage = 1; + + m_past.clear(); + m_future.clear(); + + prepareDocument(document, pages); + + loadDocumentDefaults(); + + adjustScrollBarPolicy(); + + prepareScene(); + prepareView(); + + prepareThumbnailsScene(); + + emit documentChanged(); + + emit numberOfPagesChanged(m_pages.count()); + emit currentPageChanged(m_currentPage); + + emit canJumpChanged(false, false); + + emit continuousModeChanged(m_continuousMode); + emit layoutModeChanged(m_layout->layoutMode()); + emit rightToLeftModeChanged(m_rightToLeftMode); + } + + return document != 0; +} + +bool DocumentView::refresh() +{ + Model::Document* document = PluginHandler::instance()->loadDocument(m_fileInfo.filePath()); + + if(document != 0) + { + QVector< Model::Page* > pages; + + if(!checkDocument(m_fileInfo.filePath(), document, pages)) + { + delete document; + qDeleteAll(pages); + + return false; + } + + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + m_wasModified = false; + + m_currentPage = qMin(m_currentPage, document->numberOfPages()); + + QSet< QByteArray > expandedPaths; + ::saveExpandedPaths(m_outlineModel.data(), expandedPaths); + + prepareDocument(document, pages); + + ::restoreExpandedPaths(m_outlineModel.data(), expandedPaths); + + prepareScene(); + prepareView(left, top); + + prepareThumbnailsScene(); + + emit documentChanged(); + + emit numberOfPagesChanged(m_pages.count()); + emit currentPageChanged(m_currentPage); + } + + return document != 0; +} + +bool DocumentView::save(const QString& filePath, bool withChanges) +{ + // Save document to temporary file... + QTemporaryFile temporaryFile; + + adjustFileTemplateSuffix(temporaryFile, QFileInfo(filePath).suffix()); + + if(!temporaryFile.open()) + { + return false; + } + + temporaryFile.close(); + + if(!m_document->save(temporaryFile.fileName(), withChanges)) + { + return false; + } + + // Copy from temporary file to actual file... + QFile file(filePath); + + if(!temporaryFile.open()) + { + return false; + } + + if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) + { + return false; + } + + if(!copyFile(temporaryFile, file)) + { + return false; + } + + if(withChanges) + { + m_wasModified = false; + } + + return true; +} + +bool DocumentView::print(QPrinter* printer, const PrintOptions& printOptions) +{ + const int fromPage = printer->fromPage() != 0 ? printer->fromPage() : 1; + const int toPage = printer->toPage() != 0 ? printer->toPage() : m_pages.count(); + +#ifdef WITH_CUPS + + if(m_document->canBePrintedUsingCUPS()) + { + return printUsingCUPS(printer, printOptions, fromPage, toPage); + } + +#endif // WITH_CUPS + + return printUsingQt(printer, printOptions, fromPage, toPage); +} + +void DocumentView::previousPage() +{ + jumpToPage(m_layout->previousPage(m_currentPage)); +} + +void DocumentView::nextPage() +{ + jumpToPage(m_layout->nextPage(m_currentPage, m_pages.count())); +} + +void DocumentView::firstPage() +{ + jumpToPage(1); +} + +void DocumentView::lastPage() +{ + jumpToPage(m_pages.count()); +} + +void DocumentView::jumpToPage(int page, bool trackChange, qreal newLeft, qreal newTop) +{ + if(page >= 1 && page <= m_pages.count()) + { + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + if(qIsNaN(newLeft)) + { + newLeft = qBound(qreal(0.0), left, qreal(1.0)); + } + + if(qIsNaN(newTop)) + { + newTop = qBound(qreal(0.0), top, qreal(1.0)); + } + + if(m_currentPage != m_layout->currentPage(page) || qAbs(left - newLeft) > 0.01 || qAbs(top - newTop) > 0.01) + { + if(trackChange) + { + m_past.append(Position(m_currentPage, left, top)); + m_future.clear(); + + emit canJumpChanged(true, false); + } + + m_currentPage = m_layout->currentPage(page); + + prepareView(newLeft, newTop, false, page); + + emit currentPageChanged(m_currentPage, trackChange); + } + } +} + +bool DocumentView::canJumpBackward() const +{ + return !m_past.isEmpty(); +} + +void DocumentView::jumpBackward() +{ + if(!m_past.isEmpty()) + { + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + m_future.prepend(Position(m_currentPage, left, top)); + + const Position pos = m_past.takeLast(); + jumpToPage(pos.page, false, pos.left, pos.top); + + emit canJumpChanged(!m_past.isEmpty(), !m_future.isEmpty()); + } +} + +bool DocumentView::canJumpForward() const +{ + return !m_future.isEmpty(); +} + +void DocumentView::jumpForward() +{ + if(!m_future.isEmpty()) + { + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + m_past.append(Position(m_currentPage, left, top)); + + const Position pos = m_future.takeFirst(); + jumpToPage(pos.page, false, pos.left, pos.top); + + emit canJumpChanged(!m_past.isEmpty(), !m_future.isEmpty()); + } +} + +void DocumentView::temporaryHighlight(int page, const QRectF& highlight) +{ + if(page >= 1 && page <= m_pages.count() && !highlight.isNull()) + { + prepareHighlight(page - 1, highlight); + + QTimer::singleShot(s_settings->documentView().highlightDuration(), this, SLOT(on_temporaryHighlight_timeout())); + } +} + +void DocumentView::startSearch(const QString& text, bool matchCase, bool wholeWords) +{ + cancelSearch(); + clearResults(); + + m_searchTask->start(m_pages, text, matchCase, wholeWords, m_currentPage, s_settings->documentView().parallelSearchExecution()); +} + +void DocumentView::cancelSearch() +{ + m_searchTask->cancel(); + m_searchTask->wait(); +} + +void DocumentView::clearResults() +{ + s_searchModel->clearResults(this); + + m_currentResult = QModelIndex(); + + m_highlight->setVisible(false); + + foreach(PageItem* page, m_pageItems) + { + page->setHighlights(QList< QRectF >()); + } + + foreach(ThumbnailItem* page, m_thumbnailItems) + { + page->setHighlights(QList< QRectF >()); + } + + if(s_settings->documentView().limitThumbnailsToResults()) + { + prepareThumbnailsScene(); + } +} + +void DocumentView::findPrevious() +{ + checkResult(); + + m_currentResult = s_searchModel->findResult(this, m_currentResult, m_currentPage, SearchModel::FindPrevious); + + applyResult(); +} + +void DocumentView::findNext() +{ + checkResult(); + + m_currentResult = s_searchModel->findResult(this, m_currentResult, m_currentPage, SearchModel::FindNext); + + applyResult(); +} + +void DocumentView::findResult(const QModelIndex& index) +{ + const int page = pageOfResult(index); + const QRectF rect = rectOfResult(index); + + if(page >= 1 && page <= m_pages.count() && !rect.isEmpty()) + { + m_currentResult = index; + + applyResult(); + } +} + +void DocumentView::zoomIn() +{ + if(scaleMode() != ScaleFactorMode) + { + const qreal currentScaleFactor = m_pageItems.at(m_currentPage - 1)->renderParam().scaleFactor(); + + setScaleFactor(qMin(currentScaleFactor * s_settings->documentView().zoomFactor(), + s_settings->documentView().maximumScaleFactor())); + + setScaleMode(ScaleFactorMode); + } + else + { + setScaleFactor(qMin(m_scaleFactor * s_settings->documentView().zoomFactor(), + s_settings->documentView().maximumScaleFactor())); + } +} + +void DocumentView::zoomOut() +{ + if(scaleMode() != ScaleFactorMode) + { + const qreal currentScaleFactor = m_pageItems.at(m_currentPage - 1)->renderParam().scaleFactor(); + + setScaleFactor(qMax(currentScaleFactor / s_settings->documentView().zoomFactor(), + s_settings->documentView().minimumScaleFactor())); + + setScaleMode(ScaleFactorMode); + } + else + { + setScaleFactor(qMax(m_scaleFactor / s_settings->documentView().zoomFactor(), + s_settings->documentView().minimumScaleFactor())); + } +} + +void DocumentView::originalSize() +{ + setScaleFactor(1.0); + setScaleMode(ScaleFactorMode); +} + +void DocumentView::rotateLeft() +{ + switch(m_rotation) + { + default: + case RotateBy0: + setRotation(RotateBy270); + break; + case RotateBy90: + setRotation(RotateBy0); + break; + case RotateBy180: + setRotation(RotateBy90); + break; + case RotateBy270: + setRotation(RotateBy180); + break; + } +} + +void DocumentView::rotateRight() +{ + switch(m_rotation) + { + default: + case RotateBy0: + setRotation(RotateBy90); + break; + case RotateBy90: + setRotation(RotateBy180); + break; + case RotateBy180: + setRotation(RotateBy270); + break; + case RotateBy270: + setRotation(RotateBy0); + break; + } +} + +void DocumentView::startPresentation() +{ + const int screen = s_settings->presentationView().screen(); + + PresentationView* presentationView = new PresentationView(m_pages); + + presentationView->setGeometry(QApplication::desktop()->screenGeometry(screen)); + + presentationView->show(); + presentationView->setAttribute(Qt::WA_DeleteOnClose); + + connect(this, SIGNAL(destroyed()), presentationView, SLOT(close())); + connect(this, SIGNAL(documentChanged()), presentationView, SLOT(close())); + + presentationView->setRotation(rotation()); + presentationView->setRenderFlags(renderFlags()); + + presentationView->jumpToPage(currentPage(), false); + + if(s_settings->presentationView().synchronize()) + { + connect(this, SIGNAL(currentPageChanged(int,bool)), presentationView, SLOT(jumpToPage(int,bool))); + connect(presentationView, SIGNAL(currentPageChanged(int,bool)), this, SLOT(jumpToPage(int,bool))); + } +} + +void DocumentView::on_verticalScrollBar_valueChanged() +{ + if(m_verticalScrollBarChangedBlocked || !m_continuousMode) + { + return; + } + + int currentPage = -1; + const QRectF visibleRect = mapToScene(viewport()->rect()).boundingRect(); + + for(int index = 0, count = m_pageItems.count(); index < count; ++index) + { + PageItem* page = m_pageItems.at((m_currentPage - 1 + index) % count); + + const int pageNumber = page->index() + 1; + const QRectF pageRect = page->boundingRect().translated(page->pos()); + + if(!pageRect.intersects(visibleRect)) + { + page->cancelRender(); + } + else if(currentPage == -1 && + m_layout->currentPage(pageNumber) == pageNumber && + m_layout->isCurrentPage(visibleRect, pageRect)) + { + currentPage = pageNumber; + } + } + + if(currentPage != -1 && m_currentPage != currentPage) + { + m_currentPage = currentPage; + + emit currentPageChanged(m_currentPage); + + if(s_settings->documentView().highlightCurrentThumbnail()) + { + for(int index = 0; index < m_thumbnailItems.count(); ++index) + { + m_thumbnailItems.at(index)->setHighlighted(index == m_currentPage - 1); + } + } + } +} + +void DocumentView::on_autoRefresh_timeout() +{ + if(m_fileInfo.exists()) + { + refresh(); + } + else + { + m_wasModified = true; + + emit documentModified(); + } +} + +void DocumentView::on_prefetch_timeout() +{ + const QPair< int, int > prefetchRange = m_layout->prefetchRange(m_currentPage, m_pages.count()); + + const int maxCost = prefetchRange.second - prefetchRange.first + 1; + int cost = 0; + + for(int index = m_currentPage - 1; index <= prefetchRange.second - 1; ++index) + { + cost += m_pageItems.at(index)->startRender(true); + + if(cost >= maxCost) + { + return; + } + } + + for(int index = m_currentPage - 1; index >= prefetchRange.first - 1; --index) + { + cost += m_pageItems.at(index)->startRender(true); + + if(cost >= maxCost) + { + return; + } + } +} + +void DocumentView::on_temporaryHighlight_timeout() +{ + m_highlight->setVisible(false); +} + +void DocumentView::on_searchTask_progressChanged(int progress) +{ + s_searchModel->updateProgress(this); + + emit searchProgressChanged(progress); +} + +void DocumentView::on_searchTask_resultsReady(int index, const QList< QRectF >& results) +{ + if(m_searchTask->wasCanceled()) + { + return; + } + + s_searchModel->insertResults(this, index + 1, results); + + if(m_highlightAll) + { + m_pageItems.at(index)->setHighlights(results); + m_thumbnailItems.at(index)->setHighlights(results); + } + + if(s_settings->documentView().limitThumbnailsToResults()) + { + prepareThumbnailsScene(); + } + + if(!results.isEmpty() && !m_currentResult.isValid()) + { + setFocus(); + + findNext(); + } +} + +void DocumentView::on_pages_cropRectChanged() +{ + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + prepareScene(); + prepareView(left, top); +} + +void DocumentView::on_thumbnails_cropRectChanged() +{ + prepareThumbnailsScene(); +} + +void DocumentView::on_pages_linkClicked(bool newTab, int page, qreal left, qreal top) +{ + if(newTab) + { + emit linkClicked(page); + } + else + { + jumpToPage(page, true, left, top); + } +} + +void DocumentView::on_pages_linkClicked(bool newTab, const QString& fileName, int page) +{ + emit linkClicked(newTab, resolveFileName(fileName), page); +} + +void DocumentView::on_pages_linkClicked(const QString& url) +{ + if(s_settings->documentView().openUrl()) + { + QDesktopServices::openUrl(resolveUrl(url)); + } + else + { + QMessageBox::information(this, tr("Information"), tr("Opening URL is disabled in the settings.")); + } +} + +void DocumentView::on_pages_rubberBandFinished() +{ + setRubberBandMode(ModifiersMode); +} + +void DocumentView::on_pages_zoomToSelection(int page, const QRectF& rect) +{ + if(rect.isEmpty()) + { + return; + } + + const qreal visibleWidth = m_layout->visibleWidth(viewport()->width()); + const qreal visibleHeight = m_layout->visibleHeight(viewport()->height()); + + const QSizeF displayedSize = m_pageItems.at(page - 1)->displayedSize(); + + setScaleFactor(qMin(qMin(visibleWidth / displayedSize.width() / rect.width(), + visibleHeight / displayedSize.height() / rect.height()), + Defaults::DocumentView::maximumScaleFactor())); + + setScaleMode(ScaleFactorMode); + + jumpToPage(page, false, rect.left(), rect.top()); +} + +void DocumentView::on_pages_openInSourceEditor(int page, QPointF pos) +{ +#ifdef WITH_SYNCTEX + + if(const DocumentView::SourceLink sourceLink = scanForSourceLink(m_fileInfo.absoluteFilePath(), page, pos)) + { + openInSourceEditor(sourceLink); + } + else + { + QMessageBox::warning(this, tr("Warning"), tr("SyncTeX data for '%1' could not be found.").arg(m_fileInfo.absoluteFilePath())); + } + +#else + + Q_UNUSED(page); + Q_UNUSED(pos); + +#endif // WITH_SYNCTEX +} + +void DocumentView::on_pages_wasModified() +{ + m_wasModified = true; + + emit documentModified(); +} + +void DocumentView::resizeEvent(QResizeEvent* event) +{ + qreal left = 0.0, top = 0.0; + saveLeftAndTop(left, top); + + QGraphicsView::resizeEvent(event); + + if(m_scaleMode != ScaleFactorMode) + { + prepareScene(); + prepareView(left, top); + } +} + +void DocumentView::keyPressEvent(QKeyEvent* event) +{ + foreach(const PageItem* page, m_pageItems) + { + if(page->showsAnnotationOverlay() || page->showsFormFieldOverlay()) + { + QGraphicsView::keyPressEvent(event); + return; + } + } + + const QKeySequence keySequence(event->modifiers() + event->key()); + + int maskedKey = -1; + bool maskedKeyActive = false; + + switch(event->key()) + { + case Qt::Key_PageUp: + case Qt::Key_PageDown: + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_Left: + case Qt::Key_Right: + maskedKeyActive = true; + break; + } + + if(s_shortcutHandler->matchesSkipBackward(keySequence)) + { + maskedKey = Qt::Key_PageUp; + } + else if(s_shortcutHandler->matchesSkipForward(keySequence)) + { + maskedKey = Qt::Key_PageDown; + } + else if(s_shortcutHandler->matchesMoveUp(keySequence)) + { + maskedKey = Qt::Key_Up; + } + else if(s_shortcutHandler->matchesMoveDown(keySequence)) + { + maskedKey = Qt::Key_Down; + } + else if(s_shortcutHandler->matchesMoveLeft(keySequence)) + { + maskedKey = Qt::Key_Left; + } + else if(s_shortcutHandler->matchesMoveRight(keySequence)) + { + maskedKey = Qt::Key_Right; + } + else if(maskedKeyActive) + { + event->ignore(); + return; + } + + if(maskedKey == -1) + { + QGraphicsView::keyPressEvent(event); + } + else + { + if(!m_continuousMode) + { + if(maskedKey == Qt::Key_PageUp && verticalScrollBar()->value() == verticalScrollBar()->minimum() && m_currentPage != 1) + { + previousPage(); + + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + + event->accept(); + return; + } + else if(maskedKey == Qt::Key_PageDown && verticalScrollBar()->value() == verticalScrollBar()->maximum() && m_currentPage != m_layout->currentPage(m_pages.count())) + { + nextPage(); + + verticalScrollBar()->setValue(verticalScrollBar()->minimum()); + + event->accept(); + return; + } + } + + if((maskedKey == Qt::Key_Up && verticalScrollBar()->minimum() == verticalScrollBar()->maximum()) || + (maskedKey == Qt::Key_Left && !horizontalScrollBar()->isVisible())) + { + previousPage(); + + event->accept(); + return; + } + else if((maskedKey == Qt::Key_Down && verticalScrollBar()->minimum() == verticalScrollBar()->maximum()) || + (maskedKey == Qt::Key_Right && !horizontalScrollBar()->isVisible())) + { + nextPage(); + + event->accept(); + return; + } + + QKeyEvent keyEvent(event->type(), maskedKey, Qt::NoModifier, event->text(), event->isAutoRepeat(), event->count()); + QGraphicsView::keyPressEvent(&keyEvent); + } +} + +void DocumentView::mousePressEvent(QMouseEvent* event) +{ + if(event->button() == Qt::XButton1) + { + event->accept(); + + jumpBackward(); + } + else if(event->button() == Qt::XButton2) + { + event->accept(); + + jumpForward(); + } + + QGraphicsView::mousePressEvent(event); +} + +void DocumentView::wheelEvent(QWheelEvent* event) +{ + const bool noModifiersActive = event->modifiers() == Qt::NoModifier; + const bool zoomModifiersActive = modifiersAreActive(event, s_settings->documentView().zoomModifiers()); + const bool rotateModifiersActive = modifiersAreActive(event, s_settings->documentView().rotateModifiers()); + const bool scrollModifiersActive = modifiersAreActive(event, s_settings->documentView().scrollModifiers()); + + if(zoomModifiersActive) + { + if(event->delta() > 0) + { + zoomIn(); + } + else + { + zoomOut(); + } + + event->accept(); + return; + } + else if(rotateModifiersActive) + { + if(event->delta() > 0) + { + rotateLeft(); + } + else + { + rotateRight(); + } + + event->accept(); + return; + } + else if(scrollModifiersActive) + { + QWheelEvent wheelEvent(event->pos(), event->delta(), event->buttons(), Qt::AltModifier, Qt::Horizontal); + QGraphicsView::wheelEvent(&wheelEvent); + + event->accept(); + return; + } + else if(noModifiersActive && !m_continuousMode) + { + if(event->delta() > 0 && verticalScrollBar()->value() == verticalScrollBar()->minimum() && m_currentPage != 1) + { + previousPage(); + + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + + event->accept(); + return; + } + else if(event->delta() < 0 && verticalScrollBar()->value() == verticalScrollBar()->maximum() && m_currentPage != m_layout->currentPage(m_pages.count())) + { + nextPage(); + + verticalScrollBar()->setValue(verticalScrollBar()->minimum()); + + event->accept(); + return; + } + } + + QGraphicsView::wheelEvent(event); +} + +void DocumentView::contextMenuEvent(QContextMenuEvent* event) +{ + if(event->reason() == QContextMenuEvent::Mouse && modifiersUseMouseButton(s_settings, Qt::RightButton)) + { + event->accept(); + return; + } + + event->setAccepted(false); + + QGraphicsView::contextMenuEvent(event); + + if(!event->isAccepted()) + { + event->setAccepted(true); + + emit customContextMenuRequested(event->pos()); + } +} + +#ifdef WITH_CUPS + +bool DocumentView::printUsingCUPS(QPrinter* printer, const PrintOptions& printOptions, int fromPage, int toPage) +{ + int num_dests = 0; + cups_dest_t* dests = 0; + + int num_options = 0; + cups_option_t* options = 0; + + cups_dest_t* dest = 0; + int jobId = 0; + + num_dests = cupsGetDests(&dests); + dest = cupsGetDest(printer->printerName().toUtf8(), 0, num_dests, dests); + + if(dest == 0) + { + qWarning() << cupsLastErrorString(); + + cupsFreeDests(num_dests, dests); + + return false; + } + + for(int index = 0; index < dest->num_options; ++index) + { + num_options = cupsAddOption(dest->options[index].name, dest->options[index].value, num_options, &options); + } + + const QStringList cupsOptions = printer->printEngine()->property(QPrintEngine::PrintEnginePropertyKey(0xfe00)).toStringList(); + + for(int index = 0; index < cupsOptions.count() - 1; index += 2) + { + num_options = cupsAddOption(cupsOptions.at(index).toUtf8(), cupsOptions.at(index + 1).toUtf8(), num_options, &options); + } + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + num_options = cupsAddOption("copies", QString::number(printer->copyCount()).toUtf8(), num_options, &options); + +#endif // QT_VERSION + + num_options = cupsAddOption("Collate", printer->collateCopies() ? "true" : "false", num_options, &options); + + switch(printer->pageOrder()) + { + case QPrinter::FirstPageFirst: + num_options = cupsAddOption("outputorder", "normal", num_options, &options); + break; + case QPrinter::LastPageFirst: + num_options = cupsAddOption("outputorder", "reverse", num_options, &options); + break; + } + + num_options = cupsAddOption("fit-to-page", printOptions.fitToPage ? "true" : "false", num_options, &options); + + switch(printer->orientation()) + { + case QPrinter::Portrait: + num_options = cupsAddOption("landscape", "false", num_options, &options); + break; + case QPrinter::Landscape: + num_options = cupsAddOption("landscape", "true", num_options, &options); + break; + } + + switch(printer->colorMode()) + { + case QPrinter::Color: + num_options = addCMYKorRGBColorModel(dest, num_options, &options); + num_options = cupsAddOption("Ink", "COLOR", num_options, &options); + break; + case QPrinter::GrayScale: + num_options = cupsAddOption("ColorModel", "Gray", num_options, &options); + num_options = cupsAddOption("Ink", "MONO", num_options, &options); + break; + } + + switch(printer->duplex()) + { + case QPrinter::DuplexNone: + num_options = cupsAddOption("sides", "one-sided", num_options, &options); + break; + case QPrinter::DuplexAuto: + break; + case QPrinter::DuplexLongSide: + num_options = cupsAddOption("sides", "two-sided-long-edge", num_options, &options); + break; + case QPrinter::DuplexShortSide: + num_options = cupsAddOption("sides", "two-sided-short-edge", num_options, &options); + break; + } + + int numberUp = 1; + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + switch(printOptions.numberUp) + { + case PrintOptions::SinglePage: + num_options = cupsAddOption("number-up", "1", num_options, &options); + numberUp = 1; + break; + case PrintOptions::TwoPages: + num_options = cupsAddOption("number-up", "2", num_options, &options); + numberUp = 2; + break; + case PrintOptions::FourPages: + num_options = cupsAddOption("number-up", "4", num_options, &options); + numberUp = 4; + break; + case PrintOptions::SixPages: + num_options = cupsAddOption("number-up", "6", num_options, &options); + numberUp = 6; + break; + case PrintOptions::NinePages: + num_options = cupsAddOption("number-up", "9", num_options, &options); + numberUp = 9; + break; + case PrintOptions::SixteenPages: + num_options = cupsAddOption("number-up", "16", num_options, &options); + numberUp = 16; + break; + } + + switch(printOptions.numberUpLayout) + { + case PrintOptions::BottomTopLeftRight: + num_options = cupsAddOption("number-up-layout", "btlr", num_options, &options); + break; + case PrintOptions::BottomTopRightLeft: + num_options = cupsAddOption("number-up-layout", "btrl", num_options, &options); + break; + case PrintOptions::LeftRightBottomTop: + num_options = cupsAddOption("number-up-layout", "lrbt", num_options, &options); + break; + case PrintOptions::LeftRightTopBottom: + num_options = cupsAddOption("number-up-layout", "lrtb", num_options, &options); + break; + case PrintOptions::RightLeftBottomTop: + num_options = cupsAddOption("number-up-layout", "rlbt", num_options, &options); + break; + case PrintOptions::RightLeftTopBottom: + num_options = cupsAddOption("number-up-layout", "rltb", num_options, &options); + break; + case PrintOptions::TopBottomLeftRight: + num_options = cupsAddOption("number-up-layout", "tblr", num_options, &options); + break; + case PrintOptions::TopBottomRightLeft: + num_options = cupsAddOption("number-up-layout", "tbrl", num_options, &options); + break; + } + + switch(printOptions.pageSet) + { + case PrintOptions::AllPages: + break; + case PrintOptions::EvenPages: + num_options = cupsAddOption("page-set", "even", num_options, &options); + break; + case PrintOptions::OddPages: + num_options = cupsAddOption("page-set", "odd", num_options, &options); + break; + } + +#else + + { + bool ok = false; + int value = QString::fromUtf8(cupsGetOption("number-up", num_options, options)).toInt(&ok); + + numberUp = ok ? value : 1; + } + +#endif // QT_VERSION + + fromPage = (fromPage - 1) / numberUp + 1; + toPage = (toPage - 1) / numberUp + 1; + + if(cupsGetOption("page-ranges", num_options, options) == 0) + { + if(printOptions.pageRanges.isEmpty()) + { + num_options = cupsAddOption("page-ranges", QString("%1-%2").arg(fromPage).arg(toPage).toUtf8(), num_options, &options); + } + else + { + num_options = cupsAddOption("page-ranges", printOptions.pageRanges.toUtf8(), num_options, &options); + } + } + + QTemporaryFile temporaryFile; + + adjustFileTemplateSuffix(temporaryFile, m_fileInfo.suffix()); + + if(!temporaryFile.open()) + { + cupsFreeDests(num_dests, dests); + cupsFreeOptions(num_options, options); + + return false; + } + + temporaryFile.close(); + + if(!m_document->save(temporaryFile.fileName(), true)) + { + cupsFreeDests(num_dests, dests); + cupsFreeOptions(num_options, options); + + return false; + } + + jobId = cupsPrintFile(dest->name, QFile::encodeName(temporaryFile.fileName()), m_fileInfo.completeBaseName().toUtf8(), num_options, options); + + if(jobId < 1) + { + qWarning() << cupsLastErrorString(); + } + + cupsFreeDests(num_dests, dests); + cupsFreeOptions(num_options, options); + + return jobId >= 1; +} + +#endif // WITH_CUPS + +bool DocumentView::printUsingQt(QPrinter* printer, const PrintOptions& printOptions, int fromPage, int toPage) +{ + QScopedPointer< QProgressDialog > progressDialog(new QProgressDialog(this)); + progressDialog->setLabelText(tr("Printing '%1'...").arg(m_fileInfo.completeBaseName())); + progressDialog->setRange(fromPage - 1, toPage); + + QPainter painter; + + if(!painter.begin(printer)) + { + return false; + } + + for(int index = fromPage - 1; index <= toPage - 1; ++index) + { + progressDialog->setValue(index); + + QApplication::processEvents(); + + painter.save(); + + const Model::Page* page = m_pages.at(index); + + if(printOptions.fitToPage) + { + const qreal pageWidth = printer->physicalDpiX() / 72.0 * page->size().width(); + const qreal pageHeight = printer->physicalDpiY() / 72.0 * page->size().width(); + + const qreal scaleFactor = qMin(printer->width() / pageWidth, printer->height() / pageHeight); + + painter.setTransform(QTransform::fromScale(scaleFactor, scaleFactor)); + } + else + { + const qreal scaleFactorX = static_cast< qreal >(printer->logicalDpiX()) / static_cast< qreal >(printer->physicalDpiX()); + const qreal scaleFactorY = static_cast< qreal >(printer->logicalDpiY()) / static_cast< qreal >(printer->physicalDpiY()); + + painter.setTransform(QTransform::fromScale(scaleFactorX, scaleFactorY)); + } + + painter.drawImage(QPointF(), page->render(printer->physicalDpiX(), printer->physicalDpiY())); + + painter.restore(); + + if(index < toPage - 1) + { + printer->newPage(); + } + + QApplication::processEvents(); + + if(progressDialog->wasCanceled()) + { + printer->abort(); + + return false; + } + } + + return true; +} + +void DocumentView::saveLeftAndTop(qreal& left, qreal& top) const +{ + const PageItem* page = m_pageItems.at(m_currentPage - 1); + const QRectF boundingRect = page->uncroppedBoundingRect().translated(page->pos()); + + const QPointF topLeft = mapToScene(viewport()->rect().topLeft()); + + left = (topLeft.x() - boundingRect.x()) / boundingRect.width(); + top = (topLeft.y() - boundingRect.y()) / boundingRect.height(); +} + +bool DocumentView::checkDocument(const QString& filePath, Model::Document* document, QVector< Model::Page* >& pages) +{ + if(document->isLocked()) + { + QString password = QInputDialog::getText(this, tr("Unlock %1").arg(QFileInfo(filePath).completeBaseName()), tr("Password:"), QLineEdit::Password); + + if(document->unlock(password)) + { + return false; + } + } + + const int numberOfPages = document->numberOfPages(); + + if(numberOfPages == 0) + { + qWarning() << "No pages were found in document at" << filePath; + + return false; + } + + pages.reserve(numberOfPages); + + for(int index = 0; index < numberOfPages; ++index) + { + Model::Page* page = document->page(index); + + if(page == 0) + { + qWarning() << "No page" << index << "was found in document at" << filePath; + + return false; + } + + pages.append(page); + } + + return true; +} + +void DocumentView::loadDocumentDefaults() +{ + if(m_document->wantsContinuousMode()) + { + m_continuousMode = true; + } + + if(m_document->wantsSinglePageMode()) + { + m_layout.reset(new SinglePageLayout); + } + else if(m_document->wantsTwoPagesMode()) + { + m_layout.reset(new TwoPagesLayout); + } + else if(m_document->wantsTwoPagesWithCoverPageMode()) + { + m_layout.reset(new TwoPagesWithCoverPageLayout); + } + + if(m_document->wantsRightToLeftMode()) + { + m_rightToLeftMode = true; + } +} + +void DocumentView::adjustScrollBarPolicy() +{ + switch(m_scaleMode) + { + default: + case ScaleFactorMode: + setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + break; + case FitToPageWidthMode: + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + break; + case FitToPageSizeMode: + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(m_continuousMode ? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOff); + break; + } +} + +void DocumentView::prepareDocument(Model::Document* document, const QVector< Model::Page* >& pages) +{ + m_prefetchTimer->blockSignals(true); + m_prefetchTimer->stop(); + + cancelSearch(); + clearResults(); + + qDeleteAll(m_pageItems); + qDeleteAll(m_thumbnailItems); + + qDeleteAll(m_pages); + m_pages = pages; + + delete m_document; + m_document = document; + + if(!m_autoRefreshWatcher->files().isEmpty()) + { + m_autoRefreshWatcher->removePaths(m_autoRefreshWatcher->files()); + } + + if(s_settings->documentView().autoRefresh()) + { + m_autoRefreshWatcher->addPath(m_fileInfo.filePath()); + } + + m_document->setPaperColor(s_settings->pageItem().paperColor()); + + preparePages(); + prepareThumbnails(); + prepareBackground(); + + const Model::Outline outline = m_document->outline(); + + if(!outline.empty()) + { + m_outlineModel.reset(new OutlineModel(outline, this)); + } + else + { + m_outlineModel.reset(new FallbackOutlineModel(this)); + } + + Model::Properties properties = m_document->properties(); + + addFileProperties(properties, m_fileInfo); + + m_propertiesModel.reset(new PropertiesModel(properties, this)); + + if(s_settings->documentView().prefetch()) + { + m_prefetchTimer->blockSignals(false); + m_prefetchTimer->start(); + } +} + +void DocumentView::preparePages() +{ + m_pageItems.clear(); + m_pageItems.reserve(m_pages.count()); + + for(int index = 0; index < m_pages.count(); ++index) + { + PageItem* page = new PageItem(m_pages.at(index), index); + + page->setRubberBandMode(m_rubberBandMode); + + scene()->addItem(page); + m_pageItems.append(page); + + connect(page, SIGNAL(cropRectChanged()), SLOT(on_pages_cropRectChanged())); + + connect(page, SIGNAL(linkClicked(bool,int,qreal,qreal)), SLOT(on_pages_linkClicked(bool,int,qreal,qreal))); + connect(page, SIGNAL(linkClicked(bool,QString,int)), SLOT(on_pages_linkClicked(bool,QString,int))); + connect(page, SIGNAL(linkClicked(QString)), SLOT(on_pages_linkClicked(QString))); + + connect(page, SIGNAL(rubberBandFinished()), SLOT(on_pages_rubberBandFinished())); + + connect(page, SIGNAL(zoomToSelection(int,QRectF)), SLOT(on_pages_zoomToSelection(int,QRectF))); + connect(page, SIGNAL(openInSourceEditor(int,QPointF)), SLOT(on_pages_openInSourceEditor(int,QPointF))); + + connect(page, SIGNAL(wasModified()), SLOT(on_pages_wasModified())); + } +} + +void DocumentView::prepareThumbnails() +{ + m_thumbnailItems.clear(); + m_thumbnailItems.reserve(m_pages.count()); + + for(int index = 0; index < m_pages.count(); ++index) + { + ThumbnailItem* page = new ThumbnailItem(m_pages.at(index), pageLabelFromNumber(index + 1), index); + + m_thumbnailsScene->addItem(page); + m_thumbnailItems.append(page); + + connect(page, SIGNAL(cropRectChanged()), SLOT(on_thumbnails_cropRectChanged())); + + connect(page, SIGNAL(linkClicked(bool,int,qreal,qreal)), SLOT(on_pages_linkClicked(bool,int,qreal,qreal))); + } +} + +void DocumentView::prepareBackground() +{ + QColor backgroundColor; + + if(s_settings->pageItem().decoratePages()) + { + backgroundColor = s_settings->pageItem().backgroundColor(); + } + else + { + backgroundColor = s_settings->pageItem().paperColor(); + + if(invertColors()) + { + backgroundColor.setRgb(~backgroundColor.rgb()); + } + } + + scene()->setBackgroundBrush(QBrush(backgroundColor)); + m_thumbnailsScene->setBackgroundBrush(QBrush(backgroundColor)); +} + +void DocumentView::prepareScene() +{ + // prepare render parameters and adjust scale factor + + RenderParam renderParam(logicalDpiX(), logicalDpiY(), 1.0, + scaleFactor(), rotation(), renderFlags()); + +#if QT_VERSION >= QT_VERSION_CHECK(5,1,0) + + if(s_settings->pageItem().useDevicePixelRatio()) + { +#if QT_VERSION >= QT_VERSION_CHECK(5,6,0) + + renderParam.setDevicePixelRatio(devicePixelRatioF()); + +#else + + renderParam.setDevicePixelRatio(devicePixelRatio()); + +#endif // QT_VERSION + } + +#endif // QT_VERSION + + const qreal visibleWidth = m_layout->visibleWidth(viewport()->width()); + const qreal visibleHeight = m_layout->visibleHeight(viewport()->height()); + + foreach(PageItem* page, m_pageItems) + { + const QSizeF displayedSize = page->displayedSize(renderParam); + + if(m_scaleMode == FitToPageWidthMode) + { + adjustScaleFactor(renderParam, visibleWidth / displayedSize.width()); + } + else if(m_scaleMode == FitToPageSizeMode) + { + adjustScaleFactor(renderParam, qMin(visibleWidth / displayedSize.width(), visibleHeight / displayedSize.height())); + } + + page->setRenderParam(renderParam); + } + + // prepare layout + + qreal left = 0.0; + qreal right = 0.0; + qreal height = s_settings->documentView().pageSpacing(); + + m_layout->prepareLayout(m_pageItems, m_rightToLeftMode, + left, right, height); + + scene()->setSceneRect(left, 0.0, right - left, height); +} + +void DocumentView::prepareView(qreal newLeft, qreal newTop, bool forceScroll, int scrollToPage) +{ + const QRectF sceneRect = scene()->sceneRect(); + + qreal top = sceneRect.top(); + qreal height = sceneRect.height(); + + int horizontalValue = 0; + int verticalValue = 0; + + scrollToPage = scrollToPage != 0 ? scrollToPage : m_currentPage; + + const int highlightIsOnPage = m_currentResult.isValid() ? pageOfResult(m_currentResult) : 0; + const bool highlightCurrentThumbnail = s_settings->documentView().highlightCurrentThumbnail(); + + for(int index = 0; index < m_pageItems.count(); ++index) + { + PageItem* page = m_pageItems.at(index); + + if(m_continuousMode) + { + page->setVisible(true); + } + else + { + if(m_layout->leftIndex(index) == m_currentPage - 1) + { + page->setVisible(true); + + const QRectF boundingRect = page->boundingRect().translated(page->pos()); + + top = boundingRect.top() - s_settings->documentView().pageSpacing(); + height = boundingRect.height() + 2.0 * s_settings->documentView().pageSpacing(); + } + else + { + page->setVisible(false); + + page->cancelRender(); + } + } + + if(index == scrollToPage - 1) + { + const QRectF boundingRect = page->uncroppedBoundingRect().translated(page->pos()); + + horizontalValue = qFloor(boundingRect.left() + newLeft * boundingRect.width()); + verticalValue = qFloor(boundingRect.top() + newTop * boundingRect.height()); + } + + if(index == highlightIsOnPage - 1) + { + m_highlight->setPos(page->pos()); + m_highlight->setTransform(page->transform()); + + page->stackBefore(m_highlight); + } + + m_thumbnailItems.at(index)->setHighlighted(highlightCurrentThumbnail && (index == m_currentPage - 1)); + } + + setSceneRect(sceneRect.left(), top, sceneRect.width(), height); + + if(!forceScroll && s_settings->documentView().minimalScrolling()) + { + setValueIfNotVisible(horizontalScrollBar(), horizontalValue); + setValueIfNotVisible(verticalScrollBar(), verticalValue); + } + else + { + horizontalScrollBar()->setValue(horizontalValue); + verticalScrollBar()->setValue(verticalValue); + } + + viewport()->update(); +} + +void DocumentView::prepareThumbnailsScene() +{ + // prepare render parameters and adjust scale factor + + RenderParam renderParam(logicalDpiX(), logicalDpiY(), 1.0, + scaleFactor(), rotation(), renderFlags()); + +#if QT_VERSION >= QT_VERSION_CHECK(5,1,0) + + if(s_settings->pageItem().useDevicePixelRatio()) + { +#if QT_VERSION >= QT_VERSION_CHECK(5,6,0) + + renderParam.setDevicePixelRatio(devicePixelRatioF()); + +#else + + renderParam.setDevicePixelRatio(devicePixelRatio()); + +#endif // QT_VERSION + } + +#endif // QT_VERSION + + const qreal thumbnailSize = s_settings->documentView().thumbnailSize(); + const qreal thumbnailSpacing = s_settings->documentView().thumbnailSpacing(); + + qreal visibleWidth = Defaults::DocumentView::thumbnailSize(); + qreal visibleHeight = Defaults::DocumentView::thumbnailSize(); + + if(!m_thumbnailsViewportSize.isNull()) + { + visibleWidth = m_thumbnailsViewportSize.width() - 3.0 * thumbnailSpacing; + visibleHeight = m_thumbnailsViewportSize.height() - 3.0 * thumbnailSpacing; + } + + foreach(ThumbnailItem* page, m_thumbnailItems) + { + const QSizeF displayedSize = page->displayedSize(renderParam); + + if(thumbnailSize != 0.0) + { + adjustScaleFactor(renderParam, qMin(thumbnailSize / displayedSize.width(), thumbnailSize / displayedSize.height())); + } + else + { + if(m_thumbnailsOrientation == Qt::Vertical) + { + adjustScaleFactor(renderParam, visibleWidth / displayedSize.width()); + } + else + { + adjustScaleFactor(renderParam, (visibleHeight - page->textHeight()) / displayedSize.height()); + } + } + + page->setRenderParam(renderParam); + } + + // prepare layout + + qreal left = 0.0; + qreal right = m_thumbnailsOrientation == Qt::Vertical ? 0.0 : thumbnailSpacing; + qreal top = 0.0; + qreal bottom = m_thumbnailsOrientation == Qt::Vertical ? thumbnailSpacing : 0.0; + + const bool limitThumbnailsToResults = s_settings->documentView().limitThumbnailsToResults(); + + for(int index = 0; index < m_thumbnailItems.count(); ++index) + { + ThumbnailItem* page = m_thumbnailItems.at(index); + + // prepare visibility + + if(limitThumbnailsToResults && s_searchModel->hasResults(this) && !s_searchModel->hasResultsOnPage(this, index + 1)) + { + page->setVisible(false); + + page->cancelRender(); + + continue; + } + + page->setVisible(true); + + // prepare position + + const QRectF boundingRect = page->boundingRect(); + + if(m_thumbnailsOrientation == Qt::Vertical) + { + page->setPos(-boundingRect.left() - 0.5 * boundingRect.width(), bottom - boundingRect.top()); + + left = qMin(left, -0.5f * boundingRect.width() - thumbnailSpacing); + right = qMax(right, 0.5f * boundingRect.width() + thumbnailSpacing); + bottom += boundingRect.height() + thumbnailSpacing; + } + else + { + page->setPos(right - boundingRect.left(), -boundingRect.top() - 0.5 * boundingRect.height()); + + top = qMin(top, -0.5f * boundingRect.height() - thumbnailSpacing); + bottom = qMax(bottom, 0.5f * boundingRect.height() + thumbnailSpacing); + right += boundingRect.width() + thumbnailSpacing; + } + } + + m_thumbnailsScene->setSceneRect(left, top, right - left, bottom - top); +} + +void DocumentView::prepareHighlight(int index, const QRectF& rect) +{ + PageItem* page = m_pageItems.at(index); + + m_highlight->setPos(page->pos()); + m_highlight->setTransform(page->transform()); + + m_highlight->setRect(rect.normalized()); + m_highlight->setBrush(QBrush(s_settings->pageItem().highlightColor())); + + page->stackBefore(m_highlight); + + m_highlight->setVisible(true); + + { + VerticalScrollBarChangedBlocker verticalScrollBarChangedBlocker(this); + + centerOn(m_highlight); + } + + viewport()->update(); +} + +void DocumentView::checkResult() +{ + if(m_currentResult.isValid() && m_layout->currentPage(pageOfResult(m_currentResult)) != m_currentPage) + { + m_currentResult = QModelIndex(); + } +} + +void DocumentView::applyResult() +{ + if(m_currentResult.isValid()) + { + const int page = pageOfResult(m_currentResult); + const QRectF rect = rectOfResult(m_currentResult); + + jumpToPage(page); + + prepareHighlight(page - 1, rect); + } + else + { + m_highlight->setVisible(false); + } +} + +} // qpdfview diff --git a/sources/documentview.h b/sources/documentview.h new file mode 100644 index 0000000..9a18405 --- /dev/null +++ b/sources/documentview.h @@ -0,0 +1,390 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2014, 2018 Adam Reichold +Copyright 2014 Dorian Scholz +Copyright 2018 Egor Zenkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef DOCUMENTVIEW_H +#define DOCUMENTVIEW_H + +#include +#include +#include +#include + +class QDomNode; +class QFileSystemWatcher; +class QPrinter; +class QStandardItemModel; + +#include "renderparam.h" +#include "printoptions.h" + +namespace qpdfview +{ + +namespace Model +{ +class Annotation; +class Page; +class Document; +} + +class Settings; +class PageItem; +class ThumbnailItem; +class SearchModel; +class SearchTask; +class PresentationView; +class ShortcutHandler; +struct DocumentLayout; + +class DocumentView : public QGraphicsView +{ + Q_OBJECT + +public: + explicit DocumentView(QWidget* parent = 0); + ~DocumentView(); + + const QFileInfo& fileInfo() const { return m_fileInfo; } + bool wasModified() const { return m_wasModified; } + + int numberOfPages() const { return m_pages.count(); } + int currentPage() const { return m_currentPage; } + + bool hasFrontMatter() const { return m_firstPage > 1; } + + int firstPage() const { return m_firstPage; } + void setFirstPage(int firstPage); + + QString defaultPageLabelFromNumber(int number) const; + QString pageLabelFromNumber(int number) const; + int pageNumberFromLabel(const QString& label) const; + + QString title() const; + + static QStringList openFilter(); + QStringList saveFilter() const; + + bool canSave() const; + + bool continuousMode() const { return m_continuousMode; } + void setContinuousMode(bool continuousMode); + + LayoutMode layoutMode() const; + void setLayoutMode(LayoutMode layoutMode); + + bool rightToLeftMode() const { return m_rightToLeftMode; } + void setRightToLeftMode(bool rightToLeftMode); + + ScaleMode scaleMode() const { return m_scaleMode; } + void setScaleMode(ScaleMode scaleMode); + + qreal scaleFactor() const { return m_scaleFactor; } + void setScaleFactor(qreal scaleFactor); + + Rotation rotation() const { return m_rotation; } + void setRotation(Rotation rotation); + + qpdfview::RenderFlags renderFlags() const { return m_renderFlags; } + void setRenderFlags(qpdfview::RenderFlags renderFlags); + void setRenderFlag(qpdfview::RenderFlag renderFlag, bool enabled = true); + + bool invertColors() const { return m_renderFlags.testFlag(InvertColors); } + void setInvertColors(bool invertColors) { setRenderFlag(InvertColors, invertColors); } + + bool convertToGrayscale() const { return m_renderFlags.testFlag(ConvertToGrayscale); } + void setConvertToGrayscale(bool convertToGrayscale) { setRenderFlag(ConvertToGrayscale, convertToGrayscale); } + + bool trimMargins() const { return m_renderFlags.testFlag(TrimMargins); } + void setTrimMargins(bool trimMargins) { setRenderFlag(TrimMargins, trimMargins); } + + CompositionMode compositionMode() const; + void setCompositionMode(CompositionMode compositionMode); + + bool highlightAll() const { return m_highlightAll; } + void setHighlightAll(bool highlightAll); + + RubberBandMode rubberBandMode() const { return m_rubberBandMode; } + void setRubberBandMode(RubberBandMode rubberBandMode); + + QSize thumbnailsViewportSize() const { return m_thumbnailsViewportSize; } + void setThumbnailsViewportSize(QSize thumbnailsViewportSize); + + Qt::Orientation thumbnailsOrientation() const { return m_thumbnailsOrientation; } + void setThumbnailsOrientation(Qt::Orientation thumbnailsOrientation); + + const QVector< ThumbnailItem* >& thumbnailItems() const { return m_thumbnailItems; } + QGraphicsScene* thumbnailsScene() const { return m_thumbnailsScene; } + + QAbstractItemModel* outlineModel() const { return m_outlineModel.data(); } + QAbstractItemModel* propertiesModel() const { return m_propertiesModel.data(); } + + QSet< QByteArray > saveExpandedPaths() const; + void restoreExpandedPaths(const QSet< QByteArray >& expandedPaths); + + QAbstractItemModel* fontsModel() const; + + bool searchWasCanceled() const; + int searchProgress() const; + + QString searchText() const; + bool searchMatchCase() const; + bool searchWholeWords() const; + + QPair< QString, QString > searchContext(int page, const QRectF& rect) const; + + bool hasSearchResults(); + + QString resolveFileName(QString fileName) const; + QUrl resolveUrl(QUrl url) const; + + struct SourceLink + { + QString name; + int line; + int column; + + operator bool() const { return !name.isNull(); } + + }; + + SourceLink sourceLink(QPoint pos); + void openInSourceEditor(const SourceLink& sourceLink); + +signals: + void documentChanged(); + void documentModified(); + + void numberOfPagesChanged(int numberOfPages); + void currentPageChanged(int currentPage, bool trackChange = false); + + void canJumpChanged(bool backward, bool forward); + + void continuousModeChanged(bool continuousMode); + void layoutModeChanged(LayoutMode layoutMode); + void rightToLeftModeChanged(bool rightToLeftMode); + void scaleModeChanged(ScaleMode scaleMode); + void scaleFactorChanged(qreal scaleFactor); + void rotationChanged(Rotation rotation); + + void linkClicked(int page); + void linkClicked(bool newTab, const QString& filePath, int page); + + void renderFlagsChanged(qpdfview::RenderFlags renderFlags); + + void invertColorsChanged(bool invertColors); + void convertToGrayscaleChanged(bool convertToGrayscale); + void trimMarginsChanged(bool trimMargins); + + void compositionModeChanged(CompositionMode compositionMode); + + void highlightAllChanged(bool highlightAll); + void rubberBandModeChanged(RubberBandMode rubberBandMode); + + void searchFinished(); + void searchProgressChanged(int progress); + +public slots: + void show(); + + bool open(const QString& filePath); + bool refresh(); + bool save(const QString& filePath, bool withChanges); + bool print(QPrinter* printer, const PrintOptions& printOptions = PrintOptions()); + + void previousPage(); + void nextPage(); + void firstPage(); + void lastPage(); + + void jumpToPage(int page, bool trackChange = true, qreal newLeft = qQNaN(), qreal newTop = qQNaN()); + + bool canJumpBackward() const; + void jumpBackward(); + + bool canJumpForward() const; + void jumpForward(); + + void temporaryHighlight(int page, const QRectF& highlight); + + void startSearch(const QString& text, bool matchCase, bool wholeWords); + void cancelSearch(); + + void clearResults(); + + void findPrevious(); + void findNext(); + void findResult(const QModelIndex& index); + + void zoomIn(); + void zoomOut(); + void originalSize(); + + void rotateLeft(); + void rotateRight(); + + void startPresentation(); + +protected slots: + void on_verticalScrollBar_valueChanged(); + + void on_autoRefresh_timeout(); + void on_prefetch_timeout(); + + void on_temporaryHighlight_timeout(); + + void on_searchTask_progressChanged(int progress); + void on_searchTask_resultsReady(int index, const QList< QRectF >& results); + + void on_pages_cropRectChanged(); + void on_thumbnails_cropRectChanged(); + + void on_pages_linkClicked(bool newTab, int page, qreal left, qreal top); + void on_pages_linkClicked(bool newTab, const QString& fileName, int page); + void on_pages_linkClicked(const QString& url); + + void on_pages_rubberBandFinished(); + + void on_pages_zoomToSelection(int page, const QRectF& rect); + void on_pages_openInSourceEditor(int page, QPointF pos); + + void on_pages_wasModified(); + +protected: + void resizeEvent(QResizeEvent* event); + + void keyPressEvent(QKeyEvent* event); + void mousePressEvent(QMouseEvent* event); + void wheelEvent(QWheelEvent* event); + + void contextMenuEvent(QContextMenuEvent* event); + +private: + Q_DISABLE_COPY(DocumentView) + + static Settings* s_settings; + static ShortcutHandler* s_shortcutHandler; + + QFileSystemWatcher* m_autoRefreshWatcher; + QTimer* m_autoRefreshTimer; + + QTimer* m_prefetchTimer; + + Model::Document* m_document; + QVector< Model::Page* > m_pages; + + QFileInfo m_fileInfo; + bool m_wasModified; + + int m_currentPage; + int m_firstPage; + +#ifdef WITH_CUPS + + bool printUsingCUPS(QPrinter* printer, const PrintOptions& printOptions, int fromPage, int toPage); + +#endif // WITH_CUPS + + bool printUsingQt(QPrinter* printer, const PrintOptions& printOptions, int fromPage, int toPage); + + struct Position + { + int page; + qreal left; + qreal top; + + Position(int page, qreal left, qreal top) : page(page), left(left), top(top) {} + + }; + + QList< Position > m_past; + QList< Position > m_future; + + void saveLeftAndTop(qreal& left, qreal& top) const; + + QScopedPointer< DocumentLayout > m_layout; + + bool m_continuousMode; + bool m_rightToLeftMode; + ScaleMode m_scaleMode; + qreal m_scaleFactor; + Rotation m_rotation; + + qpdfview::RenderFlags m_renderFlags; + + bool m_highlightAll; + RubberBandMode m_rubberBandMode; + + QVector< PageItem* > m_pageItems; + QVector< ThumbnailItem* > m_thumbnailItems; + + QGraphicsRectItem* m_highlight; + + QSize m_thumbnailsViewportSize; + Qt::Orientation m_thumbnailsOrientation; + + QGraphicsScene* m_thumbnailsScene; + + QScopedPointer< QAbstractItemModel > m_outlineModel; + QScopedPointer< QAbstractItemModel > m_propertiesModel; + + bool checkDocument(const QString& filePath, Model::Document* document, QVector< Model::Page* >& pages); + + void loadDocumentDefaults(); + + void adjustScrollBarPolicy(); + + bool m_verticalScrollBarChangedBlocked; + + class VerticalScrollBarChangedBlocker; + + void prepareDocument(Model::Document* document, const QVector< Model::Page* >& pages); + void preparePages(); + void prepareThumbnails(); + void prepareBackground(); + + void prepareScene(); + void prepareView(qreal newLeft = 0.0, qreal newTop = 0.0, bool forceScroll = true, int scrollToPage = 0); + + void prepareThumbnailsScene(); + + void prepareHighlight(int index, const QRectF& highlight); + + // search + + static SearchModel* s_searchModel; + + QPersistentModelIndex m_currentResult; + + SearchTask* m_searchTask; + + void checkResult(); + void applyResult(); + +}; + +} // qpdfview + +Q_DECLARE_METATYPE(qpdfview::DocumentView::SourceLink) + +#endif // DOCUMENTVIEW_H diff --git a/sources/fitzmodel.cpp b/sources/fitzmodel.cpp new file mode 100644 index 0000000..7916f85 --- /dev/null +++ b/sources/fitzmodel.cpp @@ -0,0 +1,450 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2015 Martin Banky +Copyright 2014-2015, 2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "fitzmodel.h" + +#include +#include + +extern "C" +{ + +#include +#include +#include +#include +#include +#include +#include + +typedef struct pdf_document_s pdf_document; + +pdf_document* pdf_specifics(fz_context*, fz_document*); + +} + +namespace +{ + +using namespace qpdfview; +using namespace qpdfview::Model; + +QString removeFilePrefix(const char* uri) +{ + QString url = QString::fromUtf8(uri); + + if(url.startsWith("file://", Qt::CaseInsensitive)) + { + url = url.mid(7); + } + + return url; +} + +Outline loadOutline(fz_outline* item) +{ + Outline outline; + + for(; item; item = item->next) + { + outline.push_back(Section()); + Section& section = outline.back(); + section.title = QString::fromUtf8(item->title); + + if(item->page != -1) + { + section.link.page = item->page + 1; + } + else if (item->uri != 0) + { + section.link.urlOrFileName = removeFilePrefix(item->uri); + } + + if(fz_outline* childItem = item->down) + { + section.children = loadOutline(childItem); + } + } + + return outline; +} + +} // anonymous + +namespace qpdfview +{ + +namespace Model +{ + +FitzPage::FitzPage(const FitzDocument* parent, fz_page* page) : + m_parent(parent), + m_page(page) +{ +} + +FitzPage::~FitzPage() +{ + fz_drop_page(m_parent->m_context, m_page); +} + +QSizeF FitzPage::size() const +{ + QMutexLocker mutexLocker(&m_parent->m_mutex); + + fz_rect rect; + fz_bound_page(m_parent->m_context, m_page, &rect); + + return QSizeF(rect.x1 - rect.x0, rect.y1 - rect.y0); +} + +QImage FitzPage::render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const +{ + QMutexLocker mutexLocker(&m_parent->m_mutex); + + fz_matrix matrix; + + fz_scale(&matrix, horizontalResolution / 72.0f, verticalResolution / 72.0f); + + switch(rotation) + { + default: + case RotateBy0: + fz_pre_rotate(&matrix, 0.0); + break; + case RotateBy90: + fz_pre_rotate(&matrix, 90.0); + break; + case RotateBy180: + fz_pre_rotate(&matrix, 180.0); + break; + case RotateBy270: + fz_pre_rotate(&matrix, 270.0); + break; + } + + fz_rect rect; + fz_bound_page(m_parent->m_context, m_page, &rect); + fz_transform_rect(&rect, &matrix); + + fz_irect irect; + fz_round_rect(&irect, &rect); + + + fz_context* context = fz_clone_context(m_parent->m_context); + fz_display_list* display_list = fz_new_display_list(context, &rect); + + fz_device* device = fz_new_list_device(context, display_list); + fz_run_page(m_parent->m_context, m_page, device, &matrix, 0); + fz_close_device(m_parent->m_context, device); + fz_drop_device(m_parent->m_context, device); + + + mutexLocker.unlock(); + + + fz_matrix tileMatrix; + fz_translate(&tileMatrix, -rect.x0, -rect.y0); + + fz_rect tileRect = fz_infinite_rect; + + int tileWidth = irect.x1 - irect.x0; + int tileHeight = irect.y1 - irect.y0; + + if(!boundingRect.isNull()) + { + fz_pre_translate(&tileMatrix, -boundingRect.x(), -boundingRect.y()); + + tileRect.x0 = boundingRect.x(); + tileRect.y0 = boundingRect.y(); + + tileRect.x1 = boundingRect.right(); + tileRect.y1 = boundingRect.bottom(); + + tileWidth = boundingRect.width(); + tileHeight = boundingRect.height(); + } + + + QImage image(tileWidth, tileHeight, QImage::Format_RGB32); + image.fill(m_parent->m_paperColor); + + fz_pixmap* pixmap = fz_new_pixmap_with_data(context, fz_device_bgr(context), image.width(), image.height(), 0, 1, image.bytesPerLine(), image.bits()); + + device = fz_new_draw_device(context, &tileMatrix, pixmap); + fz_run_display_list(context, display_list, device, &fz_identity, &tileRect, 0); + fz_close_device(context, device); + fz_drop_device(context, device); + + fz_drop_pixmap(context, pixmap); + fz_drop_display_list(context, display_list); + fz_drop_context(context); + + return image; +} + +QList< Link* > FitzPage::links() const +{ + QMutexLocker mutexLocker(&m_parent->m_mutex); + + QList< Link* > links; + + fz_rect rect; + fz_bound_page(m_parent->m_context, m_page, &rect); + + const qreal width = qAbs(rect.x1 - rect.x0); + const qreal height = qAbs(rect.y1 - rect.y0); + + fz_link* first_link = fz_load_links(m_parent->m_context, m_page); + + for(fz_link* link = first_link; link != 0; link = link->next) + { + const QRectF boundary = QRectF(link->rect.x0 / width, link->rect.y0 / height, (link->rect.x1 - link->rect.x0) / width, (link->rect.y1 - link->rect.y0) / height).normalized(); + + if (link->uri != 0) + { + if (fz_is_external_link(m_parent->m_context, link->uri) == 0) + { + float left; + float top; + const int page = fz_resolve_link(m_parent->m_context, m_parent->m_document, link->uri, &left, &top); + + if (page != -1) + { + links.append(new Link(boundary, page + 1, left / width, top / height)); + } + } + else + { + links.append(new Link(boundary, removeFilePrefix(link->uri))); + } + } + } + + fz_drop_link(m_parent->m_context, first_link); + + return links; +} + +QString FitzPage::text(const QRectF &rect) const +{ + QMutexLocker mutexLocker(&m_parent->m_mutex); + + fz_rect mediaBox; + mediaBox.x0 = rect.x(); + mediaBox.y0 = rect.y(); + mediaBox.x1 = rect.right(); + mediaBox.y1 = rect.bottom(); + + fz_stext_page* textPage = fz_new_stext_page(m_parent->m_context, &mediaBox); + fz_device* device = fz_new_stext_device(m_parent->m_context, textPage, 0); + fz_run_page(m_parent->m_context, m_page, device, &fz_identity, 0); + fz_close_device(m_parent->m_context, device); + fz_drop_device(m_parent->m_context, device); + + fz_point topLeft; + topLeft.x = rect.x(); + topLeft.y = rect.y(); + + fz_point bottomRight; + bottomRight.x = rect.right(); + bottomRight.y = rect.bottom(); + + char* selection = fz_copy_selection(m_parent->m_context, textPage, topLeft, bottomRight, 0); + QString text = QString::fromUtf8(selection); + ::free(selection); + + fz_drop_stext_page(m_parent->m_context, textPage); + + return text; +} + +QList FitzPage::search(const QString& text, bool matchCase, bool wholeWords) const +{ + Q_UNUSED(matchCase); + Q_UNUSED(wholeWords); + + QMutexLocker mutexLocker(&m_parent->m_mutex); + + fz_rect rect; + fz_bound_page(m_parent->m_context, m_page, &rect); + + fz_stext_page* textPage = fz_new_stext_page(m_parent->m_context, &rect); + fz_device* device = fz_new_stext_device(m_parent->m_context, textPage, 0); + fz_run_page(m_parent->m_context, m_page, device, &fz_identity, 0); + fz_close_device(m_parent->m_context, device); + fz_drop_device(m_parent->m_context, device); + + const QByteArray needle = text.toUtf8(); + + QVector< fz_rect > hits(32); + int numberOfHits = fz_search_stext_page(m_parent->m_context, textPage, needle.constData(), hits.data(), hits.size()); + + while(numberOfHits == hits.size()) + { + hits.resize(2 * hits.size()); + numberOfHits = fz_search_stext_page(m_parent->m_context, textPage, needle.constData(), hits.data(), hits.size()); + } + + hits.resize(numberOfHits); + + fz_drop_stext_page(m_parent->m_context, textPage); + + QList< QRectF > results; + results.reserve(hits.size()); + + foreach(fz_rect rect, hits) + { + results.append(QRectF(rect.x0, rect.y0, rect.x1 - rect.x0, rect.y1 - rect.y0)); + } + + return results; +} + +FitzDocument::FitzDocument(fz_context* context, fz_document* document) : + m_mutex(), + m_context(context), + m_document(document), + m_paperColor(Qt::white) +{ +} + +FitzDocument::~FitzDocument() +{ + fz_drop_document(m_context, m_document); + fz_drop_context(m_context); +} + +int FitzDocument::numberOfPages() const +{ + QMutexLocker mutexLocker(&m_mutex); + + return fz_count_pages(m_context, m_document); +} + +Page* FitzDocument::page(int index) const +{ + QMutexLocker mutexLocker(&m_mutex); + + if(fz_page* page = fz_load_page(m_context, m_document, index)) + { + return new FitzPage(this, page); + } + + return 0; +} + +bool FitzDocument::canBePrintedUsingCUPS() const +{ + QMutexLocker mutexLocker(&m_mutex); + + return pdf_specifics(m_context, m_document) != 0; +} + +void FitzDocument::setPaperColor(const QColor& paperColor) +{ + m_paperColor = paperColor; +} + +Outline FitzDocument::outline() const +{ + Outline outline; + + QMutexLocker mutexLocker(&m_mutex); + + if(fz_outline* rootItem = fz_load_outline(m_context, m_document)) + { + outline = loadOutline(rootItem); + + fz_drop_outline(m_context, rootItem); + } + + return outline; +} + +} // Model + +FitzPlugin::FitzPlugin(QObject* parent) : QObject(parent) +{ + setObjectName("FitzPlugin"); + + m_locks_context.user = this; + m_locks_context.lock = FitzPlugin::lock; + m_locks_context.unlock = FitzPlugin::unlock; + + m_context = fz_new_context(0, &m_locks_context, FZ_STORE_DEFAULT); + + fz_register_document_handlers(m_context); +} + +FitzPlugin::~FitzPlugin() +{ + fz_drop_context(m_context); +} + +Model::Document* FitzPlugin::loadDocument(const QString& filePath) const +{ + fz_context* context = fz_clone_context(m_context); + + if(context == 0) + { + return 0; + } + +#ifdef _MSC_VER + + fz_document* document = fz_open_document(context, filePath.toUtf8()); + +#else + + fz_document* document = fz_open_document(context, QFile::encodeName(filePath)); + +#endif // _MSC_VER + + if(document == 0) + { + fz_drop_context(context); + + return 0; + } + + return new Model::FitzDocument(context, document); +} + +void FitzPlugin::lock(void* user, int lock) +{ + static_cast< FitzPlugin* >(user)->m_mutex[lock].lock(); +} + +void FitzPlugin::unlock(void* user, int lock) +{ + static_cast< FitzPlugin* >(user)->m_mutex[lock].unlock(); +} + +} // qpdfview + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) + +Q_EXPORT_PLUGIN2(qpdfview_fitz, qpdfview::FitzPlugin) + +#endif // QT_VERSION diff --git a/sources/fitzmodel.h b/sources/fitzmodel.h new file mode 100644 index 0000000..3690734 --- /dev/null +++ b/sources/fitzmodel.h @@ -0,0 +1,136 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2014, 2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef FITZMODEL_H +#define FITZMODEL_H + +#include + +extern "C" +{ + +#include + +typedef struct fz_page_s fz_page; +typedef struct fz_document_s fz_document; + +} + +#include "model.h" + +namespace qpdfview +{ + +class FitzPlugin; + +namespace Model +{ + class FitzPage : public Page + { + friend class FitzDocument; + + public: + ~FitzPage(); + + QSizeF size() const; + + QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const; + + QList< Link* > links() const; + + QString text(const QRectF& rect) const; + + QList< QRectF > search(const QString& text, bool matchCase, bool wholeWords) const; + + private: + Q_DISABLE_COPY(FitzPage) + + FitzPage(const class FitzDocument* parent, fz_page* page); + + const class FitzDocument* m_parent; + + fz_page* m_page; + + }; + + class FitzDocument : public Document + { + friend class FitzPage; + friend class qpdfview::FitzPlugin; + + public: + ~FitzDocument(); + + int numberOfPages() const; + + Page* page(int index) const; + + bool canBePrintedUsingCUPS() const; + + void setPaperColor(const QColor& paperColor); + + Outline outline() const; + + private: + Q_DISABLE_COPY(FitzDocument) + + FitzDocument(fz_context* context, fz_document* document); + + mutable QMutex m_mutex; + fz_context* m_context; + fz_document* m_document; + + QColor m_paperColor; + + }; +} + +class FitzPlugin : public QObject, Plugin +{ + Q_OBJECT + Q_INTERFACES(qpdfview::Plugin) + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + Q_PLUGIN_METADATA(IID "local.qpdfview.Plugin") + +#endif // QT_VERSION + +public: + FitzPlugin(QObject* parent = 0); + ~FitzPlugin(); + + Model::Document* loadDocument(const QString& filePath) const; + +private: + QMutex m_mutex[FZ_LOCK_MAX]; + fz_locks_context m_locks_context; + fz_context* m_context; + + static void lock(void* user, int lock); + static void unlock(void* user, int lock); + +}; + +} // qpdfview + +#endif // FITZMODEL_H diff --git a/sources/fontsdialog.cpp b/sources/fontsdialog.cpp new file mode 100644 index 0000000..d6def90 --- /dev/null +++ b/sources/fontsdialog.cpp @@ -0,0 +1,76 @@ +/* + +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "fontsdialog.h" + +#include +#include +#include +#include +#include + +#include "settings.h" + +namespace qpdfview +{ + +FontsDialog::FontsDialog(QAbstractItemModel* model, QWidget* parent) : QDialog(parent) +{ + setWindowTitle(tr("Fonts") + QLatin1String(" - qpdfview")); + + m_tableView = new QTableView(this); + m_tableView->setModel(model); + + m_tableView->setAlternatingRowColors(true); + m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_tableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + m_tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + +#else + + m_tableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); + m_tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + +#endif // QT_VERSION + + m_tableView->verticalHeader()->setVisible(false); + + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this); + connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject())); + + setLayout(new QVBoxLayout(this)); + layout()->addWidget(m_tableView); + layout()->addWidget(m_dialogButtonBox); + + resize(Settings::instance()->mainWindow().fontsDialogSize(sizeHint())); +} + +FontsDialog::~FontsDialog() +{ + Settings::instance()->mainWindow().setFontsDialogSize(size()); +} + +} // qpdfview diff --git a/sources/fontsdialog.h b/sources/fontsdialog.h new file mode 100644 index 0000000..9ffcebe --- /dev/null +++ b/sources/fontsdialog.h @@ -0,0 +1,53 @@ +/* + +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef FONTSDIALOG_H +#define FONTSDIALOG_H + +#include + +class QAbstractItemModel; +class QDialogButtonBox; +class QTableView; + +namespace qpdfview +{ + +class FontsDialog : public QDialog +{ + Q_OBJECT + +public: + FontsDialog(QAbstractItemModel* model, QWidget* parent = 0); + ~FontsDialog(); + +private: + Q_DISABLE_COPY(FontsDialog) + + QTableView* m_tableView; + + QDialogButtonBox* m_dialogButtonBox; + +}; + +} // qpdfview + +#endif // FONTSDIALOG_H diff --git a/sources/formfieldwidgets.cpp b/sources/formfieldwidgets.cpp new file mode 100644 index 0000000..6c3db0a --- /dev/null +++ b/sources/formfieldwidgets.cpp @@ -0,0 +1,336 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "formfieldwidgets.h" + +#include +#include + +#include + +#ifndef HAS_POPPLER_24 + +#define LOCK_FORM_FIELD QMutexLocker mutexLocker(m_mutex); + +#else + +#define LOCK_FORM_FIELD + +#endif // HAS_POPPLER_24 + +namespace +{ + +bool hideOnEscape(QWidget* widget, QKeyEvent* event) +{ + if(event->key() == Qt::Key_Escape) + { + widget->hide(); + + event->accept(); + return true; + } + + return false; +} + +} // anonymous + +namespace qpdfview +{ + +NormalTextFieldWidget::NormalTextFieldWidget(QMutex* mutex, Poppler::FormFieldText* formField, QWidget* parent) : QLineEdit(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + setText(m_formField->text()); + setMaxLength(m_formField->maximumLength()); + setAlignment(m_formField->textAlignment()); + setEchoMode(m_formField->isPassword() ? QLineEdit::Password : QLineEdit::Normal); + + connect(this, SIGNAL(textChanged(QString)), SLOT(on_textChanged(QString))); + connect(this, SIGNAL(textChanged(QString)), SIGNAL(wasModified())); + + connect(this, SIGNAL(returnPressed()), SLOT(hide())); +} + +void NormalTextFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QLineEdit::keyPressEvent(event); + } +} + +void NormalTextFieldWidget::on_textChanged(const QString& text) +{ + LOCK_FORM_FIELD + + m_formField->setText(text); +} + +MultilineTextFieldWidget::MultilineTextFieldWidget(QMutex* mutex, Poppler::FormFieldText* formField, QWidget* parent) : QPlainTextEdit(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + setPlainText(m_formField->text()); + + connect(this, SIGNAL(textChanged()), SLOT(on_textChanged())); + connect(this, SIGNAL(textChanged()), SIGNAL(wasModified())); + + moveCursor(QTextCursor::End); +} + +void MultilineTextFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QPlainTextEdit::keyPressEvent(event); + } +} + +void MultilineTextFieldWidget::on_textChanged() +{ + LOCK_FORM_FIELD + + m_formField->setText(toPlainText()); +} + +ComboBoxChoiceFieldWidget::ComboBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldChoice* formField, QWidget* parent) : QComboBox(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + addItems(m_formField->choices()); + + if(!m_formField->currentChoices().isEmpty()) + { + setCurrentIndex(m_formField->currentChoices().at(0)); + } + + connect(this, SIGNAL(currentIndexChanged(int)), SLOT(on_currentIndexChanged(int))); + connect(this, SIGNAL(currentIndexChanged(int)), SIGNAL(wasModified())); + +#ifdef HAS_POPPLER_22 + + if(m_formField->isEditable()) + { + setEditable(true); + setInsertPolicy(QComboBox::NoInsert); + + lineEdit()->setText(m_formField->editChoice()); + + connect(lineEdit(), SIGNAL(textChanged(QString)), SLOT(on_currentTextChanged(QString))); + connect(lineEdit(), SIGNAL(textChanged(QString)), SIGNAL(wasModified())); + + connect(lineEdit(), SIGNAL(returnPressed()), SLOT(hide())); + } + else + { + connect(this, SIGNAL(activated(int)), SLOT(hide())); + } + +#else + + connect(this, SIGNAL(activated(int)), SLOT(hide())); + +#endif // HAS_POPPLER_22 +} + +void ComboBoxChoiceFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QComboBox::keyPressEvent(event); + } +} + +void ComboBoxChoiceFieldWidget::showPopup() +{ + QComboBox::showPopup(); + + graphicsProxyWidget()->setZValue(1.0); +} + +void ComboBoxChoiceFieldWidget::hidePopup() +{ + QComboBox::hidePopup(); + + graphicsProxyWidget()->setZValue(0.0); +} + +void ComboBoxChoiceFieldWidget::on_currentIndexChanged(int index) +{ + LOCK_FORM_FIELD + + m_formField->setCurrentChoices(QList< int >() << index); +} + +void ComboBoxChoiceFieldWidget::on_currentTextChanged(const QString& text) +{ + LOCK_FORM_FIELD + +#ifdef HAS_POPPLER_22 + + m_formField->setEditChoice(text); + +#endif // HAS_POPPLER_22 +} + +ListBoxChoiceFieldWidget::ListBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldChoice* formField, QWidget* parent) : QListWidget(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + addItems(m_formField->choices()); + setSelectionMode(m_formField->multiSelect() ? QAbstractItemView::MultiSelection : QAbstractItemView::SingleSelection); + + foreach(int index, m_formField->currentChoices()) + { + if(index >= 0 && index < count()) + { + item(index)->setSelected(true); + } + } + + connect(this, SIGNAL(itemSelectionChanged()), SLOT(on_itemSelectionChanged())); + connect(this, SIGNAL(itemSelectionChanged()), SIGNAL(wasModified())); +} + +void ListBoxChoiceFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QListWidget::keyPressEvent(event); + } +} + +void ListBoxChoiceFieldWidget::on_itemSelectionChanged() +{ + LOCK_FORM_FIELD + + QList< int > currentChoices; + + for(int index = 0; index < count(); ++index) + { + if(item(index)->isSelected()) + { + currentChoices.append(index); + } + } + + m_formField->setCurrentChoices(currentChoices); +} + +CheckBoxChoiceFieldWidget::CheckBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldButton* formField, QWidget* parent) : QCheckBox(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + setChecked(m_formField->state()); + + connect(this, SIGNAL(toggled(bool)), SLOT(on_toggled(bool))); + connect(this, SIGNAL(toggled(bool)), SIGNAL(wasModified())); +} + +void CheckBoxChoiceFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QCheckBox::keyPressEvent(event); + } +} + +void CheckBoxChoiceFieldWidget::on_toggled(bool checked) +{ + LOCK_FORM_FIELD + + m_formField->setState(checked); +} + +RadioChoiceFieldWidget::Siblings RadioChoiceFieldWidget::s_siblings; + +RadioChoiceFieldWidget::RadioChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldButton* formField, QWidget* parent) : QRadioButton(parent), + m_mutex(mutex), + m_formField(formField) +{ + LOCK_FORM_FIELD + + s_siblings.insert(qMakePair(m_mutex, m_formField->id()), this); + + setAutoExclusive(false); + setChecked(m_formField->state()); + + connect(this, SIGNAL(toggled(bool)), SLOT(on_toggled(bool))); + connect(this, SIGNAL(toggled(bool)), SIGNAL(wasModified())); +} + +RadioChoiceFieldWidget::~RadioChoiceFieldWidget() +{ + LOCK_FORM_FIELD + + s_siblings.remove(qMakePair(m_mutex, m_formField->id())); +} + +void RadioChoiceFieldWidget::keyPressEvent(QKeyEvent* event) +{ + if(!hideOnEscape(this, event)) + { + QRadioButton::keyPressEvent(event); + } +} + +void RadioChoiceFieldWidget::on_toggled(bool checked) +{ + LOCK_FORM_FIELD + + m_formField->setState(checked); + + if(checked) + { + const QList< int > siblings = m_formField->siblings(); + +#ifndef HAS_POPPLER_24 + + mutexLocker.unlock(); + +#endif // HAS_POPPLER_24 + + foreach(int id, siblings) + { + const QPair< QMutex*, int > key = qMakePair(m_mutex, id); + + if(s_siblings.contains(key)) + { + s_siblings.value(key)->setChecked(false); + } + } + } +} + +} // qpdfview diff --git a/sources/formfieldwidgets.h b/sources/formfieldwidgets.h new file mode 100644 index 0000000..7353d88 --- /dev/null +++ b/sources/formfieldwidgets.h @@ -0,0 +1,201 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef FORMFIELDWIDGETS_H +#define FORMFIELDWIDGETS_H + +#include +#include +#include +#include +#include +#include + +class QMutex; + +namespace Poppler +{ +class FormField; +class FormFieldText; +class FormFieldChoice; +class FormFieldButton; +} + +namespace qpdfview +{ + +class NormalTextFieldWidget : public QLineEdit +{ + Q_OBJECT + +public: + NormalTextFieldWidget(QMutex* mutex, Poppler::FormFieldText* formField, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_textChanged(const QString& text); + +private: + Q_DISABLE_COPY(NormalTextFieldWidget) + + QMutex* m_mutex; + Poppler::FormFieldText* m_formField; + +}; + +class MultilineTextFieldWidget : public QPlainTextEdit +{ + Q_OBJECT + +public: + MultilineTextFieldWidget(QMutex* mutex, Poppler::FormFieldText* formField, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_textChanged(); + +private: + Q_DISABLE_COPY(MultilineTextFieldWidget) + + QMutex* m_mutex; + Poppler::FormFieldText* m_formField; + +}; + +class ComboBoxChoiceFieldWidget : public QComboBox +{ + Q_OBJECT + +public: + ComboBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldChoice* formField, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + + void showPopup(); + void hidePopup(); + +protected slots: + void on_currentIndexChanged(int index); + void on_currentTextChanged(const QString& text); + +private: + Q_DISABLE_COPY(ComboBoxChoiceFieldWidget) + + QMutex* m_mutex; + Poppler::FormFieldChoice* m_formField; + +}; + +class ListBoxChoiceFieldWidget : public QListWidget +{ + Q_OBJECT + +public: + ListBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldChoice* formField, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_itemSelectionChanged(); + +private: + Q_DISABLE_COPY(ListBoxChoiceFieldWidget) + + QMutex* m_mutex; + Poppler::FormFieldChoice* m_formField; + +}; + +class CheckBoxChoiceFieldWidget : public QCheckBox +{ + Q_OBJECT + +public: + CheckBoxChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldButton* formField, QWidget* parent = 0); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_toggled(bool checked); + +protected slots: + +private: + Q_DISABLE_COPY(CheckBoxChoiceFieldWidget) + + QMutex* m_mutex; + Poppler::FormFieldButton* m_formField; + +}; + +class RadioChoiceFieldWidget : public QRadioButton +{ + Q_OBJECT + +public: + RadioChoiceFieldWidget(QMutex* mutex, Poppler::FormFieldButton* formField, QWidget* parent = 0); + ~RadioChoiceFieldWidget(); + +signals: + void wasModified(); + +protected: + void keyPressEvent(QKeyEvent* event); + +protected slots: + void on_toggled(bool checked); + +private: + Q_DISABLE_COPY(RadioChoiceFieldWidget) + + typedef QMap< QPair< QMutex*, int >, RadioChoiceFieldWidget* > Siblings; + static Siblings s_siblings; + + QMutex* m_mutex; + Poppler::FormFieldButton* m_formField; + +}; + +} // qpdfview + +#endif // FORMFIELDWIDGETS_H diff --git a/sources/global.h b/sources/global.h new file mode 100644 index 0000000..7a79e50 --- /dev/null +++ b/sources/global.h @@ -0,0 +1,77 @@ +/* + +Copyright 2013, 2015 Adam Reichold +Copyright 2013 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef GLOBAL_H +#define GLOBAL_H + +#include +#include + +namespace qpdfview +{ + +enum Rotation +{ + RotateBy0 = 0, + RotateBy90 = 1, + RotateBy180 = 2, + RotateBy270 = 3, + NumberOfRotations = 4 +}; + +enum RubberBandMode +{ + ModifiersMode = 0, + CopyToClipboardMode = 1, + AddAnnotationMode = 2, + ZoomToSelectionMode = 3, + NumberOfRubberBandModes = 4 +}; + +enum LayoutMode +{ + SinglePageMode = 0, + TwoPagesMode = 1, + TwoPagesWithCoverPageMode = 2, + MultiplePagesMode = 3, + NumberOfLayoutModes = 4 +}; + +enum ScaleMode +{ + ScaleFactorMode = 0, + FitToPageWidthMode = 1, + FitToPageSizeMode = 2, + NumberOfScaleModes = 3 +}; + +enum CompositionMode +{ + DefaultCompositionMode = 0, + DarkenWithPaperColorMode = 1, + LightenWithPaperColorMode = 2, + NumberOfCompositionModes = 3 +}; + +} // qpdfview + +#endif // GLOBAL_H diff --git a/sources/helpdialog.cpp b/sources/helpdialog.cpp new file mode 100644 index 0000000..692a604 --- /dev/null +++ b/sources/helpdialog.cpp @@ -0,0 +1,132 @@ +/* + +Copyright 2018 Marshall Banana +Copyright 2013 Benjamin Eltzner +Copyright 2013, 2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "helpdialog.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" + +namespace qpdfview +{ + +HelpDialog::HelpDialog(QWidget* parent) : QDialog(parent) +{ + setWindowTitle(tr("Help") + QLatin1String(" - qpdfview")); + + m_textBrowser = new QTextBrowser(this); + m_textBrowser->setTextInteractionFlags(Qt::TextBrowserInteraction | Qt::TextSelectableByKeyboard); + m_textBrowser->setSearchPaths(QStringList() << QDir(QApplication::applicationDirPath()).filePath("data") << DATA_INSTALL_PATH << ":/"); + + //: Please replace by file name of localized help if available, e.g. "help_fr.html". + m_textBrowser->setSource(QUrl::fromLocalFile(tr("help.html"))); + + if(m_textBrowser->document()->isEmpty()) + { + m_textBrowser->setSource(QUrl::fromLocalFile("help.html")); + } + + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this); + connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject())); + + m_searchLineEdit = new QLineEdit(this); + connect(m_searchLineEdit, SIGNAL(returnPressed()), SLOT(on_findNext_triggered())); + connect(m_searchLineEdit, SIGNAL(textEdited(QString)), SLOT(on_search_textEdited())); + + m_findPreviousButton = m_dialogButtonBox->addButton(tr("Find previous"), QDialogButtonBox::ActionRole); + m_findPreviousButton->setShortcut(QKeySequence::FindPrevious); + connect(m_findPreviousButton, SIGNAL(clicked()), SLOT(on_findPrevious_triggered())); + + m_findNextButton = m_dialogButtonBox->addButton(tr("Find next"), QDialogButtonBox::ActionRole); + m_findNextButton->setShortcut(QKeySequence::FindNext); + connect(m_findNextButton, SIGNAL(clicked()), SLOT(on_findNext_triggered())); + + // Default buttons would interfere with search funtionality... + foreach(QAbstractButton* abstractButton, m_dialogButtonBox->buttons()) + { + QPushButton* pushButton = qobject_cast< QPushButton* >(abstractButton); + + if(pushButton != 0) + { + pushButton->setAutoDefault(false); + pushButton->setDefault(false); + } + } + + setLayout(new QVBoxLayout(this)); + layout()->addWidget(m_textBrowser); + layout()->addWidget(m_searchLineEdit); + layout()->addWidget(m_dialogButtonBox); + + resize(Settings::instance()->mainWindow().contentsDialogSize(sizeHint())); + + m_searchLineEdit->setFocus(); +} + +HelpDialog::~HelpDialog() +{ + Settings::instance()->mainWindow().setContentsDialogSize(size()); +} + +void HelpDialog::on_findPrevious_triggered() +{ + if(!m_searchLineEdit->text().isEmpty() && m_textBrowser->find(m_searchLineEdit->text(), QTextDocument::FindBackward)) + { + m_textBrowser->setFocus(); + + m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #80ff80")); + } + else + { + m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #ff8080")); + } +} + +void HelpDialog::on_findNext_triggered() +{ + if(!m_searchLineEdit->text().isEmpty() && m_textBrowser->find(m_searchLineEdit->text())) + { + m_textBrowser->setFocus(); + + m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #80ff80")); + } + else + { + m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #ff8080")); + + } +} + +void HelpDialog::on_search_textEdited() +{ + m_searchLineEdit->setStyleSheet(QString()); +} + +} // qpdfview diff --git a/sources/helpdialog.h b/sources/helpdialog.h new file mode 100644 index 0000000..c5559d4 --- /dev/null +++ b/sources/helpdialog.h @@ -0,0 +1,63 @@ +/* + +Copyright 2013 Benjamin Eltzner +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef HELPDIALOG_H +#define HELPDIALOG_H + +#include + +class QDialogButtonBox; +class QTextBrowser; +class QLineEdit; + +namespace qpdfview +{ + +class HelpDialog : public QDialog +{ + Q_OBJECT + +public: + explicit HelpDialog(QWidget* parent = 0); + ~HelpDialog(); + +protected slots: + void on_findPrevious_triggered(); + void on_findNext_triggered(); + void on_search_textEdited(); + +private: + Q_DISABLE_COPY(HelpDialog) + + QTextBrowser* m_textBrowser; + + QDialogButtonBox* m_dialogButtonBox; + + QLineEdit* m_searchLineEdit; + QPushButton* m_findPreviousButton; + QPushButton* m_findNextButton; + +}; + +} // qpdfview + +#endif // HELPDIALOG_H diff --git a/sources/imagemodel.cpp b/sources/imagemodel.cpp new file mode 100644 index 0000000..e3a3f9c --- /dev/null +++ b/sources/imagemodel.cpp @@ -0,0 +1,209 @@ +/* + +Copyright 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "imagemodel.h" + +#include +#include + +namespace +{ + +using namespace qpdfview; +using namespace qpdfview::Model; + +inline qreal dotsPerInchX(const QImage& image) +{ + return 0.0254 * image.dotsPerMeterX(); +} + +inline qreal dotsPerInchY(const QImage& image) +{ + return 0.0254 * image.dotsPerMeterY(); +} + +} // anonymous + +namespace qpdfview +{ + +namespace Model +{ + +ImagePage::ImagePage(const QImage& image) : + m_image(image) +{ +} + +QSizeF ImagePage::size() const +{ + return QSizeF(m_image.width() * 72.0 / dotsPerInchX(m_image), + m_image.height() * 72.0 / dotsPerInchY(m_image)); +} + +QImage ImagePage::render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const +{ + QTransform transform; + + transform.scale(horizontalResolution / dotsPerInchX(m_image), + verticalResolution / dotsPerInchY(m_image)); + + switch(rotation) + { + default: + case RotateBy0: + break; + case RotateBy90: + transform.rotate(90.0); + break; + case RotateBy180: + transform.rotate(180.0); + break; + case RotateBy270: + transform.rotate(270.0); + break; + } + + QImage image = m_image.transformed(transform, Qt::SmoothTransformation); + + if(!boundingRect.isNull()) + { + image = image.copy(boundingRect); + } + + return image; +} + +ImageDocument::ImageDocument(const QImage& image) : + m_image(image) +{ +} + +int ImageDocument::numberOfPages() const +{ + return 1; +} + +Page* ImageDocument::page(int index) const +{ + return index == 0 ? new ImagePage(m_image) : 0; +} + +QStringList ImageDocument::saveFilter() const +{ + QStringList formats; + + foreach(const QByteArray& format, QImageWriter::supportedImageFormats()) + { + const QString name = QString::fromLocal8Bit(format); + + formats.append(QLatin1String("*.") + name); + } + + return QStringList() << tr("Image (%1)").arg(formats.join(QLatin1String(" "))); +} + +bool ImageDocument::canSave() const +{ + return true; +} + +bool ImageDocument::save(const QString& filePath, bool withChanges) const +{ + Q_UNUSED(withChanges); + + QImageWriter writer(filePath); + + if(!writer.write(m_image)) + { + qWarning() << writer.errorString(); + + return false; + } + + return true; +} + +Properties ImageDocument::properties() const +{ + Properties properties; + + properties.push_back(qMakePair(tr("Size"), QString("%1 px x %2 px").arg(m_image.width()).arg(m_image.height()))); + properties.push_back(qMakePair(tr("Resolution"), QString("%1 dpi x %2 dpi").arg(dotsPerInchX(m_image), 0, 'f', 1).arg(dotsPerInchY(m_image), 0, 'f', 1))); + properties.push_back(qMakePair(tr("Depth"), QString("%1 bits").arg(m_image.depth()))); + + switch(m_image.format()) + { + default: + break; + case QImage::Format_Mono: + case QImage::Format_MonoLSB: + properties.push_back(qMakePair(tr("Format"), tr("Monochrome"))); + break; + case QImage::Format_Indexed8: + properties.push_back(qMakePair(tr("Format"), tr("Indexed"))); + break; + case QImage::Format_RGB32: + properties.push_back(qMakePair(tr("Format"), tr("32 bits RGB"))); + break; + case QImage::Format_ARGB32: + properties.push_back(qMakePair(tr("Format"), tr("32 bits ARGB"))); + break; + case QImage::Format_RGB16: + case QImage::Format_RGB555: + case QImage::Format_RGB444: + properties.push_back(qMakePair(tr("Format"), tr("16 bits RGB"))); + break; + case QImage::Format_RGB666: + case QImage::Format_RGB888: + properties.push_back(qMakePair(tr("Format"), tr("24 bits RGB"))); + break; + } + + foreach(const QString& key, m_image.textKeys()) + { + properties.push_back(qMakePair(key, m_image.text(key))); + } + + return properties; +} + +} // Model + +ImagePlugin::ImagePlugin(QObject* parent) : QObject(parent) +{ + setObjectName("ImagePlugin"); +} + +Model::Document* ImagePlugin::loadDocument(const QString& filePath) const +{ + QImage image(filePath); + + return !image.isNull() ? new Model::ImageDocument(image) : 0; +} + +} // qpdfview + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) + +Q_EXPORT_PLUGIN2(qpdfview_image, qpdfview::ImagePlugin) + +#endif // QT_VERSION diff --git a/sources/imagemodel.h b/sources/imagemodel.h new file mode 100644 index 0000000..56c9ee5 --- /dev/null +++ b/sources/imagemodel.h @@ -0,0 +1,105 @@ +/* + +Copyright 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef IMAGEMODEL_H +#define IMAGEMODEL_H + +#include + +#include "model.h" + +namespace qpdfview +{ + +class ImagePlugin; + +namespace Model +{ + class ImagePage : public Page + { + friend class ImageDocument; + + public: + QSizeF size() const; + + QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const; + + private: + Q_DISABLE_COPY(ImagePage) + + ImagePage(const QImage& image); + + QImage m_image; + + }; + + class ImageDocument : public Document + { + Q_DECLARE_TR_FUNCTIONS(Model::ImageDocument) + + friend class qpdfview::ImagePlugin; + + public: + int numberOfPages() const; + + Page* page(int index) const; + + QStringList saveFilter() const; + + bool canSave() const; + bool save(const QString& filePath, bool withChanges) const; + + Properties properties() const; + + private: + Q_DISABLE_COPY(ImageDocument) + + ImageDocument(const QImage& image); + + QImage m_image; + + }; +} + +class ImagePlugin : public QObject, Plugin +{ + Q_OBJECT + Q_INTERFACES(qpdfview::Plugin) + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + Q_PLUGIN_METADATA(IID "local.qpdfview.Plugin") + +#endif // QT_VERSION + +public: + ImagePlugin(QObject* parent = 0); + + Model::Document* loadDocument(const QString& filePath) const; + +private: + Q_DISABLE_COPY(ImagePlugin) + +}; + +} // qpdfview + +#endif // IMAGEMODEL_H diff --git a/sources/main.cpp b/sources/main.cpp new file mode 100644 index 0000000..251b1c5 --- /dev/null +++ b/sources/main.cpp @@ -0,0 +1,509 @@ +/* + +Copyright 2018 Marshall Banana +Copyright 2012-2013, 2018 Adam Reichold +Copyright 2014 Dorian Scholz +Copyright 2012 Michał Trybus +Copyright 2013 Chris Young + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WITH_DBUS + +#include +#include + +#endif // WITH_DBUS + +#ifdef WITH_SYNCTEX + +#include + +#ifndef HAS_SYNCTEX_2 + +typedef synctex_scanner_t synctex_scanner_p; +typedef synctex_node_t synctex_node_p; + +#define synctex_scanner_next_result(scanner) synctex_next_result(scanner) +#define synctex_display_query(scanner, file, line, column, page) synctex_display_query(scanner, file, line, column) + +#endif // HAS_SYNCTEX_2 + +#endif // WITH_SYNCTEX + +#include "documentview.h" +#include "database.h" +#include "mainwindow.h" + +#ifdef WITH_SIGNALS + +#include "signalhandler.h" + +#endif // WITH_SIGNALS + +#ifdef __amigaos4__ + +#include +#include + +const char* __attribute__((used)) stack_cookie = "\0$STACK:500000\0"; + +#endif // __amigaos4__ + +namespace +{ + +using namespace qpdfview; + +struct File +{ + QString filePath; + int page; + + QString sourceName; + int sourceLine; + int sourceColumn; + QRectF enclosingBox; + + File() : filePath(), page(-1), sourceName(), sourceLine(-1), sourceColumn(-1), enclosingBox() {} + +}; + +enum ExitStatus +{ + ExitOk = 0, + ExitUnknownArgument = 1, + ExitIllegalArgument = 2, + ExitInconsistentArguments = 3, + ExitDBusError = 4 +}; + +bool unique = false; +bool quiet = false; + +QString instanceName; +QString searchText; + +QList< File > files; + +MainWindow* mainWindow = 0; + +bool loadTranslator(QTranslator* const translator, const QString& fileName, const QString& path) +{ +#if QT_VERSION >= QT_VERSION_CHECK(4,8,0) + + const bool ok = translator->load(QLocale::system(), fileName, "_", path); + +#else + + const bool ok = translator->load(fileName + "_" + QLocale::system().name(), path); + +#endif // QT_VERSION + + if(ok) + { + qApp->installTranslator(translator); + } + + return ok; +} + +void loadTranslators() +{ + QTranslator* toolkitTranslator = new QTranslator(qApp); + loadTranslator(toolkitTranslator, "qt", QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + + QTranslator* applicationTranslator = new QTranslator(qApp); + if(loadTranslator(applicationTranslator, "qpdfview", QDir(QApplication::applicationDirPath()).filePath("data"))) {} + else if(loadTranslator(applicationTranslator, "qpdfview", DATA_INSTALL_PATH)) {} + else if(loadTranslator(applicationTranslator, "qpdfview", ":/")) {} +} + +void parseCommandLineArguments() +{ + bool instanceNameIsNext = false; + bool searchTextIsNext = false; + bool noMoreOptions = false; + + QRegExp fileAndPageRegExp("(.+)#(\\d+)"); + QRegExp fileAndSourceRegExp("(.+)#src:(.+):(\\d+):(\\d+)"); + QRegExp instanceNameRegExp("[A-Za-z_]+[A-Za-z0-9_]*"); + + QStringList arguments = QApplication::arguments(); + + if(!arguments.isEmpty()) + { + arguments.removeFirst(); + } + + foreach(const QString& argument, arguments) + { + if(instanceNameIsNext) + { + if(argument.isEmpty()) + { + qCritical() << QObject::tr("An empty instance name is not allowed."); + exit(ExitIllegalArgument); + } + + instanceNameIsNext = false; + instanceName = argument; + } + else if(searchTextIsNext) + { + if(argument.isEmpty()) + { + qCritical() << QObject::tr("An empty search text is not allowed."); + exit(ExitIllegalArgument); + } + + searchTextIsNext = false; + searchText = argument; + } + else if(!noMoreOptions && argument.startsWith("--")) + { + if(argument == QLatin1String("--unique")) + { + unique = true; + } + else if(argument == QLatin1String("--quiet")) + { + quiet = true; + } + else if(argument == QLatin1String("--instance")) + { + instanceNameIsNext = true; + } + else if(argument == QLatin1String("--search")) + { + searchTextIsNext = true; + } + else if(argument == QLatin1String("--choose-instance")) + { + bool ok = false; + const QString chosenInstanceName = QInputDialog::getItem(0, MainWindow::tr("Choose instance"), MainWindow::tr("Instance:"), Database::instance()->knownInstanceNames(), 0, true, &ok); + + if(ok) + { + instanceName = chosenInstanceName; + } + } + else if(argument == QLatin1String("--help")) + { + std::cout << "Usage: qpdfview [options] [--] [file[#page]] [file[#src:name:line:column]] ..." << std::endl + << std::endl + << "Available options:" << std::endl + << " --help Show this information" << std::endl + << " --quiet Suppress warning messages when opening files" << std::endl + << " --search text Search for text in the current tab" << std::endl + << " --unique Open files as tabs in unique window" << std::endl + << " --unique --instance name Open files as tabs in named instance" << std::endl + << " --unique --choose-instance Open files as tabs after choosing an instance name" << std::endl + << std::endl + << "Please report bugs at \"https://launchpad.net/qpdfview\"." << std::endl; + + exit(ExitOk); + } + else if(argument == QLatin1String("--")) + { + noMoreOptions = true; + } + else + { + qCritical() << QObject::tr("Unknown command-line option '%1'.").arg(argument); + exit(ExitUnknownArgument); + } + } + else + { + File file; + + if(fileAndPageRegExp.exactMatch(argument)) + { + file.filePath = fileAndPageRegExp.cap(1); + file.page = fileAndPageRegExp.cap(2).toInt(); + } + else if(fileAndSourceRegExp.exactMatch(argument)) + { + file.filePath = fileAndSourceRegExp.cap(1); + file.sourceName = fileAndSourceRegExp.cap(2); + file.sourceLine = fileAndSourceRegExp.cap(3).toInt(); + file.sourceColumn = fileAndSourceRegExp.cap(4).toInt(); + } + else + { + file.filePath = argument; + } + + files.append(file); + } + } + + if(instanceNameIsNext) + { + qCritical() << QObject::tr("Using '--instance' requires an instance name."); + exit(ExitInconsistentArguments); + } + + if(!unique && !instanceName.isEmpty()) + { + qCritical() << QObject::tr("Using '--instance' is not allowed without using '--unique'."); + exit(ExitInconsistentArguments); + } + + if(!instanceName.isEmpty() && !instanceNameRegExp.exactMatch(instanceName)) + { + qCritical() << QObject::tr("An instance name must only contain the characters \"[A-Z][a-z][0-9]_\" and must not begin with a digit."); + exit(ExitIllegalArgument); + } + + if(searchTextIsNext) + { + qCritical() << QObject::tr("Using '--search' requires a search text."); + exit(ExitInconsistentArguments); + } +} + +void parseWorkbenchExtendedSelection(int argc, char** argv) +{ +#ifdef __amigaos4__ + + if(argc == 0) + { + const int pathLength = 1024; + const QScopedArrayPointer< char > filePath(new char[pathLength]); + + const struct WBStartup* wbStartup = reinterpret_cast< struct WBStartup* >(argv); + + for(int index = 1; index < wbStartup->sm_NumArgs; ++index) + { + const struct WBArg* wbArg = wbStartup->sm_ArgList + index; + + if((wbArg->wa_Lock) && (*wbArg->wa_Name)) + { + IDOS->DevNameFromLock(wbArg->wa_Lock, filePath.data(), pathLength, DN_FULLPATH); + IDOS->AddPart(filePath.data(), wbArg->wa_Name, pathLength); + + File file; + file.filePath = filePath.data(); + + files.append(file); + } + } + } + +#else + + Q_UNUSED(argc); + Q_UNUSED(argv); + +#endif // __amigaos4__ +} + +void resolveSourceReferences() +{ +#ifdef WITH_SYNCTEX + + for(int index = 0; index < files.count(); ++index) + { + File& file = files[index]; + + if(!file.sourceName.isNull()) + { + if(synctex_scanner_p scanner = synctex_scanner_new_with_output_file(file.filePath.toLocal8Bit(), 0, 1)) + { + if(synctex_display_query(scanner, file.sourceName.toLocal8Bit(), file.sourceLine, file.sourceColumn, -1) > 0) + { + for(synctex_node_p node = synctex_scanner_next_result(scanner); node != 0; node = synctex_scanner_next_result(scanner)) + { + int page = synctex_node_page(node); + QRectF enclosingBox(synctex_node_box_visible_h(node), synctex_node_box_visible_v(node), synctex_node_box_visible_width(node), synctex_node_box_visible_height(node)); + + if(file.page != page) + { + file.page = page; + file.enclosingBox = enclosingBox; + } + else + { + file.enclosingBox = file.enclosingBox.united(enclosingBox); + } + } + } + + synctex_scanner_free(scanner); + } + else + { + qWarning() << DocumentView::tr("SyncTeX data for '%1' could not be found.").arg(file.filePath); + } + } + } + +#endif // WITH_SYNCTEX +} + +void activateUniqueInstance() +{ + qApp->setObjectName(instanceName); + +#ifdef WITH_DBUS + + if(unique) + { + QScopedPointer< QDBusInterface > interface(MainWindowAdaptor::createInterface()); + + if(interface->isValid()) + { + interface->call("raiseAndActivate"); + + foreach(const File& file, files) + { + QDBusReply< bool > reply = interface->call("jumpToPageOrOpenInNewTab", QFileInfo(file.filePath).absoluteFilePath(), file.page, true, file.enclosingBox, quiet); + + if(!reply.isValid()) + { + qCritical() << QDBusConnection::sessionBus().lastError().message(); + + exit(ExitDBusError); + } + } + + if(!files.isEmpty()) + { + interface->call("saveDatabase"); + } + + if(!searchText.isEmpty()) + { + interface->call("startSearch", searchText); + } + + exit(ExitOk); + } + else + { + mainWindow = new MainWindow(); + + if(MainWindowAdaptor::createAdaptor(mainWindow) == 0) + { + qCritical() << QDBusConnection::sessionBus().lastError().message(); + + delete mainWindow; + exit(ExitDBusError); + } + } + } + else + { + mainWindow = new MainWindow(); + } + +#else + + mainWindow = new MainWindow(); + +#endif // WITH_DBUS +} + +void prepareSignalHandler() +{ +#ifdef WITH_SIGNALS + + if(SignalHandler::prepareSignals()) + { + SignalHandler* signalHandler = new SignalHandler(mainWindow); + + QObject::connect(signalHandler, SIGNAL(sigIntReceived()), mainWindow, SLOT(close())); + QObject::connect(signalHandler, SIGNAL(sigTermReceived()), mainWindow, SLOT(close())); + } + else + { + qWarning() << QObject::tr("Could not prepare signal handler."); + } + +#endif // WITH_SIGNALS +} + +} // anonymous + +int main(int argc, char** argv) +{ + qRegisterMetaType< QList< QRectF > >("QList"); + qRegisterMetaType< Rotation >("Rotation"); + qRegisterMetaType< RenderParam >("RenderParam"); + + parseWorkbenchExtendedSelection(argc, argv); + + QApplication application(argc, argv); + + QApplication::setOrganizationDomain("local.qpdfview"); + QApplication::setOrganizationName("qpdfview"); + QApplication::setApplicationName("qpdfview"); + + QApplication::setApplicationVersion(APPLICATION_VERSION); + + QApplication::setWindowIcon(QIcon(":icons/qpdfview")); + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + +#endif // QT_VERSION + + loadTranslators(); + + parseCommandLineArguments(); + + resolveSourceReferences(); + + activateUniqueInstance(); + + prepareSignalHandler(); + + mainWindow->show(); + mainWindow->setAttribute(Qt::WA_DeleteOnClose); + + foreach(const File& file, files) + { + mainWindow->jumpToPageOrOpenInNewTab(file.filePath, file.page, true, file.enclosingBox, quiet); + } + + if(!files.isEmpty()) + { + mainWindow->saveDatabase(); + } + + if(!searchText.isEmpty()) + { + mainWindow->startSearch(searchText); + } + + return application.exec(); +} diff --git a/sources/mainwindow.cpp b/sources/mainwindow.cpp new file mode 100644 index 0000000..02ac3fd --- /dev/null +++ b/sources/mainwindow.cpp @@ -0,0 +1,3887 @@ +/* + +Copyright 2014-2015, 2018 S. Razi Alavizadeh +Copyright 2018 Marshall Banana +Copyright 2012-2018 Adam Reichold +Copyright 2018 Pavel Sanda +Copyright 2014 Dorian Scholz +Copyright 2018 Martin Spacek +Copyright 2012 Michał Trybus +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "mainwindow.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 + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#endif // QT_VERSION + +#ifdef WITH_DBUS + +#include +#include + +#endif // WITH_DBUS + +#include "model.h" +#include "settings.h" +#include "shortcuthandler.h" +#include "thumbnailitem.h" +#include "searchmodel.h" +#include "searchitemdelegate.h" +#include "documentview.h" +#include "miscellaneous.h" +#include "printdialog.h" +#include "settingsdialog.h" +#include "fontsdialog.h" +#include "helpdialog.h" +#include "recentlyusedmenu.h" +#include "recentlyclosedmenu.h" +#include "bookmarkmodel.h" +#include "bookmarkmenu.h" +#include "bookmarkdialog.h" +#include "database.h" + + +namespace qpdfview +{ + +namespace +{ + +QModelIndex synchronizeOutlineView(int currentPage, const QAbstractItemModel* model, const QModelIndex& parent) +{ + for(int row = 0, rowCount = model->rowCount(parent); row < rowCount; ++row) + { + const QModelIndex index = model->index(row, 0, parent); + + bool ok = false; + const int page = model->data(index, Model::Document::PageRole).toInt(&ok); + + if(ok && page == currentPage) + { + return index; + } + } + + for(int row = 0, rowCount = model->rowCount(parent); row < rowCount; ++row) + { + const QModelIndex index = model->index(row, 0, parent); + + const QModelIndex match = synchronizeOutlineView(currentPage, model, index); + + if(match.isValid()) + { + return match; + } + } + + return QModelIndex(); +} + +inline void setToolButtonMenu(QToolBar* toolBar, QAction* action, QMenu* menu) +{ + if(QToolButton* toolButton = qobject_cast< QToolButton* >(toolBar->widgetForAction(action))) + { + toolButton->setMenu(menu); + } +} + +inline void setSectionResizeMode(QHeaderView* header, QHeaderView::ResizeMode mode) +{ + if(header->count() > 0) + { +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + header->setSectionResizeMode(mode); + +#else + + header->setResizeMode(mode); + +#endif // QT_VERSION + } +} + +inline void setSectionResizeMode(QHeaderView* header, int index, QHeaderView::ResizeMode mode) +{ + if(header->count() > index) + { +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + header->setSectionResizeMode(index, mode); + +#else + + header->setResizeMode(index, mode); + +#endif // QT_VERSION + } +} + +inline QAction* createTemporaryAction(QObject* parent, const QString& text, const QString& objectName) +{ + QAction* action = new QAction(text, parent); + + action->setObjectName(objectName); + + return action; +} + +void addWidgetActions(QWidget* widget, const QStringList& actionNames, const QList< QAction* >& actions) +{ + foreach(const QString& actionName, actionNames) + { + if(actionName == QLatin1String("separator")) + { + QAction* separator = new QAction(widget); + separator->setSeparator(true); + + widget->addAction(separator); + + continue; + } + + foreach(QAction* action, actions) + { + if(actionName == action->objectName()) + { + widget->addAction(action); + + break; + } + } + } +} + +class SignalBlocker +{ +public: + SignalBlocker(QObject* object) : m_object(object) + { + m_object->blockSignals(true); + } + + ~SignalBlocker() + { + m_object->blockSignals(false); + } + +private: + Q_DISABLE_COPY(SignalBlocker) + + QObject* m_object; + +}; + +DocumentView* findCurrentTab(QObject* const object) +{ + if(DocumentView* const tab = qobject_cast< DocumentView* >(object)) + { + return tab; + } + + if(Splitter* const splitter = qobject_cast< Splitter* >(object)) + { + return findCurrentTab(splitter->currentWidget()); + } + + return 0; +} + +QVector< DocumentView* > findAllTabs(QObject* const object) +{ + QVector< DocumentView* > tabs; + + if(DocumentView* const tab = qobject_cast< DocumentView* >(object)) + { + tabs.append(tab); + } + + if(Splitter* const splitter = qobject_cast< Splitter* >(object)) + { + for(int index = 0, count = splitter->count(); index < count; ++index) + { + tabs += findAllTabs(splitter->widget(index)); + } + } + + return tabs; +} + +} // anonymous + +class MainWindow::CurrentTabChangeBlocker +{ + Q_DISABLE_COPY(CurrentTabChangeBlocker) + +private: + MainWindow* const that; + +public: + CurrentTabChangeBlocker(MainWindow* const that) : that(that) + { + that->m_currentTabChangedBlocked = true; + } + + ~CurrentTabChangeBlocker() + { + that->m_currentTabChangedBlocked = false; + + that->on_tabWidget_currentChanged(); + } + +}; + +class MainWindow::RestoreTab : public Database::RestoreTab +{ +private: + MainWindow* const that; + +public: + RestoreTab(MainWindow* that) : that(that) {} + + DocumentView* operator()(const QString& absoluteFilePath) const + { + if(that->openInNewTab(absoluteFilePath, -1, QRectF(), true)) + { + return that->currentTab(); + } + else + { + return 0; + } + } + +}; + +class MainWindow::TextValueMapper : public MappingSpinBox::TextValueMapper +{ +private: + MainWindow* const that; + +public: + TextValueMapper(MainWindow* that) : that(that) {} + + QString textFromValue(int val, bool& ok) const + { + const DocumentView* currentTab = that->currentTab(); + + if(currentTab == 0 || !(currentTab->hasFrontMatter() || that->s_settings->mainWindow().usePageLabel())) + { + ok = false; + return QString(); + } + + ok = true; + return currentTab->pageLabelFromNumber(val); + } + + int valueFromText(const QString& text, bool& ok) const + { + const DocumentView* currentTab = that->currentTab(); + + if(currentTab == 0 || !(currentTab->hasFrontMatter() || that->s_settings->mainWindow().usePageLabel())) + { + ok = false; + return 0; + } + + const QString& prefix = that->m_currentPageSpinBox->prefix(); + const QString& suffix = that->m_currentPageSpinBox->suffix(); + + int from = 0; + int size = text.size(); + + if(!prefix.isEmpty() && text.startsWith(prefix)) + { + from += prefix.size(); + size -= from; + } + + if(!suffix.isEmpty() && text.endsWith(suffix)) + { + size -= suffix.size(); + } + + const QString& trimmedText = text.mid(from, size).trimmed(); + + ok = true; + return currentTab->pageNumberFromLabel(trimmedText); + } + +}; + +Settings* MainWindow::s_settings = 0; +Database* MainWindow::s_database = 0; +ShortcutHandler* MainWindow::s_shortcutHandler = 0; +SearchModel* MainWindow::s_searchModel = 0; + +MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), + m_outlineView(0), + m_thumbnailsView(0) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + if(s_shortcutHandler == 0) + { + s_shortcutHandler = ShortcutHandler::instance(); + } + + if(s_searchModel == 0) + { + s_searchModel = SearchModel::instance(); + } + + prepareStyle(); + + setAcceptDrops(true); + + createWidgets(); + createActions(); + createToolBars(); + createDocks(); + createMenus(); + + restoreGeometry(s_settings->mainWindow().geometry()); + restoreState(s_settings->mainWindow().state()); + + prepareDatabase(); +} + +QSize MainWindow::sizeHint() const +{ + return QSize(600, 800); +} + +QMenu* MainWindow::createPopupMenu() +{ + QMenu* menu = new QMenu(); + + menu->addAction(m_fileToolBar->toggleViewAction()); + menu->addAction(m_editToolBar->toggleViewAction()); + menu->addAction(m_viewToolBar->toggleViewAction()); + menu->addSeparator(); + menu->addAction(m_outlineDock->toggleViewAction()); + menu->addAction(m_propertiesDock->toggleViewAction()); + menu->addAction(m_thumbnailsDock->toggleViewAction()); + menu->addAction(m_bookmarksDock->toggleViewAction()); + + if(s_settings->mainWindow().extendedSearchDock()) + { + menu->addAction(m_searchDock->toggleViewAction()); + } + + return menu; +} + +void MainWindow::show() +{ + QMainWindow::show(); + + if(s_settings->mainWindow().restoreTabs()) + { + s_database->restoreTabs(RestoreTab(this)); + + const int currentTabIndex = s_settings->mainWindow().currentTabIndex(); + + if(currentTabIndex != -1) + { + m_tabWidget->setCurrentIndex(currentTabIndex); + } + } + + if(s_settings->mainWindow().restoreBookmarks()) + { + s_database->restoreBookmarks(); + } + + on_tabWidget_currentChanged(); +} + +bool MainWindow::open(const QString& filePath, int page, const QRectF& highlight, bool quiet) +{ + if(DocumentView* const tab = currentTab()) + { + if(!saveModifications(tab)) + { + return false; + } + + if(tab->open(filePath)) + { + s_settings->mainWindow().setOpenPath(tab->fileInfo().absolutePath()); + m_recentlyUsedMenu->addOpenAction(tab->fileInfo()); + + m_tabWidget->setCurrentTabText(tab->title()); + m_tabWidget->setCurrentTabToolTip(tab->fileInfo().absoluteFilePath()); + + restorePerFileSettings(tab); + scheduleSaveTabs(); + + tab->jumpToPage(page, false); + tab->setFocus(); + + if(!highlight.isNull()) + { + tab->temporaryHighlight(page, highlight); + } + + return true; + } + else + { + if(!quiet) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not open '%1'.").arg(filePath)); + } + } + } + + return false; +} + +bool MainWindow::openInNewTab(const QString& filePath, int page, const QRectF& highlight, bool quiet) +{ + DocumentView* const newTab = new DocumentView(this); + + if(newTab->open(filePath)) + { + s_settings->mainWindow().setOpenPath(newTab->fileInfo().absolutePath()); + m_recentlyUsedMenu->addOpenAction(newTab->fileInfo()); + + addTab(newTab); + addTabAction(newTab); + connectTab(newTab); + + newTab->show(); + + restorePerFileSettings(newTab); + scheduleSaveTabs(); + + newTab->jumpToPage(page, false); + newTab->setFocus(); + + if(!highlight.isNull()) + { + newTab->temporaryHighlight(page, highlight); + } + + return true; + } + else + { + delete newTab; + + if(!quiet) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not open '%1'.").arg(filePath)); + } + } + + return false; +} + +bool MainWindow::jumpToPageOrOpenInNewTab(const QString& filePath, int page, bool refreshBeforeJump, const QRectF& highlight, bool quiet) +{ + const QFileInfo fileInfo(filePath); + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + foreach(DocumentView* tab, allTabs(index)) + { + if(tab->fileInfo() == fileInfo) + { + m_tabWidget->setCurrentIndex(index); + + if(refreshBeforeJump) + { + if(!tab->refresh()) + { + return false; + } + } + + tab->jumpToPage(page); + tab->setFocus(); + + if(!highlight.isNull()) + { + tab->temporaryHighlight(page, highlight); + } + + return true; + } + } + } + + return openInNewTab(filePath, page, highlight, quiet); +} + +void MainWindow::startSearch(const QString& text) +{ + if(DocumentView* const tab = currentTab()) + { + m_searchDock->setVisible(true); + + m_searchLineEdit->setText(text); + m_searchLineEdit->startSearch(); + + tab->setFocus(); + } +} + +void MainWindow::saveDatabase() +{ + QTimer::singleShot(0, this, SLOT(on_saveDatabase_timeout())); +} + +void MainWindow::on_tabWidget_currentChanged() +{ + if(m_currentTabChangedBlocked) + { + return; + } + + DocumentView* const tab = currentTab(); + const bool hasCurrent = tab != 0; + + m_refreshAction->setEnabled(hasCurrent); + m_printAction->setEnabled(hasCurrent); + + m_previousPageAction->setEnabled(hasCurrent); + m_nextPageAction->setEnabled(hasCurrent); + m_firstPageAction->setEnabled(hasCurrent); + m_lastPageAction->setEnabled(hasCurrent); + + m_setFirstPageAction->setEnabled(hasCurrent); + + m_jumpToPageAction->setEnabled(hasCurrent); + + m_searchAction->setEnabled(hasCurrent); + + m_copyToClipboardModeAction->setEnabled(hasCurrent); + m_addAnnotationModeAction->setEnabled(hasCurrent); + + m_continuousModeAction->setEnabled(hasCurrent); + m_twoPagesModeAction->setEnabled(hasCurrent); + m_twoPagesWithCoverPageModeAction->setEnabled(hasCurrent); + m_multiplePagesModeAction->setEnabled(hasCurrent); + m_rightToLeftModeAction->setEnabled(hasCurrent); + + m_zoomInAction->setEnabled(hasCurrent); + m_zoomOutAction->setEnabled(hasCurrent); + m_originalSizeAction->setEnabled(hasCurrent); + m_fitToPageWidthModeAction->setEnabled(hasCurrent); + m_fitToPageSizeModeAction->setEnabled(hasCurrent); + + m_rotateLeftAction->setEnabled(hasCurrent); + m_rotateRightAction->setEnabled(hasCurrent); + + m_invertColorsAction->setEnabled(hasCurrent); + m_convertToGrayscaleAction->setEnabled(hasCurrent); + m_trimMarginsAction->setEnabled(hasCurrent); + + m_compositionModeMenu->setEnabled(hasCurrent); + m_darkenWithPaperColorAction->setEnabled(hasCurrent); + m_lightenWithPaperColorAction->setEnabled(hasCurrent); + + m_fontsAction->setEnabled(hasCurrent); + + m_presentationAction->setEnabled(hasCurrent); + + m_previousTabAction->setEnabled(hasCurrent); + m_nextTabAction->setEnabled(hasCurrent); + m_closeTabAction->setEnabled(hasCurrent); + m_closeAllTabsAction->setEnabled(hasCurrent); + m_closeAllTabsButCurrentTabAction->setEnabled(hasCurrent); + + m_previousBookmarkAction->setEnabled(hasCurrent); + m_nextBookmarkAction->setEnabled(hasCurrent); + m_addBookmarkAction->setEnabled(hasCurrent); + m_removeBookmarkAction->setEnabled(hasCurrent); + + m_currentPageSpinBox->setEnabled(hasCurrent); + m_scaleFactorComboBox->setEnabled(hasCurrent); + m_searchLineEdit->setEnabled(hasCurrent); + m_matchCaseCheckBox->setEnabled(hasCurrent); + m_wholeWordsCheckBox->setEnabled(hasCurrent); + m_highlightAllCheckBox->setEnabled(hasCurrent); + + m_openCopyInNewTabAction->setEnabled(hasCurrent); + m_openCopyInNewWindowAction->setEnabled(hasCurrent); + m_openContainingFolderAction->setEnabled(hasCurrent); + m_moveToInstanceAction->setEnabled(hasCurrent); + m_splitViewHorizontallyAction->setEnabled(hasCurrent); + m_splitViewVerticallyAction->setEnabled(hasCurrent); + m_closeCurrentViewAction->setEnabled(hasCurrent); + + m_searchDock->toggleViewAction()->setEnabled(hasCurrent); + + if(hasCurrent) + { + const bool canSave = tab->canSave(); + m_saveAction->setEnabled(canSave); + m_saveAsAction->setEnabled(canSave); + m_saveCopyAction->setEnabled(canSave); + + if(m_searchDock->isVisible()) + { + m_searchLineEdit->stopTimer(); + m_searchLineEdit->setProgress(tab->searchProgress()); + + if(tab->hasSearchResults()) + { + m_searchLineEdit->setText(tab->searchText()); + m_matchCaseCheckBox->setChecked(tab->searchMatchCase()); + m_wholeWordsCheckBox->setChecked(tab->searchWholeWords()); + } + } + + m_bookmarksView->setModel(bookmarkModelForCurrentTab()); + + on_thumbnails_dockLocationChanged(dockWidgetArea(m_thumbnailsDock)); + + m_thumbnailsView->setScene(tab->thumbnailsScene()); + tab->setThumbnailsViewportSize(m_thumbnailsView->viewport()->size()); + + on_currentTab_documentChanged(); + + on_currentTab_numberOfPagesChaned(tab->numberOfPages()); + on_currentTab_currentPageChanged(tab->currentPage()); + + on_currentTab_canJumpChanged(tab->canJumpBackward(), tab->canJumpForward()); + + on_currentTab_continuousModeChanged(tab->continuousMode()); + on_currentTab_layoutModeChanged(tab->layoutMode()); + on_currentTab_rightToLeftModeChanged(tab->rightToLeftMode()); + on_currentTab_scaleModeChanged(tab->scaleMode()); + on_currentTab_scaleFactorChanged(tab->scaleFactor()); + + on_currentTab_invertColorsChanged(tab->invertColors()); + on_currentTab_convertToGrayscaleChanged(tab->convertToGrayscale()); + on_currentTab_trimMarginsChanged(tab->trimMargins()); + + on_currentTab_compositionModeChanged(tab->compositionMode()); + + on_currentTab_highlightAllChanged(tab->highlightAll()); + on_currentTab_rubberBandModeChanged(tab->rubberBandMode()); + } + else + { + m_saveAction->setEnabled(false); + m_saveAsAction->setEnabled(false); + m_saveCopyAction->setEnabled(false); + + if(m_searchDock->isVisible()) + { + m_searchLineEdit->stopTimer(); + m_searchLineEdit->setProgress(0); + + m_searchDock->setVisible(false); + } + + m_outlineView->setModel(0); + m_propertiesView->setModel(0); + m_bookmarksView->setModel(0); + + m_thumbnailsView->setScene(0); + + setWindowTitleForCurrentTab(); + setCurrentPageSuffixForCurrentTab(); + + m_currentPageSpinBox->setValue(1); + m_scaleFactorComboBox->setCurrentIndex(4); + + m_jumpBackwardAction->setEnabled(false); + m_jumpForwardAction->setEnabled(false); + + m_copyToClipboardModeAction->setChecked(false); + m_addAnnotationModeAction->setChecked(false); + + m_continuousModeAction->setChecked(false); + m_twoPagesModeAction->setChecked(false); + m_twoPagesWithCoverPageModeAction->setChecked(false); + m_multiplePagesModeAction->setChecked(false); + + m_fitToPageSizeModeAction->setChecked(false); + m_fitToPageWidthModeAction->setChecked(false); + + m_invertColorsAction->setChecked(false); + m_convertToGrayscaleAction->setChecked(false); + m_trimMarginsAction->setChecked(false); + + m_darkenWithPaperColorAction->setChecked(false); + m_lightenWithPaperColorAction->setChecked(false); + } +} + +void MainWindow::on_tabWidget_tabCloseRequested(int index) +{ + on_closeTabs_triggered(allTabs(index)); +} + +void MainWindow::on_tabWidget_tabDragRequested(int index) +{ + QMimeData* mimeData = new QMimeData(); + mimeData->setUrls(QList< QUrl >() << QUrl::fromLocalFile(currentTab(index)->fileInfo().absoluteFilePath())); + + QDrag* drag = new QDrag(this); + drag->setMimeData(mimeData); + drag->exec(); +} + +void MainWindow::on_tabWidget_tabContextMenuRequested(QPoint globalPos, int index) +{ + QMenu menu; + + // We block their signals since we need to handle them using the selected instead of the current tab. + SignalBlocker openCopyInNewTabSignalBlocker(m_openCopyInNewTabAction); + SignalBlocker openCopyInNewWindowSignalBlocker(m_openCopyInNewWindowAction); + SignalBlocker openContainingFolderSignalBlocker(m_openContainingFolderAction); + SignalBlocker moveToInstanceSignalBlocker(m_moveToInstanceAction); + SignalBlocker splitViewHorizontallySignalBlocker(m_splitViewHorizontallyAction); + SignalBlocker splitViewVerticallySignalBlocker(m_splitViewVerticallyAction); + SignalBlocker closeCurrentViewSignalBlocker(m_closeCurrentViewAction); + + QAction* copyFilePathAction = createTemporaryAction(&menu, tr("Copy file path"), QLatin1String("copyFilePath")); + QAction* selectFilePathAction = createTemporaryAction(&menu, tr("Select file path"), QLatin1String("selectFilePath")); + + QAction* closeAllTabsAction = createTemporaryAction(&menu, tr("Close all tabs"), QLatin1String("closeAllTabs")); + QAction* closeAllTabsButThisOneAction = createTemporaryAction(&menu, tr("Close all tabs but this one"), QLatin1String("closeAllTabsButThisOne")); + QAction* closeAllTabsToTheLeftAction = createTemporaryAction(&menu, tr("Close all tabs to the left"), QLatin1String("closeAllTabsToTheLeft")); + QAction* closeAllTabsToTheRightAction = createTemporaryAction(&menu, tr("Close all tabs to the right"), QLatin1String("closeAllTabsToTheRight")); + + selectFilePathAction->setVisible(QApplication::clipboard()->supportsSelection()); + + QList< QAction* > actions; + + actions << m_openCopyInNewTabAction << m_openCopyInNewWindowAction << m_openContainingFolderAction << m_moveToInstanceAction + << m_splitViewHorizontallyAction << m_splitViewVerticallyAction << m_closeCurrentViewAction + << copyFilePathAction << selectFilePathAction + << closeAllTabsAction << closeAllTabsButThisOneAction + << closeAllTabsToTheLeftAction << closeAllTabsToTheRightAction; + + addWidgetActions(&menu, s_settings->mainWindow().tabContextMenu(), actions); + + const QAction* action = menu.exec(globalPos); + + DocumentView* const tab = currentTab(index); + + if(action == m_openCopyInNewTabAction) + { + on_openCopyInNewTab_triggered(tab); + } + else if(action == m_openCopyInNewWindowAction) + { + on_openCopyInNewWindow_triggered(tab); + } + else if(action == m_openContainingFolderAction) + { + on_openContainingFolder_triggered(tab); + } + else if(action == m_moveToInstanceAction) + { + on_moveToInstance_triggered(tab); + } + else if(action == m_splitViewHorizontallyAction) + { + on_splitView_split_triggered(Qt::Horizontal, index); + } + else if(action == m_splitViewVerticallyAction) + { + on_splitView_split_triggered(Qt::Vertical, index); + } + else if(action == m_closeCurrentViewAction) + { + on_splitView_closeCurrent_triggered(index); + } + else if(action == copyFilePathAction) + { + QApplication::clipboard()->setText(tab->fileInfo().absoluteFilePath()); + } + else if(action == selectFilePathAction) + { + QApplication::clipboard()->setText(tab->fileInfo().absoluteFilePath(), QClipboard::Selection); + } + else if(action == closeAllTabsAction) + { + on_closeAllTabs_triggered(); + } + else if(action == closeAllTabsButThisOneAction) + { + on_closeAllTabsButThisOne_triggered(index); + } + else if(action == closeAllTabsToTheLeftAction) + { + on_closeAllTabsToTheLeft_triggered(index); + } + else if(action == closeAllTabsToTheRightAction) + { + on_closeAllTabsToTheRight_triggered(index); + } +} + +#define ONLY_IF_SENDER_IS_CURRENT_TAB if(!senderIsCurrentTab()) { return; } + +void MainWindow::on_currentTab_documentChanged() +{ + DocumentView* const senderTab = findCurrentTab(sender()); + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + if(senderTab == currentTab(index)) + { + m_tabWidget->setTabText(index, senderTab->title()); + m_tabWidget->setTabToolTip(index, senderTab->fileInfo().absoluteFilePath()); + + break; + } + } + + foreach(QAction* tabAction, m_tabsMenu->actions()) + { + if(senderTab == tabAction->parent()) + { + tabAction->setText(senderTab->title()); + + break; + } + } + + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_outlineView->setModel(currentTab()->outlineModel()); + m_propertiesView->setModel(currentTab()->propertiesModel()); + + m_outlineView->restoreExpansion(); + + setWindowTitleForCurrentTab(); + setWindowModified(currentTab()->wasModified()); +} + +void MainWindow::on_currentTab_documentModified() +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + setWindowModified(true); +} + +void MainWindow::on_currentTab_numberOfPagesChaned(int numberOfPages) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_currentPageSpinBox->setRange(1, numberOfPages); + + setWindowTitleForCurrentTab(); + setCurrentPageSuffixForCurrentTab(); +} + +void MainWindow::on_currentTab_currentPageChanged(int currentPage) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_currentPageSpinBox->setValue(currentPage); + + if(s_settings->mainWindow().synchronizeOutlineView() && m_outlineView->model() != 0) + { + const QModelIndex match = synchronizeOutlineView(currentPage, m_outlineView->model(), QModelIndex()); + + if(match.isValid()) + { + m_outlineView->collapseAll(); + + m_outlineView->expandAbove(match); + m_outlineView->setCurrentIndex(match); + } + } + + m_thumbnailsView->ensureVisible(currentTab()->thumbnailItems().at(currentPage - 1)); + + setWindowTitleForCurrentTab(); + setCurrentPageSuffixForCurrentTab(); +} + +void MainWindow::on_currentTab_canJumpChanged(bool backward, bool forward) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_jumpBackwardAction->setEnabled(backward); + m_jumpForwardAction->setEnabled(forward); +} + +void MainWindow::on_currentTab_continuousModeChanged(bool continuousMode) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_continuousModeAction->setChecked(continuousMode); +} + +void MainWindow::on_currentTab_layoutModeChanged(LayoutMode layoutMode) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_twoPagesModeAction->setChecked(layoutMode == TwoPagesMode); + m_twoPagesWithCoverPageModeAction->setChecked(layoutMode == TwoPagesWithCoverPageMode); + m_multiplePagesModeAction->setChecked(layoutMode == MultiplePagesMode); +} + +void MainWindow::on_currentTab_rightToLeftModeChanged(bool rightToLeftMode) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_rightToLeftModeAction->setChecked(rightToLeftMode); +} + +void MainWindow::on_currentTab_scaleModeChanged(ScaleMode scaleMode) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + switch(scaleMode) + { + default: + case ScaleFactorMode: + m_fitToPageWidthModeAction->setChecked(false); + m_fitToPageSizeModeAction->setChecked(false); + + on_currentTab_scaleFactorChanged(currentTab()->scaleFactor()); + break; + case FitToPageWidthMode: + m_fitToPageWidthModeAction->setChecked(true); + m_fitToPageSizeModeAction->setChecked(false); + + m_scaleFactorComboBox->setCurrentIndex(0); + + m_zoomInAction->setEnabled(true); + m_zoomOutAction->setEnabled(true); + break; + case FitToPageSizeMode: + m_fitToPageWidthModeAction->setChecked(false); + m_fitToPageSizeModeAction->setChecked(true); + + m_scaleFactorComboBox->setCurrentIndex(1); + + m_zoomInAction->setEnabled(true); + m_zoomOutAction->setEnabled(true); + break; + } +} + +void MainWindow::on_currentTab_scaleFactorChanged(qreal scaleFactor) +{ + scheduleSaveTabs(); + scheduleSavePerFileSettings(); + + ONLY_IF_SENDER_IS_CURRENT_TAB + + if(currentTab()->scaleMode() == ScaleFactorMode) + { + m_scaleFactorComboBox->setCurrentIndex(m_scaleFactorComboBox->findData(scaleFactor)); + m_scaleFactorComboBox->lineEdit()->setText(QString("%1 %").arg(qRound(scaleFactor * 100.0))); + + m_zoomInAction->setDisabled(qFuzzyCompare(scaleFactor, s_settings->documentView().maximumScaleFactor())); + m_zoomOutAction->setDisabled(qFuzzyCompare(scaleFactor, s_settings->documentView().minimumScaleFactor())); + } +} + +void MainWindow::on_currentTab_rotationChanged(Rotation rotation) +{ + Q_UNUSED(rotation); + + scheduleSaveTabs(); + scheduleSavePerFileSettings(); +} + +void MainWindow::on_currentTab_linkClicked(int page) +{ + openInNewTab(currentTab()->fileInfo().filePath(), page); +} + +void MainWindow::on_currentTab_linkClicked(bool newTab, const QString& filePath, int page) +{ + if(newTab) + { + openInNewTab(filePath, page); + } + else + { + jumpToPageOrOpenInNewTab(filePath, page, true); + } +} + +void MainWindow::on_currentTab_renderFlagsChanged(qpdfview::RenderFlags renderFlags) +{ + Q_UNUSED(renderFlags); + + scheduleSaveTabs(); + scheduleSavePerFileSettings(); +} + +void MainWindow::on_currentTab_invertColorsChanged(bool invertColors) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_invertColorsAction->setChecked(invertColors); +} + +void MainWindow::on_currentTab_convertToGrayscaleChanged(bool convertToGrayscale) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_convertToGrayscaleAction->setChecked(convertToGrayscale); +} + +void MainWindow::on_currentTab_trimMarginsChanged(bool trimMargins) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_trimMarginsAction->setChecked(trimMargins); +} + +void MainWindow::on_currentTab_compositionModeChanged(CompositionMode compositionMode) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + switch(compositionMode) + { + default: + case DefaultCompositionMode: + m_darkenWithPaperColorAction->setChecked(false); + m_lightenWithPaperColorAction->setChecked(false); + break; + case DarkenWithPaperColorMode: + m_darkenWithPaperColorAction->setChecked(true); + m_lightenWithPaperColorAction->setChecked(false); + break; + case LightenWithPaperColorMode: + m_darkenWithPaperColorAction->setChecked(false); + m_lightenWithPaperColorAction->setChecked(true); + break; + } +} + +void MainWindow::on_currentTab_highlightAllChanged(bool highlightAll) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_highlightAllCheckBox->setChecked(highlightAll); +} + +void MainWindow::on_currentTab_rubberBandModeChanged(RubberBandMode rubberBandMode) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_copyToClipboardModeAction->setChecked(rubberBandMode == CopyToClipboardMode); + m_addAnnotationModeAction->setChecked(rubberBandMode == AddAnnotationMode); +} + +void MainWindow::on_currentTab_searchFinished() +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_searchLineEdit->setProgress(0); +} + +void MainWindow::on_currentTab_searchProgressChanged(int progress) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + m_searchLineEdit->setProgress(progress); +} + +void MainWindow::on_currentTab_customContextMenuRequested(QPoint pos) +{ + ONLY_IF_SENDER_IS_CURRENT_TAB + + QMenu menu; + + QAction* sourceLinkAction = sourceLinkActionForCurrentTab(&menu, pos); + + QList< QAction* > actions; + + actions << m_openCopyInNewTabAction << m_openCopyInNewWindowAction << m_openContainingFolderAction << m_moveToInstanceAction + << m_splitViewHorizontallyAction << m_splitViewVerticallyAction << m_closeCurrentViewAction + << m_previousPageAction << m_nextPageAction + << m_firstPageAction << m_lastPageAction + << m_jumpToPageAction << m_jumpBackwardAction << m_jumpForwardAction + << m_setFirstPageAction; + + if(m_searchDock->isVisible()) + { + actions << m_findPreviousAction << m_findNextAction << m_cancelSearchAction; + } + + menu.addAction(sourceLinkAction); + menu.addSeparator(); + + addWidgetActions(&menu, s_settings->mainWindow().documentContextMenu(), actions); + + const QAction* action = menu.exec(currentTab()->mapToGlobal(pos)); + + if(action == sourceLinkAction) + { + currentTab()->openInSourceEditor(sourceLinkAction->data().value< DocumentView::SourceLink >()); + } +} + +void MainWindow::on_splitView_splitHorizontally_triggered() +{ + on_splitView_split_triggered(Qt::Horizontal, m_tabWidget->currentIndex()); +} + +void MainWindow::on_splitView_splitVertically_triggered() +{ + on_splitView_split_triggered(Qt::Vertical, m_tabWidget->currentIndex()); +} + +void MainWindow::on_splitView_split_triggered(Qt::Orientation orientation, int index) +{ + const QString path = s_settings->mainWindow().openPath(); + const QString filePath = QFileDialog::getOpenFileName(this, tr("Open"), path, DocumentView::openFilter().join(";;")); + + if(filePath.isEmpty()) + { + return; + } + + DocumentView* const newTab = new DocumentView(this); + + if(!newTab->open(filePath)) + { + delete newTab; + return; + } + + Splitter* splitter = new Splitter(orientation, this); + connect(splitter, SIGNAL(currentWidgetChanged(QWidget*)), this, SLOT(on_splitView_currentWidgetChanged(QWidget*))); + + QWidget* const tab = m_tabWidget->widget(index); + const QString tabText = m_tabWidget->tabText(index); + const QString tabToolTip = m_tabWidget->tabToolTip(index); + + m_tabWidget->removeTab(index); + + splitter->addWidget(tab); + splitter->addWidget(newTab); + + m_tabWidget->insertTab(index, splitter, tabText); + m_tabWidget->setTabToolTip(index, tabToolTip); + + addTabAction(newTab); + connectTab(newTab); + + m_tabWidget->setCurrentIndex(index); + tab->setFocus(); + + splitter->setUniformSizes(); + tab->show(); + newTab->show(); + + if(s_settings->mainWindow().synchronizeSplitViews()) + { + DocumentView* const oldTab = findCurrentTab(tab); + + connect(oldTab, SIGNAL(currentPageChanged(int,bool)), newTab, SLOT(jumpToPage(int,bool))); + connect(oldTab->horizontalScrollBar(), SIGNAL(valueChanged(int)), newTab->horizontalScrollBar(), SLOT(setValue(int))); + connect(oldTab->verticalScrollBar(), SIGNAL(valueChanged(int)), newTab->verticalScrollBar(), SLOT(setValue(int))); + } +} + +void MainWindow::on_splitView_closeCurrent_triggered() +{ + on_splitView_closeCurrent_triggered(m_tabWidget->currentIndex()); +} + +void MainWindow::on_splitView_closeCurrent_triggered(int index) +{ + DocumentView* const tab = currentTab(index); + + if(saveModifications(tab)) + { + closeTab(tab); + } +} + +void MainWindow::on_splitView_currentWidgetChanged(QWidget* currentWidget) +{ + for(QWidget* parentWidget = currentWidget->parentWidget(); parentWidget != 0; parentWidget = parentWidget->parentWidget()) + { + if(parentWidget == m_tabWidget->currentWidget()) + { + on_tabWidget_currentChanged(); + + return; + } + } +} + +#undef ONLY_IF_SENDER_IS_CURRENT_TAB + +void MainWindow::on_currentPage_editingFinished() +{ + if(m_tabWidget->hasCurrent()) + { + currentTab()->jumpToPage(m_currentPageSpinBox->value()); + } +} + +void MainWindow::on_currentPage_returnPressed() +{ + currentTab()->setFocus(); +} + +void MainWindow::on_scaleFactor_activated(int index) +{ + if(index == 0) + { + currentTab()->setScaleMode(FitToPageWidthMode); + } + else if(index == 1) + { + currentTab()->setScaleMode(FitToPageSizeMode); + } + else + { + bool ok = false; + const qreal scaleFactor = m_scaleFactorComboBox->itemData(index).toReal(&ok); + + if(ok) + { + currentTab()->setScaleFactor(scaleFactor); + currentTab()->setScaleMode(ScaleFactorMode); + } + } + + currentTab()->setFocus(); +} + +void MainWindow::on_scaleFactor_editingFinished() +{ + if(m_tabWidget->hasCurrent()) + { + bool ok = false; + qreal scaleFactor = m_scaleFactorComboBox->lineEdit()->text().toInt(&ok) / 100.0; + + scaleFactor = qMax(scaleFactor, s_settings->documentView().minimumScaleFactor()); + scaleFactor = qMin(scaleFactor, s_settings->documentView().maximumScaleFactor()); + + if(ok) + { + currentTab()->setScaleFactor(scaleFactor); + currentTab()->setScaleMode(ScaleFactorMode); + } + + on_currentTab_scaleFactorChanged(currentTab()->scaleFactor()); + on_currentTab_scaleModeChanged(currentTab()->scaleMode()); + } +} + +void MainWindow::on_scaleFactor_returnPressed() +{ + currentTab()->setFocus(); +} + +void MainWindow::on_open_triggered() +{ + if(m_tabWidget->hasCurrent()) + { + const QString path = s_settings->mainWindow().openPath(); + const QString filePath = QFileDialog::getOpenFileName(this, tr("Open"), path, DocumentView::openFilter().join(";;")); + + if(!filePath.isEmpty()) + { + open(filePath); + } + } + else + { + on_openInNewTab_triggered(); + } +} + +void MainWindow::on_openInNewTab_triggered() +{ + const QString path = s_settings->mainWindow().openPath(); + const QStringList filePaths = QFileDialog::getOpenFileNames(this, tr("Open in new tab"), path, DocumentView::openFilter().join(";;")); + + if(!filePaths.isEmpty()) + { + CurrentTabChangeBlocker currentTabChangeBlocker(this); + + foreach(const QString& filePath, filePaths) + { + openInNewTab(filePath); + } + } +} + +void MainWindow::on_openCopyInNewTab_triggered() +{ + on_openCopyInNewTab_triggered(currentTab()); +} + +void MainWindow::on_openCopyInNewTab_triggered(const DocumentView* tab) +{ + openInNewTab(tab->fileInfo().filePath(), tab->currentPage()); +} + +void MainWindow::on_openCopyInNewWindow_triggered() +{ + on_openCopyInNewWindow_triggered(currentTab()); +} + +void MainWindow::on_openCopyInNewWindow_triggered(const DocumentView* tab) +{ + openInNewWindow(tab->fileInfo().absoluteFilePath(), tab->currentPage()); +} + +void MainWindow::on_openContainingFolder_triggered() +{ + on_openContainingFolder_triggered(currentTab()); +} + +void MainWindow::on_openContainingFolder_triggered(const DocumentView* tab) +{ + QDesktopServices::openUrl(QUrl::fromLocalFile(tab->fileInfo().absolutePath())); +} + +void MainWindow::on_moveToInstance_triggered() +{ + on_moveToInstance_triggered(currentTab()); +} + +void MainWindow::on_moveToInstance_triggered(DocumentView* tab) +{ +#ifdef WITH_DBUS + + bool ok = false; + const QString instanceName = QInputDialog::getItem(this, tr("Choose instance"), tr("Instance:"), s_database->knownInstanceNames(), 0, true, &ok); + + if(!ok || instanceName == qApp->objectName()) + { + return; + } + + if(!saveModifications(tab)) + { + return; + } + + QScopedPointer< QDBusInterface > interface(MainWindowAdaptor::createInterface(instanceName)); + + if(!interface->isValid()) + { + QMessageBox::warning(this, tr("Move to instance"), tr("Failed to access instance '%1'.").arg(instanceName)); + qCritical() << QDBusConnection::sessionBus().lastError().message(); + return; + } + + interface->call("raiseAndActivate"); + + QDBusReply< bool > reply = interface->call("jumpToPageOrOpenInNewTab", tab->fileInfo().absoluteFilePath(), tab->currentPage(), true, QRectF(), false); + + if(!reply.isValid() || !reply.value()) + { + QMessageBox::warning(this, tr("Move to instance"), tr("Failed to access instance '%1'.").arg(instanceName)); + qCritical() << QDBusConnection::sessionBus().lastError().message(); + return; + } + + interface->call("saveDatabase"); + + closeTab(tab); + +#else + + Q_UNUSED(tab); + + QMessageBox::information(this, tr("Information"), tr("Instance-to-instance communication requires D-Bus support.")); + +#endif // WITH_DBUS +} + +void MainWindow::on_refresh_triggered() +{ + DocumentView* const tab = currentTab(); + + if(saveModifications(tab) && !tab->refresh()) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not refresh '%1'.").arg(currentTab()->fileInfo().filePath())); + } +} + +void MainWindow::on_save_triggered() +{ + DocumentView* const tab = currentTab(); + const QString filePath = tab->fileInfo().filePath(); + + if(!tab->save(filePath, true)) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not save as '%1'.").arg(filePath)); + return; + } + + if(!tab->refresh()) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not refresh '%1'.").arg(filePath)); + } +} + +void MainWindow::on_saveAs_triggered() +{ + DocumentView* const tab = currentTab(); + const QString filePath = QFileDialog::getSaveFileName(this, tr("Save as"), tab->fileInfo().filePath(), tab->saveFilter().join(";;")); + + if(filePath.isEmpty()) + { + return; + } + + if(!tab->save(filePath, true)) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not save as '%1'.").arg(filePath)); + return; + } + + open(filePath, tab->currentPage()); +} + +void MainWindow::on_saveCopy_triggered() +{ + const QDir dir = QDir(s_settings->mainWindow().savePath()); + const QString filePath = QFileDialog::getSaveFileName(this, tr("Save copy"), dir.filePath(currentTab()->fileInfo().fileName()), currentTab()->saveFilter().join(";;")); + + if(!filePath.isEmpty()) + { + if(currentTab()->save(filePath, false)) + { + s_settings->mainWindow().setSavePath(QFileInfo(filePath).absolutePath()); + } + else + { + QMessageBox::warning(this, tr("Warning"), tr("Could not save copy at '%1'.").arg(filePath)); + } + } +} + +void MainWindow::on_print_triggered() +{ + QScopedPointer< QPrinter > printer(PrintDialog::createPrinter()); + QScopedPointer< PrintDialog > printDialog(new PrintDialog(printer.data(), this)); + + printer->setDocName(currentTab()->fileInfo().completeBaseName()); + printer->setFullPage(true); + + printDialog->setMinMax(1, currentTab()->numberOfPages()); + printDialog->setOption(QPrintDialog::PrintToFile, false); + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + printDialog->setOption(QPrintDialog::PrintCurrentPage, true); + +#endif // QT_VERSION + + if(printDialog->exec() != QDialog::Accepted) + { + return; + } + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + if(printDialog->printRange() == QPrintDialog::CurrentPage) + { + printer->setFromTo(currentTab()->currentPage(), currentTab()->currentPage()); + } + +#endif // QT_VERSION + + if(!currentTab()->print(printer.data(), printDialog->printOptions())) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not print '%1'.").arg(currentTab()->fileInfo().filePath())); + } +} + +void MainWindow::on_recentlyUsed_openTriggered(const QString& filePath) +{ + if(!jumpToPageOrOpenInNewTab(filePath, -1, true)) + { + m_recentlyUsedMenu->removeOpenAction(filePath); + } +} + +void MainWindow::on_previousPage_triggered() +{ + currentTab()->previousPage(); +} + +void MainWindow::on_nextPage_triggered() +{ + currentTab()->nextPage(); +} + +void MainWindow::on_firstPage_triggered() +{ + currentTab()->firstPage(); +} + +void MainWindow::on_lastPage_triggered() +{ + currentTab()->lastPage(); +} + +void MainWindow::on_setFirstPage_triggered() +{ + bool ok = false; + const int pageNumber = getMappedNumber(new TextValueMapper(this), + this, tr("Set first page"), tr("Select the first page of the body matter:"), + currentTab()->currentPage(), 1, currentTab()->numberOfPages(), &ok); + + if(ok) + { + currentTab()->setFirstPage(pageNumber); + } +} + +void MainWindow::on_jumpToPage_triggered() +{ + bool ok = false; + const int pageNumber = getMappedNumber(new TextValueMapper(this), + this, tr("Jump to page"), tr("Page:"), + currentTab()->currentPage(), 1, currentTab()->numberOfPages(), &ok); + + if(ok) + { + currentTab()->jumpToPage(pageNumber); + } +} + +void MainWindow::on_jumpBackward_triggered() +{ + currentTab()->jumpBackward(); +} + +void MainWindow::on_jumpForward_triggered() +{ + currentTab()->jumpForward(); +} + +void MainWindow::on_search_triggered() +{ + m_searchDock->setVisible(true); + m_searchDock->raise(); + + m_searchLineEdit->selectAll(); + m_searchLineEdit->setFocus(); +} + +void MainWindow::on_findPrevious_triggered() +{ + if(!m_searchLineEdit->text().isEmpty()) + { + currentTab()->findPrevious(); + } +} + +void MainWindow::on_findNext_triggered() +{ + if(!m_searchLineEdit->text().isEmpty()) + { + currentTab()->findNext(); + } +} + +void MainWindow::on_cancelSearch_triggered() +{ + m_searchLineEdit->stopTimer(); + m_searchLineEdit->setProgress(0); + + foreach(DocumentView* tab, allTabs()) + { + tab->cancelSearch(); + } + + if(!s_settings->mainWindow().extendedSearchDock()) + { + m_searchDock->setVisible(false); + } +} + +void MainWindow::on_copyToClipboardMode_triggered(bool checked) +{ + currentTab()->setRubberBandMode(checked ? CopyToClipboardMode : ModifiersMode); +} + +void MainWindow::on_addAnnotationMode_triggered(bool checked) +{ + currentTab()->setRubberBandMode(checked ? AddAnnotationMode : ModifiersMode); +} + +void MainWindow::on_settings_triggered() +{ + QScopedPointer< SettingsDialog > settingsDialog(new SettingsDialog(this)); + + if(settingsDialog->exec() != QDialog::Accepted) + { + return; + } + + s_settings->sync(); + + m_tabWidget->setTabPosition(static_cast< QTabWidget::TabPosition >(s_settings->mainWindow().tabPosition())); + m_tabWidget->setTabBarPolicy(static_cast< TabWidget::TabBarPolicy >(s_settings->mainWindow().tabVisibility())); + m_tabWidget->setSpreadTabs(s_settings->mainWindow().spreadTabs()); + + m_tabsMenu->setSearchable(s_settings->mainWindow().searchableMenus()); + m_bookmarksMenu->setSearchable(s_settings->mainWindow().searchableMenus()); + + foreach(DocumentView* tab, allTabs()) + { + if(saveModifications(tab) && !tab->refresh()) + { + QMessageBox::warning(this, tr("Warning"), tr("Could not refresh '%1'.").arg(currentTab()->fileInfo().filePath())); + } + } +} + +void MainWindow::on_continuousMode_triggered(bool checked) +{ + currentTab()->setContinuousMode(checked); +} + +void MainWindow::on_twoPagesMode_triggered(bool checked) +{ + currentTab()->setLayoutMode(checked ? TwoPagesMode : SinglePageMode); +} + +void MainWindow::on_twoPagesWithCoverPageMode_triggered(bool checked) +{ + currentTab()->setLayoutMode(checked ? TwoPagesWithCoverPageMode : SinglePageMode); +} + +void MainWindow::on_multiplePagesMode_triggered(bool checked) +{ + currentTab()->setLayoutMode(checked ? MultiplePagesMode : SinglePageMode); +} + +void MainWindow::on_rightToLeftMode_triggered(bool checked) +{ + currentTab()->setRightToLeftMode(checked); +} + +void MainWindow::on_zoomIn_triggered() +{ + currentTab()->zoomIn(); +} + +void MainWindow::on_zoomOut_triggered() +{ + currentTab()->zoomOut(); +} + +void MainWindow::on_originalSize_triggered() +{ + currentTab()->originalSize(); +} + +void MainWindow::on_fitToPageWidthMode_triggered(bool checked) +{ + currentTab()->setScaleMode(checked ? FitToPageWidthMode : ScaleFactorMode); +} + +void MainWindow::on_fitToPageSizeMode_triggered(bool checked) +{ + currentTab()->setScaleMode(checked ? FitToPageSizeMode : ScaleFactorMode); +} + +void MainWindow::on_rotateLeft_triggered() +{ + currentTab()->rotateLeft(); +} + +void MainWindow::on_rotateRight_triggered() +{ + currentTab()->rotateRight(); +} + +void MainWindow::on_invertColors_triggered(bool checked) +{ + currentTab()->setInvertColors(checked); +} + +void MainWindow::on_convertToGrayscale_triggered(bool checked) +{ + currentTab()->setConvertToGrayscale(checked); +} + +void MainWindow::on_trimMargins_triggered(bool checked) +{ + currentTab()->setTrimMargins(checked); +} + +void MainWindow::on_darkenWithPaperColor_triggered(bool checked) +{ + currentTab()->setCompositionMode(checked ? DarkenWithPaperColorMode : DefaultCompositionMode); +} + +void MainWindow::on_lightenWithPaperColor_triggered(bool checked) +{ + currentTab()->setCompositionMode(checked ? LightenWithPaperColorMode : DefaultCompositionMode); +} + +void MainWindow::on_fonts_triggered() +{ + QScopedPointer< QAbstractItemModel > fontsModel(currentTab()->fontsModel()); + QScopedPointer< FontsDialog > dialog(new FontsDialog(fontsModel.data(), this)); + + dialog->exec(); +} + +void MainWindow::on_fullscreen_triggered(bool checked) +{ + if(checked) + { + m_fullscreenAction->setData(saveGeometry()); + + showFullScreen(); + } + else + { + restoreGeometry(m_fullscreenAction->data().toByteArray()); + + showNormal(); + + restoreGeometry(m_fullscreenAction->data().toByteArray()); + } + + if(s_settings->mainWindow().toggleToolAndMenuBarsWithFullscreen()) + { + m_toggleToolBarsAction->trigger(); + m_toggleMenuBarAction->trigger(); + } +} + +void MainWindow::on_presentation_triggered() +{ + currentTab()->startPresentation(); +} + +void MainWindow::on_previousTab_triggered() +{ + m_tabWidget->previousTab(); +} + +void MainWindow::on_nextTab_triggered() +{ + m_tabWidget->nextTab(); +} + +void MainWindow::on_closeTab_triggered() +{ + on_closeTabs_triggered(allTabs(m_tabWidget->currentIndex())); +} + +void MainWindow::on_closeAllTabs_triggered() +{ + on_closeTabs_triggered(allTabs()); +} + +void MainWindow::on_closeAllTabsButCurrentTab_triggered() +{ + on_closeAllTabsButThisOne_triggered(m_tabWidget->currentIndex()); +} + +void MainWindow::on_closeAllTabsButThisOne_triggered(int thisIndex) +{ + QVector< DocumentView* > tabs; + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + if(index != thisIndex) + { + tabs += allTabs(index); + } + } + + on_closeTabs_triggered(tabs); +} + +void MainWindow::on_closeAllTabsToTheLeft_triggered(int ofIndex) +{ + QVector< DocumentView* > tabs; + + for(int index = 0; index < ofIndex; ++index) + { + tabs += allTabs(index); + } + + on_closeTabs_triggered(tabs); +} + +void MainWindow::on_closeAllTabsToTheRight_triggered(int ofIndex) +{ + QVector< DocumentView* > tabs; + + for(int index = ofIndex + 1, count = m_tabWidget->count(); index < count; ++index) + { + tabs += allTabs(index); + } + + on_closeTabs_triggered(tabs); +} + +void MainWindow::on_closeTabs_triggered(const QVector< DocumentView* >& tabs) +{ + CurrentTabChangeBlocker currentTabChangeBlocker(this); + + foreach(DocumentView* tab, tabs) + { + if(saveModifications(tab)) + { + closeTab(tab); + } + } +} + +void MainWindow::on_restoreMostRecentlyClosedTab_triggered() +{ + m_recentlyClosedMenu->triggerLastTabAction(); +} + +void MainWindow::on_recentlyClosed_tabActionTriggered(QAction* tabAction) +{ + DocumentView* tab = static_cast< DocumentView* >(tabAction->parent()); + + tab->setParent(m_tabWidget); + tab->setVisible(true); + + addTab(tab); + m_tabsMenu->addAction(tabAction); +} + +void MainWindow::on_tabAction_triggered() +{ + DocumentView* const senderTab = static_cast< DocumentView* >(sender()->parent()); + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + if(allTabs(index).contains(senderTab)) + { + m_tabWidget->setCurrentIndex(index); + senderTab->setFocus(); + + break; + } + } +} + +void MainWindow::on_tabShortcut_activated() +{ + for(int index = 0; index < 9; ++index) + { + if(sender() == m_tabShortcuts[index]) + { + m_tabWidget->setCurrentIndex(index); + + break; + } + } +} + +void MainWindow::on_previousBookmark_triggered() +{ + if(const BookmarkModel* model = bookmarkModelForCurrentTab()) + { + QList< int > pages; + + for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row) + { + pages.append(model->index(row).data(BookmarkModel::PageRole).toInt()); + } + + if(!pages.isEmpty()) + { + qSort(pages); + + QList< int >::const_iterator lowerBound = --qLowerBound(pages, currentTab()->currentPage()); + + if(lowerBound >= pages.constBegin()) + { + currentTab()->jumpToPage(*lowerBound); + } + else + { + currentTab()->jumpToPage(pages.last()); + } + } + } +} + +void MainWindow::on_nextBookmark_triggered() +{ + if(const BookmarkModel* model = bookmarkModelForCurrentTab()) + { + QList< int > pages; + + for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row) + { + pages.append(model->index(row).data(BookmarkModel::PageRole).toInt()); + } + + if(!pages.isEmpty()) + { + qSort(pages); + + QList< int >::const_iterator upperBound = qUpperBound(pages, currentTab()->currentPage()); + + if(upperBound < pages.constEnd()) + { + currentTab()->jumpToPage(*upperBound); + } + else + { + currentTab()->jumpToPage(pages.first()); + } + } + } +} + +void MainWindow::on_addBookmark_triggered() +{ + const QString& currentPageLabel = s_settings->mainWindow().usePageLabel() || currentTab()->hasFrontMatter() + ? currentTab()->pageLabelFromNumber(currentTab()->currentPage()) + : currentTab()->defaultPageLabelFromNumber(currentTab()->currentPage()); + + BookmarkItem bookmark(currentTab()->currentPage(), tr("Jump to page %1").arg(currentPageLabel)); + + BookmarkModel* model = bookmarkModelForCurrentTab(false); + + if(model != 0) + { + model->findBookmark(bookmark); + } + + QScopedPointer< BookmarkDialog > dialog(new BookmarkDialog(bookmark, this)); + + if(dialog->exec() == QDialog::Accepted) + { + if(model == 0) + { + model = bookmarkModelForCurrentTab(true); + + m_bookmarksView->setModel(model); + } + + model->addBookmark(bookmark); + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); + } +} + +void MainWindow::on_removeBookmark_triggered() +{ + BookmarkModel* model = bookmarkModelForCurrentTab(); + + if(model != 0) + { + model->removeBookmark(BookmarkItem(currentTab()->currentPage())); + + if(model->isEmpty()) + { + m_bookmarksView->setModel(0); + + BookmarkModel::removePath(currentTab()->fileInfo().absoluteFilePath()); + } + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); + } +} + +void MainWindow::on_removeAllBookmarks_triggered() +{ + m_bookmarksView->setModel(0); + + BookmarkModel::removeAllPaths(); + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); +} + +void MainWindow::on_bookmarksMenu_aboutToShow() +{ + if(!m_bookmarksMenuIsDirty) + { + return; + } + + m_bookmarksMenuIsDirty = false; + + + m_bookmarksMenu->clear(); + + m_bookmarksMenu->addActions(QList< QAction* >() << m_previousBookmarkAction << m_nextBookmarkAction); + m_bookmarksMenu->addSeparator(); + m_bookmarksMenu->addActions(QList< QAction* >() << m_addBookmarkAction << m_removeBookmarkAction << m_removeAllBookmarksAction); + m_bookmarksMenu->addSeparator(); + + foreach(const QString& absoluteFilePath, BookmarkModel::paths()) + { + const BookmarkModel* model = BookmarkModel::fromPath(absoluteFilePath); + + BookmarkMenu* menu = new BookmarkMenu(QFileInfo(absoluteFilePath), m_bookmarksMenu); + + for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row) + { + const QModelIndex index = model->index(row); + + menu->addJumpToPageAction(index.data(BookmarkModel::PageRole).toInt(), index.data(BookmarkModel::LabelRole).toString()); + } + + connect(menu, SIGNAL(openTriggered(QString)), SLOT(on_bookmark_openTriggered(QString))); + connect(menu, SIGNAL(openInNewTabTriggered(QString)), SLOT(on_bookmark_openInNewTabTriggered(QString))); + connect(menu, SIGNAL(jumpToPageTriggered(QString,int)), SLOT(on_bookmark_jumpToPageTriggered(QString,int))); + connect(menu, SIGNAL(removeBookmarkTriggered(QString)), SLOT(on_bookmark_removeBookmarkTriggered(QString))); + + m_bookmarksMenu->addMenu(menu); + } +} + +void MainWindow::on_bookmark_openTriggered(const QString& absoluteFilePath) +{ + if(m_tabWidget->hasCurrent()) + { + open(absoluteFilePath); + } + else + { + openInNewTab(absoluteFilePath); + } +} + +void MainWindow::on_bookmark_openInNewTabTriggered(const QString& absoluteFilePath) +{ + openInNewTab(absoluteFilePath); +} + +void MainWindow::on_bookmark_jumpToPageTriggered(const QString& absoluteFilePath, int page) +{ + jumpToPageOrOpenInNewTab(absoluteFilePath, page); +} + +void MainWindow::on_bookmark_removeBookmarkTriggered(const QString& absoluteFilePath) +{ + BookmarkModel* model = BookmarkModel::fromPath(absoluteFilePath); + + if(model == m_bookmarksView->model()) + { + m_bookmarksView->setModel(0); + } + + BookmarkModel::removePath(absoluteFilePath); + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); +} + +void MainWindow::on_contents_triggered() +{ + if(m_helpDialog.isNull()) + { + m_helpDialog = new HelpDialog(); + + m_helpDialog->show(); + m_helpDialog->setAttribute(Qt::WA_DeleteOnClose); + + connect(this, SIGNAL(destroyed()), m_helpDialog, SLOT(close())); + } + + m_helpDialog->raise(); + m_helpDialog->activateWindow(); +} + +void MainWindow::on_about_triggered() +{ + QMessageBox::about(this, tr("About qpdfview"), (tr("

qpdfview %1

qpdfview is a tabbed document viewer using Qt.

" + "

This version includes:" + "

    ").arg(APPLICATION_VERSION) +#ifdef WITH_PDF + + tr("
  • PDF support using Poppler %1
  • ").arg(POPPLER_VERSION) +#endif // WITH_PDF +#ifdef WITH_PS + + tr("
  • PS support using libspectre %1
  • ").arg(LIBSPECTRE_VERSION) +#endif // WITH_PS +#ifdef WITH_DJVU + + tr("
  • DjVu support using DjVuLibre %1
  • ").arg(DJVULIBRE_VERSION) +#endif // WITH_DJVU +#ifdef WITH_FITZ + + tr("
  • PDF support using Fitz %1
  • ").arg(FITZ_VERSION) +#endif // WITH_FITZ +#ifdef WITH_CUPS + + tr("
  • Printing support using CUPS %1
  • ").arg(CUPS_VERSION) +#endif // WITH_CUPS + + tr("
" + "

See launchpad.net/qpdfview for more information.

" + "

© %1 The qpdfview developers

").arg("2012-2018"))); +} + +void MainWindow::on_focusCurrentPage_activated() +{ + m_currentPageSpinBox->setFocus(); + m_currentPageSpinBox->selectAll(); +} + +void MainWindow::on_focusScaleFactor_activated() +{ + m_scaleFactorComboBox->setFocus(); + m_scaleFactorComboBox->lineEdit()->selectAll(); +} + +void MainWindow::on_toggleToolBars_triggered(bool checked) +{ + if(checked) + { + m_tabWidget->setTabBarPolicy(static_cast< TabWidget::TabBarPolicy >(m_tabBarHadPolicy)); + + m_fileToolBar->setVisible(m_fileToolBarWasVisible); + m_editToolBar->setVisible(m_editToolBarWasVisible); + m_viewToolBar->setVisible(m_viewToolBarWasVisible); + } + else + { + m_tabBarHadPolicy = static_cast< int >(m_tabWidget->tabBarPolicy()); + + m_fileToolBarWasVisible = m_fileToolBar->isVisible(); + m_editToolBarWasVisible = m_editToolBar->isVisible(); + m_viewToolBarWasVisible = m_viewToolBar->isVisible(); + + m_tabWidget->setTabBarPolicy(TabWidget::TabBarAlwaysOff); + + m_fileToolBar->setVisible(false); + m_editToolBar->setVisible(false); + m_viewToolBar->setVisible(false); + } +} + +void MainWindow::on_toggleMenuBar_triggered(bool checked) +{ + menuBar()->setVisible(checked); +} + +void MainWindow::on_searchInitiated(const QString& text, bool modified) +{ + if(text.isEmpty()) + { + return; + } + + const bool forAllTabs = s_settings->mainWindow().extendedSearchDock() ? !modified : modified; + const bool matchCase = m_matchCaseCheckBox->isChecked(); + const bool wholeWords = m_wholeWordsCheckBox->isChecked(); + + if(forAllTabs) + { + foreach(DocumentView* tab, allTabs()) + { + tab->startSearch(text, matchCase, wholeWords); + } + } + else + { + DocumentView* const tab = currentTab(); + + if(tab->searchText() != text || tab->searchWasCanceled()) + { + tab->startSearch(text, matchCase, wholeWords); + } + else + { + tab->findNext(); + } + } +} + +void MainWindow::on_highlightAll_clicked(bool checked) +{ + currentTab()->setHighlightAll(checked); +} + +void MainWindow::on_dock_dockLocationChanged(Qt::DockWidgetArea area) +{ + QDockWidget* dock = qobject_cast< QDockWidget* >(sender()); + + if(dock == 0) + { + return; + } + + QDockWidget::DockWidgetFeatures features = dock->features(); + + if(area == Qt::TopDockWidgetArea || area == Qt::BottomDockWidgetArea) + { + features |= QDockWidget::DockWidgetVerticalTitleBar; + } + else + { + features &= ~QDockWidget::DockWidgetVerticalTitleBar; + } + + dock->setFeatures(features); +} + +void MainWindow::on_outline_sectionCountChanged() +{ + setSectionResizeMode(m_outlineView->header(), 0, QHeaderView::Stretch); + setSectionResizeMode(m_outlineView->header(), 1, QHeaderView::ResizeToContents); + + m_outlineView->header()->setMinimumSectionSize(0); + m_outlineView->header()->setStretchLastSection(false); + m_outlineView->header()->setVisible(false); +} + +void MainWindow::on_outline_clicked(const QModelIndex& index) +{ + bool ok = false; + const int page = index.data(Model::Document::PageRole).toInt(&ok); + + if(!ok) + { + return; + } + + const qreal left = index.data(Model::Document::LeftRole).toReal(); + const qreal top = index.data(Model::Document::TopRole).toReal(); + const QString fileName = index.data(Model::Document::FileNameRole).toString(); + + if(fileName.isEmpty()) + { + currentTab()->jumpToPage(page, true, left, top); + } + else + { + jumpToPageOrOpenInNewTab(currentTab()->resolveFileName(fileName), page, true); + } +} + +void MainWindow::on_properties_sectionCountChanged() +{ + setSectionResizeMode(m_propertiesView->horizontalHeader(), 0, QHeaderView::Stretch); + setSectionResizeMode(m_propertiesView->horizontalHeader(), 1, QHeaderView::Stretch); + + m_propertiesView->horizontalHeader()->setVisible(false); + + setSectionResizeMode(m_propertiesView->verticalHeader(), QHeaderView::ResizeToContents); + + m_propertiesView->verticalHeader()->setVisible(false); +} + +void MainWindow::on_thumbnails_dockLocationChanged(Qt::DockWidgetArea area) +{ + foreach(DocumentView* tab, allTabs()) + { + tab->setThumbnailsOrientation(area == Qt::TopDockWidgetArea || area == Qt::BottomDockWidgetArea ? Qt::Horizontal : Qt::Vertical); + } +} + +void MainWindow::on_thumbnails_verticalScrollBar_valueChanged(int value) +{ + Q_UNUSED(value); + + if(m_thumbnailsView->scene() != 0) + { + const QRectF visibleRect = m_thumbnailsView->mapToScene(m_thumbnailsView->viewport()->rect()).boundingRect(); + + foreach(ThumbnailItem* page, currentTab()->thumbnailItems()) + { + if(!page->boundingRect().translated(page->pos()).intersects(visibleRect)) + { + page->cancelRender(); + } + } + } +} + +void MainWindow::on_bookmarks_sectionCountChanged() +{ + setSectionResizeMode(m_bookmarksView->horizontalHeader(), 0, QHeaderView::Stretch); + setSectionResizeMode(m_bookmarksView->horizontalHeader(), 1, QHeaderView::ResizeToContents); + + m_bookmarksView->horizontalHeader()->setMinimumSectionSize(0); + m_bookmarksView->horizontalHeader()->setStretchLastSection(false); + m_bookmarksView->horizontalHeader()->setVisible(false); + + setSectionResizeMode(m_bookmarksView->verticalHeader(), QHeaderView::ResizeToContents); + + m_bookmarksView->verticalHeader()->setVisible(false); +} + +void MainWindow::on_bookmarks_clicked(const QModelIndex& index) +{ + bool ok = false; + const int page = index.data(BookmarkModel::PageRole).toInt(&ok); + + if(ok) + { + currentTab()->jumpToPage(page); + } +} + +void MainWindow::on_bookmarks_contextMenuRequested(QPoint pos) +{ + QMenu menu; + + menu.addActions(QList< QAction* >() << m_previousBookmarkAction << m_nextBookmarkAction); + menu.addSeparator(); + menu.addAction(m_addBookmarkAction); + + QAction* removeBookmarkAction = menu.addAction(tr("&Remove bookmark")); + QAction* editBookmarkAction = menu.addAction(tr("&Edit bookmark")); + + const QModelIndex index = m_bookmarksView->indexAt(pos); + + removeBookmarkAction->setVisible(index.isValid()); + editBookmarkAction->setVisible(index.isValid()); + + const QAction* action = menu.exec(m_bookmarksView->mapToGlobal(pos)); + + if(action == removeBookmarkAction) + { + BookmarkModel* model = qobject_cast< BookmarkModel* >(m_bookmarksView->model()); + + if(model != 0) + { + model->removeBookmark(BookmarkItem(index.data(BookmarkModel::PageRole).toInt())); + + if(model->isEmpty()) + { + m_bookmarksView->setModel(0); + + BookmarkModel::removePath(currentTab()->fileInfo().absoluteFilePath()); + } + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); + } + + } + else if(action == editBookmarkAction) + { + BookmarkModel* model = qobject_cast< BookmarkModel* >(m_bookmarksView->model()); + + if(model != 0) + { + BookmarkItem bookmark(index.data(BookmarkModel::PageRole).toInt()); + + model->findBookmark(bookmark); + + QScopedPointer< BookmarkDialog > dialog(new BookmarkDialog(bookmark, this)); + + if(dialog->exec() == QDialog::Accepted) + { + model->addBookmark(bookmark); + + m_bookmarksMenuIsDirty = true; + scheduleSaveBookmarks(); + } + } + } +} + +void MainWindow::on_search_sectionCountChanged() +{ + setSectionResizeMode(m_searchView->header(), 0, QHeaderView::Stretch); + setSectionResizeMode(m_searchView->header(), 1, QHeaderView::ResizeToContents); + + m_searchView->header()->setMinimumSectionSize(0); + m_searchView->header()->setStretchLastSection(false); + m_searchView->header()->setVisible(false); +} + +void MainWindow::on_search_dockLocationChanged(Qt::DockWidgetArea area) +{ + delete m_searchWidget->layout(); + QGridLayout* searchLayout = new QGridLayout(m_searchWidget); + + if(area == Qt::TopDockWidgetArea || area == Qt::BottomDockWidgetArea) + { + searchLayout->setRowStretch(2, 1); + searchLayout->setColumnStretch(3, 1); + + searchLayout->addWidget(m_searchLineEdit, 0, 0, 1, 7); + searchLayout->addWidget(m_matchCaseCheckBox, 1, 0); + searchLayout->addWidget(m_wholeWordsCheckBox, 1, 1); + searchLayout->addWidget(m_highlightAllCheckBox, 1, 2); + searchLayout->addWidget(m_findPreviousButton, 1, 4, Qt::AlignRight); + searchLayout->addWidget(m_findNextButton, 1, 5, Qt::AlignRight); + searchLayout->addWidget(m_cancelSearchButton, 1, 6, Qt::AlignRight); + + if(s_settings->mainWindow().extendedSearchDock()) + { + searchLayout->addWidget(m_searchView, 2, 0, 1, 7); + } + } + else + { + searchLayout->setRowStretch(4, 1); + searchLayout->setColumnStretch(1, 1); + + searchLayout->addWidget(m_searchLineEdit, 0, 0, 1, 5); + searchLayout->addWidget(m_matchCaseCheckBox, 1, 0); + searchLayout->addWidget(m_wholeWordsCheckBox, 2, 0); + searchLayout->addWidget(m_highlightAllCheckBox, 3, 0); + searchLayout->addWidget(m_findPreviousButton, 1, 2, 3, 1, Qt::AlignTop); + searchLayout->addWidget(m_findNextButton, 1, 3, 3, 1, Qt::AlignTop); + searchLayout->addWidget(m_cancelSearchButton, 1, 4, 3, 1, Qt::AlignTop); + + if(s_settings->mainWindow().extendedSearchDock()) + { + searchLayout->addWidget(m_searchView, 4, 0, 1, 5); + } + } +} + +void MainWindow::on_search_visibilityChanged(bool visible) +{ + if(!visible) + { + m_searchLineEdit->stopTimer(); + m_searchLineEdit->setProgress(0); + + foreach(DocumentView* tab, allTabs()) + { + tab->cancelSearch(); + tab->clearResults(); + } + + if(DocumentView* tab = currentTab()) + { + tab->setFocus(); + } + } +} + +void MainWindow::on_search_clicked(const QModelIndex& clickedIndex) +{ + DocumentView* const clickedTab = SearchModel::instance()->viewForIndex(clickedIndex); + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + foreach(DocumentView* tab, allTabs(index)) + { + if(tab == clickedTab) + { + m_tabWidget->setCurrentIndex(index); + tab->setFocus(); + + clickedTab->findResult(clickedIndex); + + return; + } + } + } +} + +void MainWindow::on_search_rowsInserted(const QModelIndex& parent, int first, int last) +{ + if(parent.isValid()) + { + return; + } + + for(int row = first; row <= last; ++row) + { + const QModelIndex index = s_searchModel->index(row, 0, parent); + + if(!m_searchView->isExpanded(index) && s_searchModel->viewForIndex(index) == currentTab()) + { + m_searchView->expand(index); + } + } +} + +void MainWindow::on_saveDatabase_timeout() +{ + if(s_settings->mainWindow().restoreTabs()) + { + s_database->saveTabs(allTabs()); + + s_settings->mainWindow().setCurrentTabIndex(m_tabWidget->currentIndex()); + } + + if(s_settings->mainWindow().restoreBookmarks()) + { + s_database->saveBookmarks(); + } + + if(s_settings->mainWindow().restorePerFileSettings()) + { + foreach(DocumentView* tab, allTabs()) + { + s_database->savePerFileSettings(tab); + } + } +} + +bool MainWindow::eventFilter(QObject* target, QEvent* event) +{ + // This event filter is used to override any keyboard shortcuts if the outline widget has the focus. + if(target == m_outlineView && event->type() == QEvent::ShortcutOverride) + { + QKeyEvent* keyEvent = static_cast< QKeyEvent* >(event); + + const bool modifiers = keyEvent->modifiers().testFlag(Qt::ControlModifier) || keyEvent->modifiers().testFlag(Qt::ShiftModifier); + const bool keys = keyEvent->key() == Qt::Key_Right || keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down; + + if(modifiers && keys) + { + keyEvent->accept(); + return true; + } + } + // This event filter is used to fit the thumbnails into the thumbnails view if this is enabled in the settings. + else if(target == m_thumbnailsView && (event->type() == QEvent::Resize || event->type() == QEvent::Show)) + { + if(DocumentView* tab = currentTab()) + { + tab->setThumbnailsViewportSize(m_thumbnailsView->viewport()->size()); + } + } + + return QMainWindow::eventFilter(target, event); +} + +void MainWindow::closeEvent(QCloseEvent* event) +{ + m_searchDock->setVisible(false); + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + foreach(DocumentView* tab, allTabs(index)) + { + if(!saveModifications(tab)) + { + m_tabWidget->setCurrentIndex(index); + tab->setFocus(); + + event->setAccepted(false); + return; + } + } + } + + if(s_settings->mainWindow().restoreTabs()) + { + s_database->saveTabs(allTabs()); + + s_settings->mainWindow().setCurrentTabIndex(m_tabWidget->currentIndex()); + } + else + { + s_database->clearTabs(); + } + + if(s_settings->mainWindow().restoreBookmarks()) + { + s_database->saveBookmarks(); + } + else + { + s_database->clearBookmarks(); + } + + s_settings->mainWindow().setRecentlyUsed(s_settings->mainWindow().trackRecentlyUsed() ? m_recentlyUsedMenu->filePaths() : QStringList()); + + s_settings->documentView().setMatchCase(m_matchCaseCheckBox->isChecked()); + s_settings->documentView().setWholeWords(m_wholeWordsCheckBox->isChecked()); + + s_settings->mainWindow().setGeometry(m_fullscreenAction->isChecked() ? m_fullscreenAction->data().toByteArray() : saveGeometry()); + s_settings->mainWindow().setState(saveState()); + + QMainWindow::closeEvent(event); +} + +void MainWindow::dragEnterEvent(QDragEnterEvent* event) +{ + if(event->mimeData()->hasUrls()) + { + event->acceptProposedAction(); + } +} + +void MainWindow::dropEvent(QDropEvent* event) +{ + if(event->mimeData()->hasUrls()) + { + event->acceptProposedAction(); + + CurrentTabChangeBlocker currentTabChangeBlocker(this); + + foreach(const QUrl& url, event->mimeData()->urls()) + { +#if QT_VERSION >= QT_VERSION_CHECK(4,8,0) + if(url.isLocalFile()) +#else + if(url.scheme() == "file") +#endif // QT_VERSION + { + openInNewTab(url.toLocalFile()); + } + } + } +} + +void MainWindow::prepareStyle() +{ + if(s_settings->mainWindow().hasIconTheme()) + { + QIcon::setThemeName(s_settings->mainWindow().iconTheme()); + } + + if(s_settings->mainWindow().hasStyleSheet()) + { + qApp->setStyleSheet(s_settings->mainWindow().styleSheet()); + } + + ProxyStyle* style = new ProxyStyle(); + + style->setScrollableMenus(s_settings->mainWindow().scrollableMenus()); + + qApp->setStyle(style); +} + +inline DocumentView* MainWindow::currentTab() const +{ + return findCurrentTab(m_tabWidget->currentWidget()); +} + +inline DocumentView* MainWindow::currentTab(int index) const +{ + return findCurrentTab(m_tabWidget->widget(index)); +} + +inline QVector< DocumentView* > MainWindow::allTabs(int index) const +{ + return findAllTabs(m_tabWidget->widget(index)); +} + +QVector< DocumentView* > MainWindow::allTabs() const +{ + QVector< DocumentView* > tabs; + + for(int index = 0, count = m_tabWidget->count(); index < count; ++index) + { + tabs += allTabs(index); + } + + return tabs; +} + +bool MainWindow::senderIsCurrentTab() const +{ + return sender() == currentTab() || qobject_cast< DocumentView* >(sender()) == 0; +} + +void MainWindow::addTab(DocumentView* tab) +{ + m_tabWidget->addTab(tab, s_settings->mainWindow().newTabNextToCurrentTab(), + tab->title(), tab->fileInfo().absoluteFilePath()); +} + +void MainWindow::addTabAction(DocumentView* tab) +{ + QAction* tabAction = new QAction(tab->title(), tab); + tabAction->setToolTip(tab->fileInfo().absoluteFilePath()); + tabAction->setData(true); // Flag action for search-as-you-type + + connect(tabAction, SIGNAL(triggered()), SLOT(on_tabAction_triggered())); + + m_tabsMenu->addAction(tabAction); +} + +void MainWindow::connectTab(DocumentView* tab) +{ + connect(tab, SIGNAL(documentChanged()), SLOT(on_currentTab_documentChanged())); + connect(tab, SIGNAL(documentModified()), SLOT(on_currentTab_documentModified())); + + connect(tab, SIGNAL(numberOfPagesChanged(int)), SLOT(on_currentTab_numberOfPagesChaned(int))); + connect(tab, SIGNAL(currentPageChanged(int)), SLOT(on_currentTab_currentPageChanged(int))); + + connect(tab, SIGNAL(canJumpChanged(bool,bool)), SLOT(on_currentTab_canJumpChanged(bool,bool))); + + connect(tab, SIGNAL(continuousModeChanged(bool)), SLOT(on_currentTab_continuousModeChanged(bool))); + connect(tab, SIGNAL(layoutModeChanged(LayoutMode)), SLOT(on_currentTab_layoutModeChanged(LayoutMode))); + connect(tab, SIGNAL(rightToLeftModeChanged(bool)), SLOT(on_currentTab_rightToLeftModeChanged(bool))); + connect(tab, SIGNAL(scaleModeChanged(ScaleMode)), SLOT(on_currentTab_scaleModeChanged(ScaleMode))); + connect(tab, SIGNAL(scaleFactorChanged(qreal)), SLOT(on_currentTab_scaleFactorChanged(qreal))); + connect(tab, SIGNAL(rotationChanged(Rotation)), SLOT(on_currentTab_rotationChanged(Rotation))); + + connect(tab, SIGNAL(linkClicked(int)), SLOT(on_currentTab_linkClicked(int))); + connect(tab, SIGNAL(linkClicked(bool,QString,int)), SLOT(on_currentTab_linkClicked(bool,QString,int))); + + connect(tab, SIGNAL(renderFlagsChanged(qpdfview::RenderFlags)), SLOT(on_currentTab_renderFlagsChanged(qpdfview::RenderFlags))); + + connect(tab, SIGNAL(invertColorsChanged(bool)), SLOT(on_currentTab_invertColorsChanged(bool))); + connect(tab, SIGNAL(convertToGrayscaleChanged(bool)), SLOT(on_currentTab_convertToGrayscaleChanged(bool))); + connect(tab, SIGNAL(trimMarginsChanged(bool)), SLOT(on_currentTab_trimMarginsChanged(bool))); + + connect(tab, SIGNAL(compositionModeChanged(CompositionMode)), SLOT(on_currentTab_compositionModeChanged(CompositionMode))); + + connect(tab, SIGNAL(highlightAllChanged(bool)), SLOT(on_currentTab_highlightAllChanged(bool))); + connect(tab, SIGNAL(rubberBandModeChanged(RubberBandMode)), SLOT(on_currentTab_rubberBandModeChanged(RubberBandMode))); + + connect(tab, SIGNAL(searchFinished()), SLOT(on_currentTab_searchFinished())); + connect(tab, SIGNAL(searchProgressChanged(int)), SLOT(on_currentTab_searchProgressChanged(int))); + + connect(tab, SIGNAL(customContextMenuRequested(QPoint)), SLOT(on_currentTab_customContextMenuRequested(QPoint))); +} + +void MainWindow::restorePerFileSettings(DocumentView* tab) +{ + s_database->restorePerFileSettings(tab); + + if(m_outlineView->model() == tab->outlineModel()) + { + m_outlineView->restoreExpansion(); + } +} + +bool MainWindow::saveModifications(DocumentView* tab) +{ + s_database->savePerFileSettings(tab); + scheduleSaveTabs(); + + if(tab->wasModified()) + { + const int button = QMessageBox::warning(this, tr("Warning"), tr("The document '%1' has been modified. Do you want to save your changes?").arg(tab->fileInfo().filePath()), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save); + + if(button == QMessageBox::Save) + { + if(tab->save(tab->fileInfo().filePath(), true)) + { + return true; + } + else + { + QMessageBox::warning(this, tr("Warning"), tr("Could not save as '%1'.").arg(tab->fileInfo().filePath())); + } + } + else if(button == QMessageBox::Discard) + { + return true; + } + + return false; + } + + return true; +} + +void MainWindow::closeTab(DocumentView* tab) +{ + const int tabIndex = m_tabWidget->indexOf(tab); + + if(s_settings->mainWindow().keepRecentlyClosed() && tabIndex != -1) + { + foreach(QAction* tabAction, m_tabsMenu->actions()) + { + if(tabAction->parent() == tab) + { + m_tabsMenu->removeAction(tabAction); + m_tabWidget->removeTab(tabIndex); + + tab->setParent(this); + tab->setVisible(false); + + tab->clearResults(); + + m_recentlyClosedMenu->addTabAction(tabAction); + + break; + } + } + } + else + { + Splitter* const splitter = qobject_cast< Splitter* >(tab->parentWidget()); + + delete tab; + + if(splitter != 0) + { + if(splitter->count() > 0) + { + splitter->widget(0)->setFocus(); + } + else + { + delete splitter; + } + } + + if(s_settings->mainWindow().exitAfterLastTab() && m_tabWidget->count() == 0) + { + close(); + } + } +} + +void MainWindow::setWindowTitleForCurrentTab() +{ + QString tabText; + QString instanceText; + + if(DocumentView* tab = currentTab()) + { + QString currentPage; + + if(s_settings->mainWindow().currentPageInWindowTitle()) + { + currentPage = QString(" (%1 / %2)").arg(tab->currentPage()).arg(tab->numberOfPages()); + } + + tabText = m_tabWidget->currentTabText() + currentPage + QLatin1String("[*] - "); + } + + const QString instanceName = qApp->objectName(); + + if(s_settings->mainWindow().instanceNameInWindowTitle() && !instanceName.isEmpty()) + { + instanceText = QLatin1String(" (") + instanceName + QLatin1String(")"); + } + + setWindowTitle(tabText + QLatin1String("qpdfview") + instanceText); +} + +void MainWindow::setCurrentPageSuffixForCurrentTab() +{ + QString suffix; + + if(DocumentView* tab = currentTab()) + { + const int currentPage = tab->currentPage(); + const int numberOfPages = tab->numberOfPages(); + + const QString& defaultPageLabel = tab->defaultPageLabelFromNumber(currentPage); + const QString& pageLabel = tab->pageLabelFromNumber(currentPage); + + const QString& lastDefaultPageLabel = tab->defaultPageLabelFromNumber(numberOfPages); + + if((s_settings->mainWindow().usePageLabel() || tab->hasFrontMatter()) && defaultPageLabel != pageLabel) + { + suffix = QString(" (%1 / %2)").arg(defaultPageLabel, lastDefaultPageLabel); + } + else + { + suffix = QString(" / %1").arg(lastDefaultPageLabel); + } + } + else + { + suffix = QLatin1String(" / 1"); + } + + m_currentPageSpinBox->setSuffix(suffix); +} + +BookmarkModel* MainWindow::bookmarkModelForCurrentTab(bool create) +{ + return BookmarkModel::fromPath(currentTab()->fileInfo().absoluteFilePath(), create); +} + +QAction* MainWindow::sourceLinkActionForCurrentTab(QObject* parent, QPoint pos) +{ + QAction* action = createTemporaryAction(parent, QString(), QLatin1String("openSourceLink")); + + if(const DocumentView::SourceLink sourceLink = currentTab()->sourceLink(pos)) + { + const QString fileName = QFileInfo(sourceLink.name).fileName(); + + action->setText(tr("Edit '%1' at %2,%3...").arg(fileName).arg(sourceLink.line).arg(sourceLink.column)); + action->setData(QVariant::fromValue(sourceLink)); + } + else + { + action->setVisible(false); + } + + return action; +} + +void MainWindow::prepareDatabase() +{ + if(s_database == 0) + { + s_database = Database::instance(); + } + + m_saveDatabaseTimer = new QTimer(this); + m_saveDatabaseTimer->setSingleShot(true); + + connect(m_saveDatabaseTimer, SIGNAL(timeout()), SLOT(on_saveDatabase_timeout())); +} + +void MainWindow::scheduleSaveDatabase() +{ + const int interval = s_settings->mainWindow().saveDatabaseInterval(); + + if(!m_saveDatabaseTimer->isActive() && interval >= 0) + { + m_saveDatabaseTimer->start(interval); + } +} + +void MainWindow::scheduleSaveTabs() +{ + if(s_settings->mainWindow().restoreTabs()) + { + scheduleSaveDatabase(); + } +} + +void MainWindow::scheduleSaveBookmarks() +{ + if(s_settings->mainWindow().restoreBookmarks()) + { + scheduleSaveDatabase(); + } +} + +void MainWindow::scheduleSavePerFileSettings() +{ + if(s_settings->mainWindow().restorePerFileSettings()) + { + scheduleSaveDatabase(); + } +} + +void MainWindow::createWidgets() +{ + m_tabWidget = new TabWidget(this); + + m_tabWidget->setDocumentMode(true); + m_tabWidget->setMovable(true); + m_tabWidget->setTabsClosable(true); + m_tabWidget->setElideMode(Qt::ElideRight); + + m_tabWidget->setTabPosition(static_cast< QTabWidget::TabPosition >(s_settings->mainWindow().tabPosition())); + m_tabWidget->setTabBarPolicy(static_cast< TabWidget::TabBarPolicy >(s_settings->mainWindow().tabVisibility())); + m_tabWidget->setSpreadTabs(s_settings->mainWindow().spreadTabs()); + + setCentralWidget(m_tabWidget); + + m_currentTabChangedBlocked = false; + + connect(m_tabWidget, SIGNAL(currentChanged(int)), SLOT(on_tabWidget_currentChanged())); + connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(on_tabWidget_tabCloseRequested(int))); + connect(m_tabWidget, SIGNAL(tabDragRequested(int)), SLOT(on_tabWidget_tabDragRequested(int))); + connect(m_tabWidget, SIGNAL(tabContextMenuRequested(QPoint,int)), SLOT(on_tabWidget_tabContextMenuRequested(QPoint,int))); + + // current page + + m_currentPageSpinBox = new MappingSpinBox(new TextValueMapper(this), this); + + m_currentPageSpinBox->setAlignment(Qt::AlignCenter); + m_currentPageSpinBox->setButtonSymbols(QAbstractSpinBox::NoButtons); + m_currentPageSpinBox->setKeyboardTracking(false); + + connect(m_currentPageSpinBox, SIGNAL(editingFinished()), SLOT(on_currentPage_editingFinished())); + connect(m_currentPageSpinBox, SIGNAL(returnPressed()), SLOT(on_currentPage_returnPressed())); + + m_currentPageAction = new QWidgetAction(this); + + m_currentPageAction->setObjectName(QLatin1String("currentPage")); + m_currentPageAction->setDefaultWidget(m_currentPageSpinBox); + + // scale factor + + m_scaleFactorComboBox = new ComboBox(this); + + m_scaleFactorComboBox->setEditable(true); + m_scaleFactorComboBox->setInsertPolicy(QComboBox::NoInsert); + + m_scaleFactorComboBox->addItem(tr("Page width")); + m_scaleFactorComboBox->addItem(tr("Page size")); + m_scaleFactorComboBox->addItem("50 %", 0.5); + m_scaleFactorComboBox->addItem("75 %", 0.75); + m_scaleFactorComboBox->addItem("100 %", 1.0); + m_scaleFactorComboBox->addItem("125 %", 1.25); + m_scaleFactorComboBox->addItem("150 %", 1.5); + m_scaleFactorComboBox->addItem("200 %", 2.0); + m_scaleFactorComboBox->addItem("300 %", 3.0); + m_scaleFactorComboBox->addItem("400 %", 4.0); + m_scaleFactorComboBox->addItem("500 %", 5.0); + + connect(m_scaleFactorComboBox, SIGNAL(activated(int)), SLOT(on_scaleFactor_activated(int))); + connect(m_scaleFactorComboBox->lineEdit(), SIGNAL(editingFinished()), SLOT(on_scaleFactor_editingFinished())); + connect(m_scaleFactorComboBox->lineEdit(), SIGNAL(returnPressed()), SLOT(on_scaleFactor_returnPressed())); + + m_scaleFactorAction = new QWidgetAction(this); + + m_scaleFactorAction->setObjectName(QLatin1String("scaleFactor")); + m_scaleFactorAction->setDefaultWidget(m_scaleFactorComboBox); + + // search + + m_searchLineEdit = new SearchLineEdit(this); + m_matchCaseCheckBox = new QCheckBox(tr("Match &case"), this); + m_wholeWordsCheckBox = new QCheckBox(tr("Whole &words"), this); + m_highlightAllCheckBox = new QCheckBox(tr("Highlight &all"), this); + + connect(m_searchLineEdit, SIGNAL(searchInitiated(QString,bool)), SLOT(on_searchInitiated(QString,bool))); + connect(m_matchCaseCheckBox, SIGNAL(clicked()), m_searchLineEdit, SLOT(startTimer())); + connect(m_wholeWordsCheckBox, SIGNAL(clicked()), m_searchLineEdit, SLOT(startTimer())); + connect(m_highlightAllCheckBox, SIGNAL(clicked(bool)), SLOT(on_highlightAll_clicked(bool))); + + m_matchCaseCheckBox->setChecked(s_settings->documentView().matchCase()); + m_wholeWordsCheckBox->setChecked(s_settings->documentView().wholeWords()); +} + +QAction* MainWindow::createAction(const QString& text, const QString& objectName, const QIcon& icon, const QList< QKeySequence >& shortcuts, const char* member, bool checkable, bool checked) +{ + QAction* action = new QAction(text, this); + + action->setObjectName(objectName); + action->setIcon(icon); + action->setShortcuts(shortcuts); + + if(!objectName.isEmpty()) + { + s_shortcutHandler->registerAction(action); + } + + if(checkable) + { + action->setCheckable(true); + action->setChecked(checked); + + connect(action, SIGNAL(triggered(bool)), member); + } + else + { + action->setIconVisibleInMenu(true); + + connect(action, SIGNAL(triggered()), member); + } + + addAction(action); + + return action; +} + +inline QAction* MainWindow::createAction(const QString& text, const QString& objectName, const QIcon& icon, const QKeySequence& shortcut, const char* member, bool checkable, bool checked) +{ + return createAction(text, objectName, icon, QList< QKeySequence >() << shortcut, member, checkable, checked); +} + +inline QAction* MainWindow::createAction(const QString& text, const QString& objectName, const QString& iconName, const QList< QKeySequence >& shortcuts, const char* member, bool checkable, bool checked) +{ + return createAction(text, objectName, loadIconWithFallback(iconName), shortcuts, member, checkable, checked); +} + +inline QAction* MainWindow::createAction(const QString& text, const QString& objectName, const QString& iconName, const QKeySequence& shortcut, const char* member, bool checkable, bool checked) +{ + return createAction(text, objectName, iconName, QList< QKeySequence >() << shortcut, member, checkable, checked); +} + +void MainWindow::createActions() +{ + // file + + m_openAction = createAction(tr("&Open..."), QLatin1String("open"), QLatin1String("document-open"), QKeySequence::Open, SLOT(on_open_triggered())); + m_openInNewTabAction = createAction(tr("Open in new &tab..."), QLatin1String("openInNewTab"), QLatin1String("tab-new"), QKeySequence::AddTab, SLOT(on_openInNewTab_triggered())); + m_refreshAction = createAction(tr("&Refresh"), QLatin1String("refresh"), QLatin1String("view-refresh"), QKeySequence::Refresh, SLOT(on_refresh_triggered())); + m_saveAction = createAction(tr("&Save"), QLatin1String("save"), QLatin1String("document-save"), QKeySequence::Save, SLOT(on_save_triggered())); + m_saveAsAction = createAction(tr("Save &as..."), QLatin1String("saveAs"), QLatin1String("document-save-as"), QKeySequence::SaveAs, SLOT(on_saveAs_triggered())); + m_saveCopyAction = createAction(tr("Save ©..."), QLatin1String("saveCopy"), QIcon(), QKeySequence(), SLOT(on_saveCopy_triggered())); + m_printAction = createAction(tr("&Print..."), QLatin1String("print"), QLatin1String("document-print"), QKeySequence::Print, SLOT(on_print_triggered())); + m_exitAction = createAction(tr("E&xit"), QLatin1String("exit"), QIcon::fromTheme("application-exit"), QKeySequence::Quit, SLOT(close())); + + // edit + + m_previousPageAction = createAction(tr("&Previous page"), QLatin1String("previousPage"), QLatin1String("go-previous"), QKeySequence(Qt::Key_Backspace), SLOT(on_previousPage_triggered())); + m_nextPageAction = createAction(tr("&Next page"), QLatin1String("nextPage"), QLatin1String("go-next"), QKeySequence(Qt::Key_Space), SLOT(on_nextPage_triggered())); + + const QList< QKeySequence > firstPageShortcuts = QList< QKeySequence >() + << QKeySequence(Qt::Key_Home) + << QKeySequence(Qt::KeypadModifier + Qt::Key_Home) + << QKeySequence(Qt::ControlModifier + Qt::Key_Home) + << QKeySequence(Qt::ControlModifier + Qt::KeypadModifier + Qt::Key_Home); + m_firstPageAction = createAction(tr("&First page"), QLatin1String("firstPage"), QLatin1String("go-first"), firstPageShortcuts, SLOT(on_firstPage_triggered())); + + const QList< QKeySequence > lastPageShortcuts = QList< QKeySequence >() + << QKeySequence(Qt::Key_End) + << QKeySequence(Qt::KeypadModifier + Qt::Key_End) + << QKeySequence(Qt::ControlModifier + Qt::Key_End) + << QKeySequence(Qt::ControlModifier + Qt::KeypadModifier + Qt::Key_End); + m_lastPageAction = createAction(tr("&Last page"), QLatin1String("lastPage"), QLatin1String("go-last"), lastPageShortcuts, SLOT(on_lastPage_triggered())); + + m_setFirstPageAction = createAction(tr("&Set first page..."), QLatin1String("setFirstPage"), QIcon(), QKeySequence(), SLOT(on_setFirstPage_triggered())); + + m_jumpToPageAction = createAction(tr("&Jump to page..."), QLatin1String("jumpToPage"), QLatin1String("go-jump"), QKeySequence(Qt::CTRL + Qt::Key_J), SLOT(on_jumpToPage_triggered())); + + m_jumpBackwardAction = createAction(tr("Jump &backward"), QLatin1String("jumpBackward"), QLatin1String("media-seek-backward"), QKeySequence(Qt::CTRL + Qt::Key_Return), SLOT(on_jumpBackward_triggered())); + m_jumpForwardAction = createAction(tr("Jump for&ward"), QLatin1String("jumpForward"), QLatin1String("media-seek-forward"), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Return), SLOT(on_jumpForward_triggered())); + + m_searchAction = createAction(tr("&Search..."), QLatin1String("search"), QLatin1String("edit-find"), QKeySequence::Find, SLOT(on_search_triggered())); + m_findPreviousAction = createAction(tr("Find previous"), QLatin1String("findPrevious"), QLatin1String("go-up"), QKeySequence::FindPrevious, SLOT(on_findPrevious_triggered())); + m_findNextAction = createAction(tr("Find next"), QLatin1String("findNext"), QLatin1String("go-down"), QKeySequence::FindNext, SLOT(on_findNext_triggered())); + m_cancelSearchAction = createAction(tr("Cancel search"), QLatin1String("cancelSearch"), QLatin1String("process-stop"), QKeySequence(Qt::Key_Escape), SLOT(on_cancelSearch_triggered())); + + m_copyToClipboardModeAction = createAction(tr("&Copy to clipboard"), QLatin1String("copyToClipboardMode"), QLatin1String("edit-copy"), QKeySequence(Qt::CTRL + Qt::Key_C), SLOT(on_copyToClipboardMode_triggered(bool)), true); + m_addAnnotationModeAction = createAction(tr("&Add annotation"), QLatin1String("addAnnotationMode"), QLatin1String("mail-attachment"), QKeySequence(Qt::CTRL + Qt::Key_A), SLOT(on_addAnnotationMode_triggered(bool)), true); + + m_settingsAction = createAction(tr("Settings..."), QString(), QIcon(), QKeySequence(), SLOT(on_settings_triggered())); + + // view + + m_continuousModeAction = createAction(tr("&Continuous"), QLatin1String("continuousMode"), QIcon(QLatin1String(":icons/continuous")), QKeySequence(Qt::CTRL + Qt::Key_7), SLOT(on_continuousMode_triggered(bool)), true); + m_twoPagesModeAction = createAction(tr("&Two pages"), QLatin1String("twoPagesMode"), QIcon(QLatin1String(":icons/two-pages")), QKeySequence(Qt::CTRL + Qt::Key_6), SLOT(on_twoPagesMode_triggered(bool)), true); + m_twoPagesWithCoverPageModeAction = createAction(tr("Two pages &with cover page"), QLatin1String("twoPagesWithCoverPageMode"), QIcon(QLatin1String(":icons/two-pages-with-cover-page")), QKeySequence(Qt::CTRL + Qt::Key_5), SLOT(on_twoPagesWithCoverPageMode_triggered(bool)), true); + m_multiplePagesModeAction = createAction(tr("&Multiple pages"), QLatin1String("multiplePagesMode"), QIcon(QLatin1String(":icons/multiple-pages")), QKeySequence(Qt::CTRL + Qt::Key_4), SLOT(on_multiplePagesMode_triggered(bool)), true); + + m_rightToLeftModeAction = createAction(tr("Right to left"), QLatin1String("rightToLeftMode"), QIcon(QLatin1String(":icons/right-to-left")), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_R), SLOT(on_rightToLeftMode_triggered(bool)), true); + + m_zoomInAction = createAction(tr("Zoom &in"), QLatin1String("zoomIn"), QLatin1String("zoom-in"), QKeySequence(Qt::CTRL + Qt::Key_Up), SLOT(on_zoomIn_triggered())); + m_zoomOutAction = createAction(tr("Zoom &out"), QLatin1String("zoomOut"), QLatin1String("zoom-out"), QKeySequence(Qt::CTRL + Qt::Key_Down), SLOT(on_zoomOut_triggered())); + m_originalSizeAction = createAction(tr("Original &size"), QLatin1String("originalSize"), QLatin1String("zoom-original"), QKeySequence(Qt::CTRL + Qt::Key_0), SLOT(on_originalSize_triggered())); + + m_fitToPageWidthModeAction = createAction(tr("Fit to page width"), QLatin1String("fitToPageWidthMode"), QIcon(QLatin1String(":icons/fit-to-page-width")), QKeySequence(Qt::CTRL + Qt::Key_9), SLOT(on_fitToPageWidthMode_triggered(bool)), true); + m_fitToPageSizeModeAction = createAction(tr("Fit to page size"), QLatin1String("fitToPageSizeMode"), QIcon(QLatin1String(":icons/fit-to-page-size")), QKeySequence(Qt::CTRL + Qt::Key_8), SLOT(on_fitToPageSizeMode_triggered(bool)), true); + + m_rotateLeftAction = createAction(tr("Rotate &left"), QLatin1String("rotateLeft"), QLatin1String("object-rotate-left"), QKeySequence(Qt::CTRL + Qt::Key_Left), SLOT(on_rotateLeft_triggered())); + m_rotateRightAction = createAction(tr("Rotate &right"), QLatin1String("rotateRight"), QLatin1String("object-rotate-right"), QKeySequence(Qt::CTRL + Qt::Key_Right), SLOT(on_rotateRight_triggered())); + + m_invertColorsAction = createAction(tr("Invert colors"), QLatin1String("invertColors"), QIcon(), QKeySequence(Qt::CTRL + Qt::Key_I), SLOT(on_invertColors_triggered(bool)), true); + m_convertToGrayscaleAction = createAction(tr("Convert to grayscale"), QLatin1String("convertToGrayscale"), QIcon(), QKeySequence(Qt::CTRL + Qt::Key_U), SLOT(on_convertToGrayscale_triggered(bool)), true); + m_trimMarginsAction = createAction(tr("Trim margins"), QLatin1String("trimMargins"), QIcon(), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_U), SLOT(on_trimMargins_triggered(bool)), true); + + m_darkenWithPaperColorAction = createAction(tr("Darken with paper color"), QLatin1String("darkenWithPaperColor"), QIcon(), QKeySequence(), SLOT(on_darkenWithPaperColor_triggered(bool)), true); + m_lightenWithPaperColorAction = createAction(tr("Lighten with paper color"), QLatin1String("lightenWithPaperColor"), QIcon(), QKeySequence(), SLOT(on_lightenWithPaperColor_triggered(bool)), true); + + m_fontsAction = createAction(tr("Fonts..."), QString(), QIcon(), QKeySequence(), SLOT(on_fonts_triggered())); + + m_fullscreenAction = createAction(tr("&Fullscreen"), QLatin1String("fullscreen"), QLatin1String("view-fullscreen"), QKeySequence(Qt::Key_F11), SLOT(on_fullscreen_triggered(bool)), true); + m_presentationAction = createAction(tr("&Presentation..."), QLatin1String("presentation"), QLatin1String("x-office-presentation"), QKeySequence(Qt::Key_F12), SLOT(on_presentation_triggered())); + + // tabs + + m_previousTabAction = createAction(tr("&Previous tab"), QLatin1String("previousTab"), QIcon(), QKeySequence::PreviousChild, SLOT(on_previousTab_triggered())); + m_nextTabAction = createAction(tr("&Next tab"), QLatin1String("nextTab"), QIcon(), QKeySequence::NextChild, SLOT(on_nextTab_triggered())); + + m_closeTabAction = createAction(tr("&Close tab"), QLatin1String("closeTab"), QIcon::fromTheme("window-close"), QKeySequence(Qt::CTRL + Qt::Key_W), SLOT(on_closeTab_triggered())); + m_closeAllTabsAction = createAction(tr("Close &all tabs"), QLatin1String("closeAllTabs"), QIcon(), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_W), SLOT(on_closeAllTabs_triggered())); + m_closeAllTabsButCurrentTabAction = createAction(tr("Close all tabs &but current tab"), QLatin1String("closeAllTabsButCurrent"), QIcon(), QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_W), SLOT(on_closeAllTabsButCurrentTab_triggered())); + + m_restoreMostRecentlyClosedTabAction = createAction(tr("Restore &most recently closed tab"), QLatin1String("restoreMostRecentlyClosedTab"), QIcon(), QKeySequence(Qt::ALT + Qt::SHIFT + Qt::Key_W), SLOT(on_restoreMostRecentlyClosedTab_triggered())); + + // tab shortcuts + + for(int index = 0; index < 9; ++index) + { + m_tabShortcuts[index] = new QShortcut(QKeySequence(Qt::ALT + Qt::Key_1 + index), this, SLOT(on_tabShortcut_activated())); + } + + // bookmarks + + m_previousBookmarkAction = createAction(tr("&Previous bookmark"), QLatin1String("previousBookmarkAction"), QIcon(), QKeySequence(Qt::CTRL + Qt::Key_PageUp), SLOT(on_previousBookmark_triggered())); + m_nextBookmarkAction = createAction(tr("&Next bookmark"), QLatin1String("nextBookmarkAction"), QIcon(), QKeySequence(Qt::CTRL + Qt::Key_PageDown), SLOT(on_nextBookmark_triggered())); + + m_addBookmarkAction = createAction(tr("&Add bookmark"), QLatin1String("addBookmark"), QIcon(), QKeySequence(Qt::CTRL + Qt::Key_B), SLOT(on_addBookmark_triggered())); + m_removeBookmarkAction = createAction(tr("&Remove bookmark"), QLatin1String("removeBookmark"), QIcon(), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_B), SLOT(on_removeBookmark_triggered())); + m_removeAllBookmarksAction = createAction(tr("Remove all bookmarks"), QLatin1String("removeAllBookmark"), QIcon(), QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_B), SLOT(on_removeAllBookmarks_triggered())); + + // help + + m_contentsAction = createAction(tr("&Contents"), QLatin1String("contents"), QIcon::fromTheme("help-contents"), QKeySequence::HelpContents, SLOT(on_contents_triggered())); + m_aboutAction = createAction(tr("&About"), QString(), QIcon::fromTheme("help-about"), QKeySequence(), SLOT(on_about_triggered())); + + // context + + m_openCopyInNewTabAction = createAction(tr("Open © in new tab"), QLatin1String("openCopyInNewTab"), QLatin1String("tab-new"), QKeySequence(), SLOT(on_openCopyInNewTab_triggered())); + m_openCopyInNewWindowAction = createAction(tr("Open copy in new &window"), QLatin1String("openCopyInNewWindow"), QLatin1String("window-new"), QKeySequence(), SLOT(on_openCopyInNewWindow_triggered())); + m_openContainingFolderAction = createAction(tr("Open containing &folder"), QLatin1String("openContainingFolder"), QLatin1String("folder"), QKeySequence(), SLOT(on_openContainingFolder_triggered())); + m_moveToInstanceAction = createAction(tr("Move to &instance..."), QLatin1String("moveToInstance"), QIcon(), QKeySequence(), SLOT(on_moveToInstance_triggered())); + m_splitViewHorizontallyAction = createAction(tr("Split view horizontally..."), QLatin1String("splitViewHorizontally"), QIcon(), QKeySequence(), SLOT(on_splitView_splitHorizontally_triggered())); + m_splitViewVerticallyAction = createAction(tr("Split view vertically..."), QLatin1String("splitViewVertically"), QIcon(), QKeySequence(), SLOT(on_splitView_splitVertically_triggered())); + m_closeCurrentViewAction = createAction(tr("Close current view"), QLatin1String("closeCurrentView"), QIcon(), QKeySequence(), SLOT(on_splitView_closeCurrent_triggered())); + + // tool bars and menu bar + + m_toggleToolBarsAction = createAction(tr("Toggle tool bars"), QLatin1String("toggleToolBars"), QIcon(), QKeySequence(Qt::SHIFT + Qt::ALT + Qt::Key_T), SLOT(on_toggleToolBars_triggered(bool)), true, true); + m_toggleMenuBarAction = createAction(tr("Toggle menu bar"), QLatin1String("toggleMenuBar"), QIcon(), QKeySequence(Qt::SHIFT + Qt::ALT + Qt::Key_M), SLOT(on_toggleMenuBar_triggered(bool)), true, true); + + // progress and error icons + + s_settings->pageItem().setProgressIcon(loadIconWithFallback(QLatin1String("image-loading"))); + s_settings->pageItem().setErrorIcon(loadIconWithFallback(QLatin1String("image-missing"))); +} + +QToolBar* MainWindow::createToolBar(const QString& text, const QString& objectName, const QStringList& actionNames, const QList< QAction* >& actions) +{ + QToolBar* toolBar = addToolBar(text); + toolBar->setObjectName(objectName); + + addWidgetActions(toolBar, actionNames, actions); + + toolBar->toggleViewAction()->setObjectName(objectName + QLatin1String("ToggleView")); + s_shortcutHandler->registerAction(toolBar->toggleViewAction()); + + return toolBar; +} + +void MainWindow::createToolBars() +{ + m_fileToolBar = createToolBar(tr("&File"), QLatin1String("fileToolBar"), s_settings->mainWindow().fileToolBar(), + QList< QAction* >() << m_openAction << m_openInNewTabAction << m_openContainingFolderAction << m_refreshAction << m_saveAction << m_saveAsAction << m_printAction); + + m_editToolBar = createToolBar(tr("&Edit"), QLatin1String("editToolBar"), s_settings->mainWindow().editToolBar(), + QList< QAction* >() << m_currentPageAction << m_previousPageAction << m_nextPageAction << m_firstPageAction << m_lastPageAction << m_jumpToPageAction << m_searchAction << m_jumpBackwardAction << m_jumpForwardAction << m_copyToClipboardModeAction << m_addAnnotationModeAction); + + m_viewToolBar = createToolBar(tr("&View"), QLatin1String("viewToolBar"), s_settings->mainWindow().viewToolBar(), + QList< QAction* >() << m_scaleFactorAction << m_continuousModeAction << m_twoPagesModeAction << m_twoPagesWithCoverPageModeAction << m_multiplePagesModeAction << m_rightToLeftModeAction << m_zoomInAction << m_zoomOutAction << m_originalSizeAction << m_fitToPageWidthModeAction << m_fitToPageSizeModeAction << m_rotateLeftAction << m_rotateRightAction << m_fullscreenAction << m_presentationAction); + + m_focusCurrentPageShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_K), this, SLOT(on_focusCurrentPage_activated())); + m_focusScaleFactorShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_L), this, SLOT(on_focusScaleFactor_activated())); +} + +QDockWidget* MainWindow::createDock(const QString& text, const QString& objectName, const QKeySequence& toggleViewShortcut) +{ + QDockWidget* dock = new QDockWidget(text, this); + dock->setObjectName(objectName); + dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable); + +#ifdef Q_OS_WIN + + dock->setWindowTitle(dock->windowTitle().remove(QLatin1Char('&'))); + +#endif // Q_OS_WIN + + addDockWidget(Qt::LeftDockWidgetArea, dock); + + connect(dock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), SLOT(on_dock_dockLocationChanged(Qt::DockWidgetArea))); + + dock->toggleViewAction()->setObjectName(objectName + QLatin1String("ToggleView")); + dock->toggleViewAction()->setShortcut(toggleViewShortcut); + + s_shortcutHandler->registerAction(dock->toggleViewAction()); + + dock->hide(); + + return dock; +} + +void MainWindow::createSearchDock() +{ + m_searchDock = new QDockWidget(tr("&Search"), this); + m_searchDock->setObjectName(QLatin1String("searchDock")); + m_searchDock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetVerticalTitleBar); + +#ifdef Q_OS_WIN + + m_searchDock->setWindowTitle(m_searchDock->windowTitle().remove(QLatin1Char('&'))); + +#endif // Q_OS_WIN + + addDockWidget(Qt::BottomDockWidgetArea, m_searchDock); + + connect(m_searchDock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), SLOT(on_dock_dockLocationChanged(Qt::DockWidgetArea))); + connect(m_searchDock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), SLOT(on_search_dockLocationChanged(Qt::DockWidgetArea))); + connect(m_searchDock, SIGNAL(visibilityChanged(bool)), SLOT(on_search_visibilityChanged(bool))); + + m_searchWidget = new QWidget(this); + m_searchDock->setWidget(m_searchWidget); + + m_findPreviousButton = new QToolButton(m_searchWidget); + m_findPreviousButton->setAutoRaise(true); + m_findPreviousButton->setDefaultAction(m_findPreviousAction); + + m_findNextButton = new QToolButton(m_searchWidget); + m_findNextButton->setAutoRaise(true); + m_findNextButton->setDefaultAction(m_findNextAction); + + m_cancelSearchButton = new QToolButton(m_searchWidget); + m_cancelSearchButton->setAutoRaise(true); + m_cancelSearchButton->setDefaultAction(m_cancelSearchAction); + + connect(m_searchDock, SIGNAL(visibilityChanged(bool)), m_findPreviousAction, SLOT(setEnabled(bool))); + connect(m_searchDock, SIGNAL(visibilityChanged(bool)), m_findNextAction, SLOT(setEnabled(bool))); + connect(m_searchDock, SIGNAL(visibilityChanged(bool)), m_cancelSearchAction, SLOT(setEnabled(bool))); + + m_searchDock->setVisible(false); + + m_findPreviousAction->setEnabled(false); + m_findNextAction->setEnabled(false); + m_cancelSearchAction->setEnabled(false); + + if(s_settings->mainWindow().extendedSearchDock()) + { + m_searchDock->setFeatures(m_searchDock->features() | QDockWidget::DockWidgetClosable); + + m_searchDock->toggleViewAction()->setObjectName(QLatin1String("searchDockToggleView")); + m_searchDock->toggleViewAction()->setShortcut(QKeySequence(Qt::Key_F10)); + + s_shortcutHandler->registerAction(m_searchDock->toggleViewAction()); + + m_searchView = new QTreeView(m_searchWidget); + m_searchView->setAlternatingRowColors(true); + m_searchView->setUniformRowHeights(true); + m_searchView->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_searchView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + m_searchView->setSelectionMode(QAbstractItemView::SingleSelection); + m_searchView->setSelectionBehavior(QAbstractItemView::SelectRows); + m_searchView->setItemDelegate(new SearchItemDelegate(m_searchView)); + + connect(m_searchView->header(), SIGNAL(sectionCountChanged(int,int)), SLOT(on_search_sectionCountChanged())); + connect(m_searchView, SIGNAL(clicked(QModelIndex)), SLOT(on_search_clicked(QModelIndex))); + connect(m_searchView, SIGNAL(activated(QModelIndex)), SLOT(on_search_clicked(QModelIndex))); + + m_searchView->setModel(s_searchModel); + + connect(s_searchModel, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(on_search_rowsInserted(QModelIndex,int,int))); + } + else + { + m_searchView = 0; + } + + on_search_dockLocationChanged(Qt::BottomDockWidgetArea); +} + +void MainWindow::createDocks() +{ + // outline + + m_outlineDock = createDock(tr("&Outline"), QLatin1String("outlineDock"), QKeySequence(Qt::Key_F6)); + + m_outlineView = new TreeView(Model::Document::ExpansionRole, this); + m_outlineView->setAlternatingRowColors(true); + m_outlineView->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_outlineView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + m_outlineView->setSelectionMode(QAbstractItemView::SingleSelection); + m_outlineView->setSelectionBehavior(QAbstractItemView::SelectRows); + + m_outlineView->installEventFilter(this); + + connect(m_outlineView->header(), SIGNAL(sectionCountChanged(int,int)), SLOT(on_outline_sectionCountChanged())); + connect(m_outlineView, SIGNAL(clicked(QModelIndex)), SLOT(on_outline_clicked(QModelIndex))); + connect(m_outlineView, SIGNAL(activated(QModelIndex)), SLOT(on_outline_clicked(QModelIndex))); + + m_outlineDock->setWidget(m_outlineView); + + // properties + + m_propertiesDock = createDock(tr("&Properties"), QLatin1String("propertiesDock"), QKeySequence(Qt::Key_F7)); + + m_propertiesView = new QTableView(this); + m_propertiesView->setAlternatingRowColors(true); + m_propertiesView->setTabKeyNavigation(false); + m_propertiesView->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_propertiesView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + + connect(m_propertiesView->horizontalHeader(), SIGNAL(sectionCountChanged(int,int)), SLOT(on_properties_sectionCountChanged())); + + m_propertiesDock->setWidget(m_propertiesView); + + // thumbnails + + m_thumbnailsDock = createDock(tr("Thumb&nails"), QLatin1String("thumbnailsDock"), QKeySequence(Qt::Key_F8)); + + connect(m_thumbnailsDock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), SLOT(on_thumbnails_dockLocationChanged(Qt::DockWidgetArea))); + + m_thumbnailsView = new QGraphicsView(this); + + m_thumbnailsView->installEventFilter(this); + + connect(m_thumbnailsView->verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(on_thumbnails_verticalScrollBar_valueChanged(int))); + + m_thumbnailsDock->setWidget(m_thumbnailsView); + + // bookmarks + + m_bookmarksDock = createDock(tr("Book&marks"), QLatin1String("bookmarksDock"), QKeySequence(Qt::Key_F9)); + + m_bookmarksView = new QTableView(this); + m_bookmarksView->setShowGrid(false); + m_bookmarksView->setAlternatingRowColors(true); + m_bookmarksView->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_bookmarksView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + m_bookmarksView->setSelectionMode(QAbstractItemView::SingleSelection); + m_bookmarksView->setSelectionBehavior(QAbstractItemView::SelectRows); + m_bookmarksView->setContextMenuPolicy(Qt::CustomContextMenu); + + connect(m_bookmarksView->horizontalHeader(), SIGNAL(sectionCountChanged(int,int)), SLOT(on_bookmarks_sectionCountChanged())); + connect(m_bookmarksView, SIGNAL(clicked(QModelIndex)), SLOT(on_bookmarks_clicked(QModelIndex))); + connect(m_bookmarksView, SIGNAL(activated(QModelIndex)), SLOT(on_bookmarks_clicked(QModelIndex))); + connect(m_bookmarksView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(on_bookmarks_contextMenuRequested(QPoint))); + + m_bookmarksDock->setWidget(m_bookmarksView); + + // search + + createSearchDock(); +} + +void MainWindow::createMenus() +{ + // file + + m_fileMenu = menuBar()->addMenu(tr("&File")); + m_fileMenu->addActions(QList< QAction* >() << m_openAction << m_openInNewTabAction); + + m_recentlyUsedMenu = new RecentlyUsedMenu(s_settings->mainWindow().recentlyUsed(), s_settings->mainWindow().recentlyUsedCount(), this); + + connect(m_recentlyUsedMenu, SIGNAL(openTriggered(QString)), SLOT(on_recentlyUsed_openTriggered(QString))); + + if(s_settings->mainWindow().trackRecentlyUsed()) + { + m_fileMenu->addMenu(m_recentlyUsedMenu); + + setToolButtonMenu(m_fileToolBar, m_openAction, m_recentlyUsedMenu); + setToolButtonMenu(m_fileToolBar, m_openInNewTabAction, m_recentlyUsedMenu); + } + + m_fileMenu->addActions(QList< QAction* >() << m_refreshAction << m_saveAction << m_saveAsAction << m_saveCopyAction << m_printAction); + m_fileMenu->addSeparator(); + m_fileMenu->addAction(m_exitAction); + + // edit + + m_editMenu = menuBar()->addMenu(tr("&Edit")); + m_editMenu->addActions(QList< QAction* >() << m_previousPageAction << m_nextPageAction << m_firstPageAction << m_lastPageAction << m_jumpToPageAction); + m_editMenu->addSeparator(); + m_editMenu->addActions(QList< QAction* >() << m_jumpBackwardAction << m_jumpForwardAction); + m_editMenu->addSeparator(); + m_editMenu->addActions(QList< QAction* >() << m_searchAction << m_findPreviousAction << m_findNextAction << m_cancelSearchAction); + m_editMenu->addSeparator(); + m_editMenu->addActions(QList< QAction* >() << m_copyToClipboardModeAction << m_addAnnotationModeAction); + m_editMenu->addSeparator(); + m_editMenu->addAction(m_settingsAction); + + // view + + m_viewMenu = menuBar()->addMenu(tr("&View")); + m_viewMenu->addActions(QList< QAction* >() << m_continuousModeAction << m_twoPagesModeAction << m_twoPagesWithCoverPageModeAction << m_multiplePagesModeAction); + m_viewMenu->addSeparator(); + m_viewMenu->addAction(m_rightToLeftModeAction); + m_viewMenu->addSeparator(); + m_viewMenu->addActions(QList< QAction* >() << m_zoomInAction << m_zoomOutAction << m_originalSizeAction << m_fitToPageWidthModeAction << m_fitToPageSizeModeAction); + m_viewMenu->addSeparator(); + m_viewMenu->addActions(QList< QAction* >() << m_rotateLeftAction << m_rotateRightAction); + m_viewMenu->addSeparator(); + m_viewMenu->addActions(QList< QAction* >() << m_invertColorsAction << m_convertToGrayscaleAction << m_trimMarginsAction); + + m_compositionModeMenu = m_viewMenu->addMenu(tr("Composition")); + m_compositionModeMenu->addAction(m_darkenWithPaperColorAction); + m_compositionModeMenu->addAction(m_lightenWithPaperColorAction); + + m_viewMenu->addSeparator(); + + QMenu* toolBarsMenu = m_viewMenu->addMenu(tr("&Tool bars")); + toolBarsMenu->addActions(QList< QAction* >() << m_fileToolBar->toggleViewAction() << m_editToolBar->toggleViewAction() << m_viewToolBar->toggleViewAction()); + + QMenu* docksMenu = m_viewMenu->addMenu(tr("&Docks")); + docksMenu->addActions(QList< QAction* >() << m_outlineDock->toggleViewAction() << m_propertiesDock->toggleViewAction() << m_thumbnailsDock->toggleViewAction() << m_bookmarksDock->toggleViewAction()); + + if(s_settings->mainWindow().extendedSearchDock()) + { + docksMenu->addAction(m_searchDock->toggleViewAction()); + } + + m_viewMenu->addAction(m_fontsAction); + m_viewMenu->addSeparator(); + m_viewMenu->addActions(QList< QAction* >() << m_fullscreenAction << m_presentationAction); + + // tabs + + m_tabsMenu = new SearchableMenu(tr("&Tabs"), this); + menuBar()->addMenu(m_tabsMenu); + + m_tabsMenu->setSearchable(s_settings->mainWindow().searchableMenus()); + + m_tabsMenu->addActions(QList< QAction* >() << m_previousTabAction << m_nextTabAction); + m_tabsMenu->addSeparator(); + m_tabsMenu->addActions(QList< QAction* >() << m_closeTabAction << m_closeAllTabsAction << m_closeAllTabsButCurrentTabAction); + + m_recentlyClosedMenu = new RecentlyClosedMenu(s_settings->mainWindow().recentlyClosedCount(), this); + + connect(m_recentlyClosedMenu, SIGNAL(tabActionTriggered(QAction*)), SLOT(on_recentlyClosed_tabActionTriggered(QAction*))); + + if(s_settings->mainWindow().keepRecentlyClosed()) + { + m_tabsMenu->addMenu(m_recentlyClosedMenu); + m_tabsMenu->addAction(m_restoreMostRecentlyClosedTabAction); + } + + m_tabsMenu->addSeparator(); + + // bookmarks + + m_bookmarksMenu = new SearchableMenu(tr("&Bookmarks"), this); + menuBar()->addMenu(m_bookmarksMenu); + + m_bookmarksMenu->setSearchable(s_settings->mainWindow().searchableMenus()); + + connect(m_bookmarksMenu, SIGNAL(aboutToShow()), this, SLOT(on_bookmarksMenu_aboutToShow())); + + m_bookmarksMenuIsDirty = true; + + // help + + m_helpMenu = menuBar()->addMenu(tr("&Help")); + m_helpMenu->addActions(QList< QAction* >() << m_contentsAction << m_aboutAction); +} + +#ifdef WITH_DBUS + +MainWindowAdaptor::MainWindowAdaptor(MainWindow* mainWindow) : QDBusAbstractAdaptor(mainWindow) +{ +} + +QDBusInterface* MainWindowAdaptor::createInterface(const QString& instanceName) +{ + return new QDBusInterface(serviceName(instanceName), QLatin1String("/MainWindow"), QLatin1String("local.qpdfview.MainWindow"), QDBusConnection::sessionBus()); +} + +MainWindowAdaptor* MainWindowAdaptor::createAdaptor(MainWindow* mainWindow) +{ + QScopedPointer< MainWindowAdaptor > adaptor(new MainWindowAdaptor(mainWindow)); + + if(!QDBusConnection::sessionBus().registerService(serviceName())) + { + return 0; + } + + if(!QDBusConnection::sessionBus().registerObject(QLatin1String("/MainWindow"), mainWindow)) + { + return 0; + } + + return adaptor.take(); +} + +void MainWindowAdaptor::raiseAndActivate() +{ + mainWindow()->raise(); + mainWindow()->activateWindow(); +} + +bool MainWindowAdaptor::open(const QString& absoluteFilePath, int page, const QRectF& highlight, bool quiet) +{ + return mainWindow()->open(absoluteFilePath, page, highlight, quiet); +} + +bool MainWindowAdaptor::openInNewTab(const QString& absoluteFilePath, int page, const QRectF& highlight, bool quiet) +{ + return mainWindow()->openInNewTab(absoluteFilePath, page, highlight, quiet); +} + +bool MainWindowAdaptor::jumpToPageOrOpenInNewTab(const QString& absoluteFilePath, int page, bool refreshBeforeJump, const QRectF& highlight, bool quiet) +{ + return mainWindow()->jumpToPageOrOpenInNewTab(absoluteFilePath, page, refreshBeforeJump, highlight, quiet); +} + +void MainWindowAdaptor::startSearch(const QString& text) +{ + mainWindow()->startSearch(text); +} + +void MainWindowAdaptor::saveDatabase() +{ + mainWindow()->saveDatabase(); +} + +int MainWindowAdaptor::currentPage() const +{ + if(DocumentView* tab = mainWindow()->currentTab()) + { + return tab->currentPage(); + } + else + { + return -1; + } +} + +void MainWindowAdaptor::jumpToPage(int page) +{ + if(DocumentView* tab = mainWindow()->currentTab()) + { + tab->jumpToPage(page); + } +} + +#define ONLY_IF_CURRENT_TAB if(mainWindow()->m_tabWidget->currentIndex() == -1) { return; } + +void MainWindowAdaptor::previousPage() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_previousPage_triggered(); +} + +void MainWindowAdaptor::nextPage() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_nextPage_triggered(); +} + +void MainWindowAdaptor::firstPage() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_firstPage_triggered(); +} + +void MainWindowAdaptor::lastPage() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_lastPage_triggered(); +} + +void MainWindowAdaptor::previousBookmark() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_previousBookmark_triggered(); +} + +void MainWindowAdaptor::nextBookmark() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_nextBookmark_triggered(); +} + +bool MainWindowAdaptor::jumpToBookmark(const QString& label) +{ + if(mainWindow()->m_tabWidget->currentIndex() == -1) { return false; } + + const BookmarkModel* model = mainWindow()->bookmarkModelForCurrentTab(); + + if(model != 0) + { + for(int row = 0, rowCount = model->rowCount(); row < rowCount; ++row) + { + const QModelIndex index = model->index(row); + + if(label == index.data(BookmarkModel::LabelRole).toString()) + { + mainWindow()->currentTab()->jumpToPage(index.data(BookmarkModel::PageRole).toInt()); + + return true; + } + } + } + + return false; +} + +void MainWindowAdaptor::continuousMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_continuousMode_triggered(checked); +} + +void MainWindowAdaptor::twoPagesMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_twoPagesMode_triggered(checked); +} + +void MainWindowAdaptor::twoPagesWithCoverPageMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_twoPagesWithCoverPageMode_triggered(checked); +} + +void MainWindowAdaptor::multiplePagesMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_multiplePagesMode_triggered(checked); +} + +void MainWindowAdaptor::fitToPageWidthMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_fitToPageWidthMode_triggered(checked); +} + +void MainWindowAdaptor::fitToPageSizeMode(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_fitToPageSizeMode_triggered(checked); +} + +void MainWindowAdaptor::invertColors(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_invertColors_triggered(checked); +} + +void MainWindowAdaptor::convertToGrayscale(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_convertToGrayscale_triggered(checked); +} + +void MainWindowAdaptor::trimMargins(bool checked) +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_trimMargins_triggered(checked); +} + +void MainWindowAdaptor::fullscreen(bool checked) +{ + if(mainWindow()->m_fullscreenAction->isChecked() != checked) + { + mainWindow()->m_fullscreenAction->trigger(); + } +} + +void MainWindowAdaptor::presentation() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_presentation_triggered(); +} + +void MainWindowAdaptor::closeTab() +{ + ONLY_IF_CURRENT_TAB + + mainWindow()->on_closeTab_triggered(); +} + +void MainWindowAdaptor::closeAllTabs() +{ + mainWindow()->on_closeAllTabs_triggered(); +} + +void MainWindowAdaptor::closeAllTabsButCurrentTab() +{ + mainWindow()->on_closeAllTabsButCurrentTab_triggered(); +} + +bool MainWindowAdaptor::closeTab(const QString& absoluteFilePath) +{ + if(mainWindow()->m_tabWidget->currentIndex() == -1) { return false; } + + const QFileInfo fileInfo(absoluteFilePath); + + foreach(DocumentView* tab, mainWindow()->allTabs()) + { + if(tab->fileInfo() == fileInfo) + { + if(mainWindow()->saveModifications(tab)) + { + mainWindow()->closeTab(tab); + } + + return true; + } + } + + return false; +} + +#undef ONLY_IF_CURRENT_TAB + +inline MainWindow* MainWindowAdaptor::mainWindow() const +{ + return qobject_cast< MainWindow* >(parent()); +} + +QString MainWindowAdaptor::serviceName(QString instanceName) +{ + QString serviceName = QApplication::organizationDomain(); + + if(instanceName.isNull()) + { + instanceName = qApp->objectName(); + } + + if(!instanceName.isEmpty()) + { + serviceName.append('.'); + serviceName.append(instanceName); + } + + return serviceName; +} + +# endif // WITH_DBUS + +} // qpdfview diff --git a/sources/mainwindow.h b/sources/mainwindow.h new file mode 100644 index 0000000..57549cc --- /dev/null +++ b/sources/mainwindow.h @@ -0,0 +1,587 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2018 Adam Reichold +Copyright 2018 Pavel Sanda +Copyright 2012 Michał Trybus +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +#include + +#ifdef WITH_DBUS + +#include + +class QDBusInterface; + +#endif // WITH_DBUS + +class QCheckBox; +class QDateTime; +class QGraphicsView; +class QFileInfo; +class QModelIndex; +class QShortcut; +class QTableView; +class QToolButton; +class QTreeView; +class QWidgetAction; + +#include "renderparam.h" + +namespace qpdfview +{ + +class Settings; +class DocumentView; +class TabWidget; +class TreeView; +class ComboBox; +class MappingSpinBox; +class SearchLineEdit; +class SearchableMenu; +class RecentlyUsedMenu; +class RecentlyClosedMenu; +class BookmarkModel; +class Database; +class ShortcutHandler; +class SearchModel; +class HelpDialog; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + + friend class MainWindowAdaptor; + +public: + explicit MainWindow(QWidget* parent = 0); + + QSize sizeHint() const; + QMenu* createPopupMenu(); + +public slots: + void show(); + + bool open(const QString& filePath, int page = -1, const QRectF& highlight = QRectF(), bool quiet = false); + bool openInNewTab(const QString& filePath, int page = -1, const QRectF& highlight = QRectF(), bool quiet = false); + + bool jumpToPageOrOpenInNewTab(const QString& filePath, int page = -1, bool refreshBeforeJump = false, const QRectF& highlight = QRectF(), bool quiet = false); + + void startSearch(const QString& text); + + void saveDatabase(); + +protected slots: + void on_tabWidget_currentChanged(); + void on_tabWidget_tabCloseRequested(int index); + void on_tabWidget_tabDragRequested(int index); + void on_tabWidget_tabContextMenuRequested(QPoint globalPos, int index); + + void on_currentTab_documentChanged(); + void on_currentTab_documentModified(); + + void on_currentTab_numberOfPagesChaned(int numberOfPages); + void on_currentTab_currentPageChanged(int currentPage); + + void on_currentTab_canJumpChanged(bool backward, bool forward); + + void on_currentTab_continuousModeChanged(bool continuousMode); + void on_currentTab_layoutModeChanged(LayoutMode layoutMode); + void on_currentTab_rightToLeftModeChanged(bool rightToLeftMode); + void on_currentTab_scaleModeChanged(ScaleMode scaleMode); + void on_currentTab_scaleFactorChanged(qreal scaleFactor); + void on_currentTab_rotationChanged(Rotation rotation); + + void on_currentTab_linkClicked(int page); + void on_currentTab_linkClicked(bool newTab, const QString& filePath, int page); + + void on_currentTab_renderFlagsChanged(qpdfview::RenderFlags renderFlags); + + void on_currentTab_invertColorsChanged(bool invertColors); + void on_currentTab_convertToGrayscaleChanged(bool convertToGrayscale); + void on_currentTab_trimMarginsChanged(bool trimMargins); + + void on_currentTab_compositionModeChanged(CompositionMode compositionMode); + + void on_currentTab_highlightAllChanged(bool highlightAll); + void on_currentTab_rubberBandModeChanged(RubberBandMode rubberBandMode); + + void on_currentTab_searchFinished(); + void on_currentTab_searchProgressChanged(int progress); + + void on_currentTab_customContextMenuRequested(QPoint pos); + + void on_splitView_splitHorizontally_triggered(); + void on_splitView_splitVertically_triggered(); + void on_splitView_split_triggered(Qt::Orientation orientation, int index); + void on_splitView_closeCurrent_triggered(); + void on_splitView_closeCurrent_triggered(int index); + void on_splitView_currentWidgetChanged(QWidget* currentWidget); + + void on_currentPage_editingFinished(); + void on_currentPage_returnPressed(); + + void on_scaleFactor_activated(int index); + void on_scaleFactor_editingFinished(); + void on_scaleFactor_returnPressed(); + + void on_open_triggered(); + void on_openInNewTab_triggered(); + void on_openCopyInNewTab_triggered(); + void on_openCopyInNewTab_triggered(const DocumentView* tab); + void on_openCopyInNewWindow_triggered(); + void on_openCopyInNewWindow_triggered(const DocumentView* tab); + void on_openContainingFolder_triggered(); + void on_openContainingFolder_triggered(const DocumentView* tab); + void on_moveToInstance_triggered(); + void on_moveToInstance_triggered(DocumentView* tab); + void on_refresh_triggered(); + void on_save_triggered(); + void on_saveAs_triggered(); + void on_saveCopy_triggered(); + void on_print_triggered(); + + void on_recentlyUsed_openTriggered(const QString& filePath); + + void on_previousPage_triggered(); + void on_nextPage_triggered(); + void on_firstPage_triggered(); + void on_lastPage_triggered(); + + void on_setFirstPage_triggered(); + + void on_jumpToPage_triggered(); + + void on_jumpBackward_triggered(); + void on_jumpForward_triggered(); + + void on_search_triggered(); + void on_findPrevious_triggered(); + void on_findNext_triggered(); + void on_cancelSearch_triggered(); + + void on_copyToClipboardMode_triggered(bool checked); + void on_addAnnotationMode_triggered(bool checked); + + void on_settings_triggered(); + + void on_continuousMode_triggered(bool checked); + void on_twoPagesMode_triggered(bool checked); + void on_twoPagesWithCoverPageMode_triggered(bool checked); + void on_multiplePagesMode_triggered(bool checked); + + void on_rightToLeftMode_triggered(bool checked); + + void on_zoomIn_triggered(); + void on_zoomOut_triggered(); + void on_originalSize_triggered(); + + void on_fitToPageWidthMode_triggered(bool checked); + void on_fitToPageSizeMode_triggered(bool checked); + + void on_rotateLeft_triggered(); + void on_rotateRight_triggered(); + + void on_invertColors_triggered(bool checked); + void on_convertToGrayscale_triggered(bool checked); + void on_trimMargins_triggered(bool checked); + void on_darkenWithPaperColor_triggered(bool checked); + void on_lightenWithPaperColor_triggered(bool checked); + + void on_fonts_triggered(); + + void on_fullscreen_triggered(bool checked); + void on_presentation_triggered(); + + void on_previousTab_triggered(); + void on_nextTab_triggered(); + void on_closeTab_triggered(); + void on_closeAllTabs_triggered(); + void on_closeAllTabsButCurrentTab_triggered(); + void on_closeAllTabsButThisOne_triggered(int thisIndex); + void on_closeAllTabsToTheLeft_triggered(int ofIndex); + void on_closeAllTabsToTheRight_triggered(int ofIndex); + void on_closeTabs_triggered(const QVector< DocumentView* >& tabs); + + void on_restoreMostRecentlyClosedTab_triggered(); + + void on_recentlyClosed_tabActionTriggered(QAction* tabAction); + + void on_tabAction_triggered(); + void on_tabShortcut_activated(); + + void on_previousBookmark_triggered(); + void on_nextBookmark_triggered(); + void on_addBookmark_triggered(); + void on_removeBookmark_triggered(); + void on_removeAllBookmarks_triggered(); + + void on_bookmarksMenu_aboutToShow(); + + void on_bookmark_openTriggered(const QString& absoluteFilePath); + void on_bookmark_openInNewTabTriggered(const QString& absoluteFilePath); + void on_bookmark_jumpToPageTriggered(const QString& absoluteFilePath, int page); + void on_bookmark_removeBookmarkTriggered(const QString& absoluteFilePath); + + void on_contents_triggered(); + void on_about_triggered(); + + void on_focusCurrentPage_activated(); + void on_focusScaleFactor_activated(); + + void on_toggleToolBars_triggered(bool checked); + void on_toggleMenuBar_triggered(bool checked); + + void on_searchInitiated(const QString& text, bool modified); + void on_highlightAll_clicked(bool checked); + + void on_dock_dockLocationChanged(Qt::DockWidgetArea area); + + void on_outline_sectionCountChanged(); + void on_outline_clicked(const QModelIndex& index); + + void on_properties_sectionCountChanged(); + + void on_thumbnails_dockLocationChanged(Qt::DockWidgetArea area); + void on_thumbnails_verticalScrollBar_valueChanged(int value); + + void on_bookmarks_sectionCountChanged(); + void on_bookmarks_clicked(const QModelIndex& index); + void on_bookmarks_contextMenuRequested(QPoint pos); + + void on_search_sectionCountChanged(); + void on_search_dockLocationChanged(Qt::DockWidgetArea area); + void on_search_visibilityChanged(bool visible); + void on_search_clicked(const QModelIndex& index); + void on_search_rowsInserted(const QModelIndex& parent, int first, int last); + + void on_saveDatabase_timeout(); + +protected: + bool eventFilter(QObject* target, QEvent* event); + + void closeEvent(QCloseEvent* event); + + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); + +private: + Q_DISABLE_COPY(MainWindow) + + static Settings* s_settings; + static Database* s_database; + static ShortcutHandler* s_shortcutHandler; + static SearchModel* s_searchModel; + + void prepareStyle(); + + TabWidget* m_tabWidget; + + DocumentView* currentTab() const; + DocumentView* currentTab(int index) const; + QVector< DocumentView* > allTabs(int index) const; + QVector< DocumentView* > allTabs() const; + + bool senderIsCurrentTab() const; + + bool m_currentTabChangedBlocked; + + class CurrentTabChangeBlocker; + + void addTab(DocumentView* tab); + void addTabAction(DocumentView* tab); + void connectTab(DocumentView* tab); + + void restorePerFileSettings(DocumentView* tab); + + bool saveModifications(DocumentView* tab); + void closeTab(DocumentView* tab); + + void setWindowTitleForCurrentTab(); + void setCurrentPageSuffixForCurrentTab(); + + BookmarkModel* bookmarkModelForCurrentTab(bool create = false); + + QAction* sourceLinkActionForCurrentTab(QObject* parent, QPoint pos); + + class RestoreTab; + + QTimer* m_saveDatabaseTimer; + + void prepareDatabase(); + + void scheduleSaveDatabase(); + void scheduleSaveTabs(); + void scheduleSaveBookmarks(); + void scheduleSavePerFileSettings(); + + class TextValueMapper; + + MappingSpinBox* m_currentPageSpinBox; + QWidgetAction* m_currentPageAction; + + ComboBox* m_scaleFactorComboBox; + QWidgetAction* m_scaleFactorAction; + + SearchLineEdit* m_searchLineEdit; + QCheckBox* m_matchCaseCheckBox; + QCheckBox* m_wholeWordsCheckBox; + QCheckBox* m_highlightAllCheckBox; + QToolButton* m_findPreviousButton; + QToolButton* m_findNextButton; + QToolButton* m_cancelSearchButton; + + void createWidgets(); + + QAction* m_openAction; + QAction* m_openInNewTabAction; + QAction* m_refreshAction; + QAction* m_saveAction; + QAction* m_saveAsAction; + QAction* m_saveCopyAction; + QAction* m_printAction; + QAction* m_exitAction; + + QAction* m_previousPageAction; + QAction* m_nextPageAction; + QAction* m_firstPageAction; + QAction* m_lastPageAction; + + QAction* m_setFirstPageAction; + + QAction* m_jumpToPageAction; + + QAction* m_jumpBackwardAction; + QAction* m_jumpForwardAction; + + QAction* m_searchAction; + QAction* m_findPreviousAction; + QAction* m_findNextAction; + QAction* m_cancelSearchAction; + + QAction* m_copyToClipboardModeAction; + QAction* m_addAnnotationModeAction; + + QAction* m_settingsAction; + + QAction* m_continuousModeAction; + QAction* m_twoPagesModeAction; + QAction* m_twoPagesWithCoverPageModeAction; + QAction* m_multiplePagesModeAction; + + QAction* m_rightToLeftModeAction; + + QAction* m_zoomInAction; + QAction* m_zoomOutAction; + QAction* m_originalSizeAction; + + QAction* m_fitToPageWidthModeAction; + QAction* m_fitToPageSizeModeAction; + + QAction* m_rotateLeftAction; + QAction* m_rotateRightAction; + + QAction* m_invertColorsAction; + QAction* m_convertToGrayscaleAction; + QAction* m_trimMarginsAction; + QAction* m_darkenWithPaperColorAction; + QAction* m_lightenWithPaperColorAction; + + QAction* m_fontsAction; + + QAction* m_fullscreenAction; + QAction* m_presentationAction; + + QAction* m_previousTabAction; + QAction* m_nextTabAction; + + QAction* m_closeTabAction; + QAction* m_closeAllTabsAction; + QAction* m_closeAllTabsButCurrentTabAction; + + QAction* m_restoreMostRecentlyClosedTabAction; + + QShortcut* m_tabShortcuts[9]; + + QAction* m_previousBookmarkAction; + QAction* m_nextBookmarkAction; + + QAction* m_addBookmarkAction; + QAction* m_removeBookmarkAction; + QAction* m_removeAllBookmarksAction; + + QAction* m_contentsAction; + QAction* m_aboutAction; + + QAction* m_openCopyInNewTabAction; + QAction* m_openCopyInNewWindowAction; + QAction* m_openContainingFolderAction; + QAction* m_moveToInstanceAction; + QAction* m_splitViewHorizontallyAction; + QAction* m_splitViewVerticallyAction; + QAction* m_closeCurrentViewAction; + + QAction* createAction(const QString& text, const QString& objectName, const QIcon& icon, const QList< QKeySequence >& shortcuts, const char* member, bool checkable = false, bool checked = false); + QAction* createAction(const QString& text, const QString& objectName, const QIcon& icon, const QKeySequence& shortcut, const char* member, bool checkable = false, bool checked = false); + QAction* createAction(const QString& text, const QString& objectName, const QString& iconName, const QList< QKeySequence >& shortcuts, const char* member, bool checkable = false, bool checked = false); + QAction* createAction(const QString& text, const QString& objectName, const QString& iconName, const QKeySequence& shortcut, const char* member, bool checkable = false, bool checked = false); + + void createActions(); + + QToolBar* m_fileToolBar; + QToolBar* m_editToolBar; + QToolBar* m_viewToolBar; + + QShortcut* m_focusCurrentPageShortcut; + QShortcut* m_focusScaleFactorShortcut; + + QToolBar* createToolBar(const QString& text, const QString& objectName, const QStringList& actionNames, const QList< QAction* >& actions); + + void createToolBars(); + + QDockWidget* m_outlineDock; + TreeView* m_outlineView; + + QDockWidget* m_propertiesDock; + QTableView* m_propertiesView; + + QDockWidget* m_thumbnailsDock; + QGraphicsView* m_thumbnailsView; + + QDockWidget* m_bookmarksDock; + QTableView* m_bookmarksView; + + QDockWidget* m_searchDock; + QTreeView* m_searchView; + QWidget* m_searchWidget; + + QDockWidget* createDock(const QString& text, const QString& objectName, const QKeySequence& toggleViewShortcut); + + void createSearchDock(); + + void createDocks(); + + QMenu* m_fileMenu; + RecentlyUsedMenu* m_recentlyUsedMenu; + QMenu* m_editMenu; + QMenu* m_viewMenu; + QMenu* m_compositionModeMenu; + SearchableMenu* m_tabsMenu; + RecentlyClosedMenu* m_recentlyClosedMenu; + SearchableMenu* m_bookmarksMenu; + QMenu* m_helpMenu; + + bool m_bookmarksMenuIsDirty; + + void createMenus(); + + int m_tabBarHadPolicy; + + bool m_fileToolBarWasVisible; + bool m_editToolBarWasVisible; + bool m_viewToolBarWasVisible; + + QAction* m_toggleToolBarsAction; + QAction* m_toggleMenuBarAction; + + QPointer< HelpDialog > m_helpDialog; + +}; + +#ifdef WITH_DBUS + +class MainWindowAdaptor : public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "local.qpdfview.MainWindow") + + explicit MainWindowAdaptor(MainWindow* mainWindow); + +public: + static QDBusInterface* createInterface(const QString& instanceName = QString()); + static MainWindowAdaptor* createAdaptor(MainWindow* mainWindow); + +public slots: + Q_NOREPLY void raiseAndActivate(); + + bool open(const QString& absoluteFilePath, int page = -1, const QRectF& highlight = QRectF(), bool quiet = false); + bool openInNewTab(const QString& absoluteFilePath, int page = -1, const QRectF& highlight = QRectF(), bool quiet = false); + + bool jumpToPageOrOpenInNewTab(const QString& absoluteFilePath, int page = -1, bool refreshBeforeJump = false, const QRectF& highlight = QRectF(), bool quiet = false); + + Q_NOREPLY void startSearch(const QString& text); + + Q_NOREPLY void saveDatabase(); + + + int currentPage() const; + Q_NOREPLY void jumpToPage(int page); + + Q_NOREPLY void previousPage(); + Q_NOREPLY void nextPage(); + Q_NOREPLY void firstPage(); + Q_NOREPLY void lastPage(); + + Q_NOREPLY void previousBookmark(); + Q_NOREPLY void nextBookmark(); + + bool jumpToBookmark(const QString& label); + + + Q_NOREPLY void continuousMode(bool checked); + Q_NOREPLY void twoPagesMode(bool checked); + Q_NOREPLY void twoPagesWithCoverPageMode(bool checked); + Q_NOREPLY void multiplePagesMode(bool checked); + + Q_NOREPLY void fitToPageWidthMode(bool checked); + Q_NOREPLY void fitToPageSizeMode(bool checked); + + Q_NOREPLY void invertColors(bool checked); + Q_NOREPLY void convertToGrayscale(bool checked); + Q_NOREPLY void trimMargins(bool checked); + + Q_NOREPLY void fullscreen(bool checked); + Q_NOREPLY void presentation(); + + + Q_NOREPLY void closeTab(); + Q_NOREPLY void closeAllTabs(); + Q_NOREPLY void closeAllTabsButCurrentTab(); + + bool closeTab(const QString& absoluteFilePath); + +private: + MainWindow* mainWindow() const; + + static QString serviceName(QString instanceName = QString()); + +}; + +#endif // WITH_DBUS + +} // qpdfview + +#endif // MAINWINDOW_H diff --git a/sources/miscellaneous.cpp b/sources/miscellaneous.cpp new file mode 100644 index 0000000..4e9d5ba --- /dev/null +++ b/sources/miscellaneous.cpp @@ -0,0 +1,991 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2018 Adam Reichold +Copyright 2018 Pavel Sanda +Copyright 2014 Dorian Scholz + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "miscellaneous.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "searchmodel.h" + +namespace qpdfview +{ + +namespace +{ + +inline bool isPrintable(const QString& string) +{ + foreach(const QChar& character, string) + { + if(!character.isPrint()) + { + return false; + } + } + + return true; +} + +inline QModelIndex firstIndex(const QModelIndexList& indexes) +{ + return !indexes.isEmpty() ? indexes.first() : QModelIndex(); +} + +} // anonymous + +GraphicsCompositionModeEffect::GraphicsCompositionModeEffect(QPainter::CompositionMode compositionMode, QObject* parent) : QGraphicsEffect(parent), + m_compositionMode(compositionMode) +{ +} + +void GraphicsCompositionModeEffect::draw(QPainter* painter) +{ + painter->save(); + + painter->setCompositionMode(m_compositionMode); + + drawSource(painter); + + painter->restore(); +} + +ProxyStyle::ProxyStyle() : QProxyStyle(), + m_scrollableMenus(false) +{ +} + +bool ProxyStyle::scrollableMenus() const +{ + return m_scrollableMenus; +} + +void ProxyStyle::setScrollableMenus(bool scrollableMenus) +{ + m_scrollableMenus = scrollableMenus; +} + +int ProxyStyle::styleHint(StyleHint hint, const QStyleOption* option, const QWidget* widget, QStyleHintReturn* returnData) const +{ + if(m_scrollableMenus && hint == QStyle::SH_Menu_Scrollable) + { + return 1; + } + + return QProxyStyle::styleHint(hint, option, widget, returnData); +} + +ToolTipMenu::ToolTipMenu(QWidget* parent) : QMenu(parent) +{ +} + +ToolTipMenu::ToolTipMenu(const QString& title, QWidget* parent) : QMenu(title, parent) +{ +} + +bool ToolTipMenu::event(QEvent* event) +{ + const QAction* const action = activeAction(); + + if(event->type() == QEvent::ToolTip && action != 0 && !action->data().isNull()) + { + QToolTip::showText(static_cast< QHelpEvent* >(event)->globalPos(), action->toolTip()); + } + else + { + QToolTip::hideText(); + } + + return QMenu::event(event); +} + +SearchableMenu::SearchableMenu(const QString& title, QWidget* parent) : ToolTipMenu(title, parent), + m_searchable(false), + m_text() +{ +} + +bool SearchableMenu::isSearchable() const +{ + return m_searchable; +} + +void SearchableMenu::setSearchable(bool searchable) +{ + m_searchable = searchable; +} + +void SearchableMenu::hideEvent(QHideEvent* event) +{ + QMenu::hideEvent(event); + + if(m_searchable && !event->spontaneous()) + { + m_text = QString(); + + foreach(QAction* action, actions()) + { + action->setVisible(true); + } + } +} + +void SearchableMenu::keyPressEvent(QKeyEvent* event) +{ + if(!m_searchable) + { + QMenu::keyPressEvent(event); + return; + } + + const QString text = event->text(); + + if(!text.isEmpty() && isPrintable(text)) + { + m_text.append(text); + } + else if(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) + { + m_text.chop(1); + } + else + { + QMenu::keyPressEvent(event); + return; + } + + QAction* firstVisibleAction = 0; + + foreach(QAction* action, actions()) + { + if(action->data().isNull()) // Modify only flagged actions + { + continue; + } + + const bool visible = action->text().contains(m_text, Qt::CaseInsensitive); + + action->setVisible(visible); + + if(visible && firstVisibleAction == 0) + { + firstVisibleAction = action; + } + } + + setActiveAction(firstVisibleAction); + + QToolTip::showText(mapToGlobal(rect().topLeft()), tr("Search for '%1'...").arg(m_text), this); +} + +TabBar::TabBar(QWidget* parent) : QTabBar(parent), + m_dragIndex(-1) +{ +} + +QSize TabBar::tabSizeHint(int index) const +{ + QSize size = QTabBar::tabSizeHint(index); + + const TabWidget* tabWidget = qobject_cast< TabWidget* >(parentWidget()); + + if(tabWidget != 0 && tabWidget->spreadTabs()) + { + switch(tabWidget->tabPosition()) + { + default: + case QTabWidget::North: + case QTabWidget::South: + size.setWidth(qMax(width() / count(), size.width())); + break; + case QTabWidget::East: + case QTabWidget::West: + size.setHeight(qMax(height() / count(), size.height())); + break; + } + } + + return size; +} + +void TabBar::mousePressEvent(QMouseEvent* event) +{ + if(event->button() == Qt::MidButton) + { + const int index = tabAt(event->pos()); + + if(index != -1) + { + emit tabCloseRequested(index); + + event->accept(); + return; + } + } + else if(event->modifiers() == Qt::ShiftModifier && event->button() == Qt::LeftButton) + { + const int index = tabAt(event->pos()); + + if(index != -1) + { + m_dragIndex = index; + m_dragPos = event->pos(); + + event->accept(); + return; + } + } + + QTabBar::mousePressEvent(event); +} + +void TabBar::mouseMoveEvent(QMouseEvent* event) +{ + QTabBar::mouseMoveEvent(event); + + if(m_dragIndex != -1) + { + if((event->pos() - m_dragPos).manhattanLength() >= QApplication::startDragDistance()) + { + emit tabDragRequested(m_dragIndex); + + m_dragIndex = -1; + } + } +} + +void TabBar::mouseReleaseEvent(QMouseEvent* event) +{ + QTabBar::mouseReleaseEvent(event); + + m_dragIndex = -1; +} + +TabWidget::TabWidget(QWidget* parent) : QTabWidget(parent), + m_tabBarPolicy(TabBarAsNeeded), + m_spreadTabs(false) +{ + TabBar* tabBar = new TabBar(this); + + tabBar->setContextMenuPolicy(Qt::CustomContextMenu); + + connect(tabBar, SIGNAL(tabDragRequested(int)), SIGNAL(tabDragRequested(int))); + connect(tabBar, SIGNAL(customContextMenuRequested(QPoint)), SLOT(on_tabBar_customContextMenuRequested(QPoint))); + + setTabBar(tabBar); +} + +int TabWidget::addTab(QWidget* const widget, const bool nextToCurrent, + const QString& label, const QString& toolTip) +{ + const int index = nextToCurrent + ? insertTab(currentIndex() + 1, widget, label) + : QTabWidget::addTab(widget, label); + + setTabToolTip(index, toolTip); + setCurrentIndex(index); + + return index; +} + +TabWidget::TabBarPolicy TabWidget::tabBarPolicy() const +{ + return m_tabBarPolicy; +} + +void TabWidget::setTabBarPolicy(TabWidget::TabBarPolicy tabBarPolicy) +{ + m_tabBarPolicy = tabBarPolicy; + + switch(m_tabBarPolicy) + { + case TabBarAsNeeded: + tabBar()->setVisible(count() > 1); + break; + case TabBarAlwaysOn: + tabBar()->setVisible(true); + break; + case TabBarAlwaysOff: + tabBar()->setVisible(false); + break; + } +} + +bool TabWidget::spreadTabs() const +{ + return m_spreadTabs; +} + +void TabWidget::setSpreadTabs(bool spreadTabs) +{ + if(m_spreadTabs != spreadTabs) + { + m_spreadTabs = spreadTabs; + + QResizeEvent resizeEvent(tabBar()->size(), tabBar()->size()); + QApplication::sendEvent(tabBar(), &resizeEvent); + } +} + +void TabWidget::previousTab() +{ + int index = currentIndex() - 1; + + if(index < 0) + { + index = count() - 1; + } + + setCurrentIndex(index); +} + +void TabWidget::nextTab() +{ + int index = currentIndex() + 1; + + if(index >= count()) + { + index = 0; + } + + setCurrentIndex(index); +} + +void TabWidget::on_tabBar_customContextMenuRequested(QPoint pos) +{ + const int index = tabBar()->tabAt(pos); + + if(index != -1) + { + emit tabContextMenuRequested(tabBar()->mapToGlobal(pos), tabBar()->tabAt(pos)); + } +} + +void TabWidget::tabInserted(int index) +{ + QTabWidget::tabInserted(index); + + if(m_tabBarPolicy == TabBarAsNeeded) + { + tabBar()->setVisible(count() > 1); + } +} + +void TabWidget::tabRemoved(int index) +{ + QTabWidget::tabRemoved(index); + + if(m_tabBarPolicy == TabBarAsNeeded) + { + tabBar()->setVisible(count() > 1); + } +} + +TreeView::TreeView(int expansionRole, QWidget* parent) : QTreeView(parent), + m_expansionRole(expansionRole) +{ + connect(this, SIGNAL(expanded(QModelIndex)), SLOT(on_expanded(QModelIndex))); + connect(this, SIGNAL(collapsed(QModelIndex)), SLOT(on_collapsed(QModelIndex))); +} + +void TreeView::expandAbove(const QModelIndex& child) +{ + for(QModelIndex index = child.parent(); index.isValid(); index = index.parent()) + { + expand(index); + } +} + +void TreeView::expandAll(const QModelIndex& index) +{ + if(index.isValid()) + { + if(!isExpanded(index)) + { + expand(index); + } + + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + expandAll(index.child(row, 0)); + } + } + else + { + QTreeView::expandAll(); + } +} + +void TreeView::collapseAll(const QModelIndex& index) +{ + if(index.isValid()) + { + if(isExpanded(index)) + { + collapse(index); + } + + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + collapseAll(index.child(row, 0)); + } + } + else + { + QTreeView::collapseAll(); + } +} + +int TreeView::expandedDepth(const QModelIndex& index) +{ + if(index.isValid()) + { + if(!isExpanded(index) || !model()->hasChildren(index)) + { + return 0; + } + + int depth = 0; + + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + depth = qMax(depth, expandedDepth(index.child(row, 0))); + } + + return 1 + depth; + } + else + { + int depth = 0; + + for(int row = 0, rowCount = model()->rowCount(); row < rowCount; ++row) + { + depth = qMax(depth, expandedDepth(model()->index(row, 0))); + } + + return depth; + } +} + +void TreeView::expandToDepth(const QModelIndex& index, int depth) +{ + if(index.isValid()) + { + if(depth > 0) + { + if(!isExpanded(index)) + { + expand(index); + } + } + + if(depth > 1) + { + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + expandToDepth(index.child(row, 0), depth - 1); + } + } + } + else + { + for(int row = 0, rowCount = model()->rowCount(); row < rowCount; ++row) + { + expandToDepth(model()->index(row, 0), depth); + } + } +} + +void TreeView::collapseFromDepth(const QModelIndex& index, int depth) +{ + if(index.isValid()) + { + if(depth <= 0) + { + if(isExpanded(index)) + { + collapse(index); + } + } + + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + collapseFromDepth(index.child(row, 0), depth - 1); + } + } + else + { + for(int row = 0, rowCount = model()->rowCount(); row < rowCount; ++row) + { + collapseFromDepth(model()->index(row, 0), depth); + } + } +} + +void TreeView::restoreExpansion(const QModelIndex& index) +{ + if(index.isValid()) + { + const bool expanded = index.data(m_expansionRole).toBool(); + + if(isExpanded(index) != expanded) + { + setExpanded(index, expanded); + } + } + + for(int row = 0, rowCount = model()->rowCount(index); row < rowCount; ++row) + { + restoreExpansion(model()->index(row, 0, index)); + } +} + +void TreeView::keyPressEvent(QKeyEvent* event) +{ + const bool verticalKeys = event->key() == Qt::Key_Up || event->key() == Qt::Key_Down; + const bool horizontalKeys = event->key() == Qt::Key_Left || event->key() == Qt::Key_Right; + + const QModelIndex selection = firstIndex(selectedIndexes()); + + // If Shift is pressed, the view is scrolled up or down. + if(event->modifiers().testFlag(Qt::ShiftModifier) && verticalKeys) + { + QScrollBar* scrollBar = verticalScrollBar(); + + if(event->key() == Qt::Key_Up && scrollBar->value() > scrollBar->minimum()) + { + scrollBar->triggerAction(QAbstractSlider::SliderSingleStepSub); + + event->accept(); + return; + } + else if(event->key() == Qt::Key_Down && scrollBar->value() < scrollBar->maximum()) + { + scrollBar->triggerAction(QAbstractSlider::SliderSingleStepAdd); + + event->accept(); + return; + } + } + + // If Control is pressed, all children of the selected item are expanded or collapsed. + if(event->modifiers().testFlag(Qt::ControlModifier) && horizontalKeys) + { + if(event->key() == Qt::Key_Left) + { + collapseAll(selection); + } + else if(event->key() == Qt::Key_Right) + { + expandAll(selection); + } + + event->accept(); + return; + } + + // If Shift is pressed, one level of children of the selected item are expanded or collapsed. + if(event->modifiers().testFlag(Qt::ShiftModifier) && horizontalKeys) + { + const int depth = expandedDepth(selection); + + if(event->key() == Qt::Key_Left) + { + collapseFromDepth(selection, depth - 1); + } + else if(event->key() == Qt::Key_Right) + { + expandToDepth(selection, depth + 1); + } + + event->accept(); + return; + } + + QTreeView::keyPressEvent(event); +} + +void TreeView::wheelEvent(QWheelEvent* event) +{ + const QModelIndex selection = firstIndex(selectedIndexes()); + + // If Control is pressed, expand or collapse the selected entry. + if(event->modifiers().testFlag(Qt::ControlModifier) && selection.isValid()) + { + if(event->delta() > 0) + { + collapse(selection); + } + else + { + expand(selection); + } + + // Fall through when Shift is also pressed. + if(!event->modifiers().testFlag(Qt::ShiftModifier)) + { + event->accept(); + return; + } + } + + // If Shift is pressed, move the selected entry up and down. + if(event->modifiers().testFlag(Qt::ShiftModifier) && selection.isValid()) + { + QModelIndex sibling; + + if(event->delta() > 0) + { + sibling = indexAbove(selection); + } + else + { + sibling = indexBelow(selection); + } + + if(sibling.isValid()) + { + setCurrentIndex(sibling); + } + + event->accept(); + return; + } + + QTreeView::wheelEvent(event); +} + +void TreeView::contextMenuEvent(QContextMenuEvent* event) +{ + QTreeView::contextMenuEvent(event); + + if(!event->isAccepted()) + { + QMenu menu; + + const QAction* expandAllAction = menu.addAction(tr("&Expand all")); + const QAction* collapseAllAction = menu.addAction(tr("&Collapse all")); + + const QAction* action = menu.exec(event->globalPos()); + + if(action == expandAllAction) + { + expandAll(indexAt(event->pos())); + } + else if(action == collapseAllAction) + { + collapseAll(indexAt(event->pos())); + } + } +} + +void TreeView::on_expanded(const QModelIndex& index) +{ + model()->setData(index, true, m_expansionRole); +} + +void TreeView::on_collapsed(const QModelIndex& index) +{ + model()->setData(index, false, m_expansionRole); +} + +LineEdit::LineEdit(QWidget* parent) : QLineEdit(parent) +{ +} + +void LineEdit::mousePressEvent(QMouseEvent* event) +{ + QLineEdit::mousePressEvent(event); + + selectAll(); +} + +ComboBox::ComboBox(QWidget* parent) : QComboBox(parent) +{ + setLineEdit(new LineEdit(this)); +} + +SpinBox::SpinBox(QWidget* parent) : QSpinBox(parent) +{ + setLineEdit(new LineEdit(this)); +} + +void SpinBox::keyPressEvent(QKeyEvent* event) +{ + QSpinBox::keyPressEvent(event); + + if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) + { + emit returnPressed(); + } +} + +MappingSpinBox::MappingSpinBox(TextValueMapper* mapper, QWidget* parent) : SpinBox(parent), + m_mapper(mapper) +{ +} + +QString MappingSpinBox::textFromValue(int val) const +{ + bool ok = false; + QString text = m_mapper->textFromValue(val, ok); + + if(!ok) + { + text = SpinBox::textFromValue(val); + } + + return text; +} + +int MappingSpinBox::valueFromText(const QString& text) const +{ + bool ok = false; + int value = m_mapper->valueFromText(text, ok); + + if(!ok) + { + value = SpinBox::valueFromText(text); + } + + return value; +} + +QValidator::State MappingSpinBox::validate(QString& input, int& pos) const +{ + Q_UNUSED(input); + Q_UNUSED(pos); + + return QValidator::Acceptable; +} + +int getMappedNumber(MappingSpinBox::TextValueMapper* mapper, + QWidget* parent, const QString& title, const QString& caption, + int value, int min, int max, bool* ok, Qt::WindowFlags flags) +{ + QDialog* dialog = new QDialog(parent, flags | Qt::MSWindowsFixedSizeDialogHint); + dialog->setWindowTitle(title); + + QLabel* label = new QLabel(dialog); + label->setText(caption); + + MappingSpinBox* mappingSpinBox = new MappingSpinBox(mapper, dialog); + mappingSpinBox->setRange(min, max); + mappingSpinBox->setValue(value); + mappingSpinBox->selectAll(); + + QDialogButtonBox* dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, dialog); + QObject::connect(dialogButtonBox, SIGNAL(accepted()), dialog, SLOT(accept())); + QObject::connect(dialogButtonBox, SIGNAL(rejected()), dialog, SLOT(reject())); + + dialog->setLayout(new QVBoxLayout(dialog)); + dialog->layout()->addWidget(label); + dialog->layout()->addWidget(mappingSpinBox); + dialog->layout()->addWidget(dialogButtonBox); + + dialog->setFocusProxy(mappingSpinBox); + + const int dialogResult = dialog->exec(); + const int number = mappingSpinBox->value(); + + delete dialog; + + if(ok) + { + *ok = dialogResult == QDialog::Accepted; + } + + return number; +} + +ProgressLineEdit::ProgressLineEdit(QWidget* parent) : QLineEdit(parent), + m_progress(0) +{ +} + +int ProgressLineEdit::progress() const +{ + return m_progress; +} + +void ProgressLineEdit::setProgress(int progress) +{ + if(m_progress != progress && progress >= 0 && progress <= 100) + { + m_progress = progress; + + update(); + } +} + +void ProgressLineEdit::paintEvent(QPaintEvent* event) +{ + QLineEdit::paintEvent(event); + + QPainter painter(this); + + QRect highlightedRect = rect(); + highlightedRect.setWidth(m_progress * highlightedRect.width() / 100); + + painter.setCompositionMode(QPainter::CompositionMode_Multiply); + painter.fillRect(highlightedRect, palette().highlight()); +} + +void ProgressLineEdit::keyPressEvent(QKeyEvent* event) +{ + QLineEdit::keyPressEvent(event); + + if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) + { + emit returnPressed(event->modifiers()); + } +} + +SearchLineEdit::SearchLineEdit(QWidget* parent) : ProgressLineEdit(parent) +{ + m_timer = new QTimer(this); + + m_timer->setInterval(2000); + m_timer->setSingleShot(true); + + connect(this, SIGNAL(textEdited(QString)), m_timer, SLOT(start())); + connect(this, SIGNAL(returnPressed(Qt::KeyboardModifiers)), SLOT(on_returnPressed(Qt::KeyboardModifiers))); + connect(m_timer, SIGNAL(timeout()), SLOT(on_timeout())); +} + +void SearchLineEdit::startSearch() +{ + QTimer::singleShot(0, this, SLOT(on_timeout())); +} + +void SearchLineEdit::startTimer() +{ + m_timer->start(); +} + +void SearchLineEdit::stopTimer() +{ + m_timer->stop(); +} + +void SearchLineEdit::on_timeout() +{ + emit searchInitiated(text()); +} + +void SearchLineEdit::on_returnPressed(Qt::KeyboardModifiers modifiers) +{ + stopTimer(); + + emit searchInitiated(text(), modifiers == Qt::ShiftModifier); +} + +Splitter::Splitter(Qt::Orientation orientation, QWidget* parent) : QSplitter(orientation, parent), + m_currentIndex(0) +{ + connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(on_focusChanged(QWidget*,QWidget*))); +} + +QWidget* Splitter::currentWidget() const +{ + return widget(m_currentIndex); +} + +void Splitter::setCurrentWidget(QWidget* const currentWidget) +{ + for(int index = 0, count = this->count(); index < count; ++index) + { + QWidget* const widget = this->widget(index); + + if(currentWidget == widget) + { + if(m_currentIndex != index) + { + m_currentIndex = index; + + emit currentWidgetChanged(currentWidget); + } + + return; + } + } +} + +void Splitter::setUniformSizes() +{ + int size; + + switch(orientation()) + { + default: + case Qt::Horizontal: + size = width(); + break; + case Qt::Vertical: + size = height(); + break; + } + + QList< int > sizes; + + for(int index = 0, count = this->count(); index < count; ++index) + { + sizes.append(size / count); + } + + setSizes(sizes); +} + +void Splitter::on_focusChanged(QWidget* /* old */, QWidget* now) +{ + for(QWidget* currentWidget = now; currentWidget != 0; currentWidget = currentWidget->parentWidget()) + { + if(currentWidget->parentWidget() == this) + { + setCurrentWidget(currentWidget); + + return; + } + } +} + +void openInNewWindow(const QString& filePath, int page) +{ + QProcess::startDetached( + QApplication::applicationFilePath(), + QStringList() << QString("%2#%1").arg(page).arg(filePath) + ); +} + +} // qpdfview diff --git a/sources/miscellaneous.h b/sources/miscellaneous.h new file mode 100644 index 0000000..46cac26 --- /dev/null +++ b/sources/miscellaneous.h @@ -0,0 +1,426 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2012-2018 Adam Reichold +Copyright 2018 Pavel Sanda +Copyright 2014 Dorian Scholz + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef MISCELLANEOUS_H +#define MISCELLANEOUS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QTextLayout; + +namespace qpdfview +{ + +// graphics composition mode effect + +class GraphicsCompositionModeEffect : public QGraphicsEffect +{ + Q_OBJECT + +public: + GraphicsCompositionModeEffect(QPainter::CompositionMode compositionMode, QObject* parent = 0); + +protected: + void draw(QPainter* painter); + +private: + QPainter::CompositionMode m_compositionMode; + +}; + +// proxy style + +class ProxyStyle : public QProxyStyle +{ + Q_OBJECT + +public: + ProxyStyle(); + + bool scrollableMenus() const; + void setScrollableMenus(bool scrollableMenus); + + int styleHint(StyleHint hint, const QStyleOption* option, const QWidget* widget, QStyleHintReturn* returnData) const; + +private: + Q_DISABLE_COPY(ProxyStyle) + + bool m_scrollableMenus; + +}; + +// tool tip menu + +class ToolTipMenu : public QMenu +{ + Q_OBJECT + +public: + explicit ToolTipMenu(QWidget* parent = 0); + ToolTipMenu(const QString& title, QWidget* parent = 0); + +protected: + bool event(QEvent* event); + +}; + +// searchable menu + +class SearchableMenu : public ToolTipMenu +{ + Q_OBJECT + +public: + SearchableMenu(const QString& title, QWidget* parent = 0); + + bool isSearchable() const; + void setSearchable(bool searchable); + +protected: + void hideEvent(QHideEvent* event); + void keyPressEvent(QKeyEvent* event); + +private: + bool m_searchable; + QString m_text; + +}; + +// tab bar + +class TabBar : public QTabBar +{ + Q_OBJECT + +public: + explicit TabBar(QWidget* parent = 0); + +signals: + void tabDragRequested(int index); + +protected: + QSize tabSizeHint(int index) const; + + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); + +private: + Q_DISABLE_COPY(TabBar) + + int m_dragIndex; + QPoint m_dragPos; + +}; + +// tab widget + +class TabWidget : public QTabWidget +{ + Q_OBJECT + +public: + explicit TabWidget(QWidget* parent = 0); + + bool hasCurrent() const { return currentIndex() != -1; } + + QString currentTabText() const { return tabText(currentIndex()); } + void setCurrentTabText(const QString& text) { setTabText(currentIndex(), text); } + + QString currentTabToolTip() const { return tabToolTip(currentIndex()); } + void setCurrentTabToolTip(const QString& toolTip) { setTabToolTip(currentIndex(), toolTip); } + + int addTab(QWidget* const widget, const bool nextToCurrent, + const QString& label, const QString& toolTip); + + enum TabBarPolicy + { + TabBarAsNeeded = 0, + TabBarAlwaysOn = 1, + TabBarAlwaysOff = 2 + }; + + TabBarPolicy tabBarPolicy() const; + void setTabBarPolicy(TabBarPolicy tabBarPolicy); + + bool spreadTabs() const; + void setSpreadTabs(bool spreadTabs); + +public slots: + void previousTab(); + void nextTab(); + +signals: + void tabDragRequested(int index); + void tabContextMenuRequested(QPoint globalPos, int index); + +protected slots: + void on_tabBar_customContextMenuRequested(QPoint pos); + +protected: + void tabInserted(int index); + void tabRemoved(int index); + +private: + Q_DISABLE_COPY(TabWidget) + + TabBarPolicy m_tabBarPolicy; + bool m_spreadTabs; + +}; + +// tree view + +class TreeView : public QTreeView +{ + Q_OBJECT + +public: + explicit TreeView(int expansionRole, QWidget* parent = 0); + +public slots: + void expandAbove(const QModelIndex& child); + + void expandAll(const QModelIndex& index = QModelIndex()); + void collapseAll(const QModelIndex& index = QModelIndex()); + + int expandedDepth(const QModelIndex& index); + + void expandToDepth(const QModelIndex& index, int depth); + void collapseFromDepth(const QModelIndex& index, int depth); + + void restoreExpansion(const QModelIndex& index = QModelIndex()); + +protected: + void keyPressEvent(QKeyEvent* event); + void wheelEvent(QWheelEvent* event); + + void contextMenuEvent(QContextMenuEvent* event); + +protected slots: + void on_expanded(const QModelIndex& index); + void on_collapsed(const QModelIndex& index); + +private: + Q_DISABLE_COPY(TreeView) + + int m_expansionRole; + +}; + +// line edit + +class LineEdit : public QLineEdit +{ + Q_OBJECT + +public: + explicit LineEdit(QWidget* parent = 0); + +protected: + void mousePressEvent(QMouseEvent* event); + +private: + Q_DISABLE_COPY(LineEdit) + +}; + +// combo box + +class ComboBox : public QComboBox +{ + Q_OBJECT + +public: + explicit ComboBox(QWidget* parent = 0); + +private: + Q_DISABLE_COPY(ComboBox) + +}; + +// spin box + +class SpinBox : public QSpinBox +{ + Q_OBJECT + +public: + explicit SpinBox(QWidget* parent = 0); + +signals: + void returnPressed(); + +protected: + void keyPressEvent(QKeyEvent* event); + +private: + Q_DISABLE_COPY(SpinBox) + +}; + +// mapping spin box + +class MappingSpinBox : public SpinBox +{ + Q_OBJECT + +public: + struct TextValueMapper + { + virtual ~TextValueMapper() {} + + virtual QString textFromValue(int val, bool& ok) const = 0; + virtual int valueFromText(const QString& text, bool& ok) const = 0; + }; + + MappingSpinBox(TextValueMapper* mapper, QWidget* parent = 0); + +protected: + QString textFromValue(int val) const; + int valueFromText(const QString& text) const; + + QValidator::State validate(QString& input, int& pos) const; + +private: + Q_DISABLE_COPY(MappingSpinBox) + + QScopedPointer< TextValueMapper > m_mapper; + +}; + +int getMappedNumber(MappingSpinBox::TextValueMapper* mapper, + QWidget* parent, const QString& title, const QString& caption, + int value = 0, int min = -2147483647, int max = 2147483647, + bool* ok = 0, Qt::WindowFlags flags = 0); + +// progress line edit + +class ProgressLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + explicit ProgressLineEdit(QWidget* parent = 0); + + int progress() const; + void setProgress(int progress); + +signals: + void returnPressed(Qt::KeyboardModifiers modifiers); + +protected: + void paintEvent(QPaintEvent* event); + void keyPressEvent(QKeyEvent* event); + +private: + Q_DISABLE_COPY(ProgressLineEdit) + + int m_progress; + +}; + +// search line edit + +class SearchLineEdit : public ProgressLineEdit +{ + Q_OBJECT + +public: + explicit SearchLineEdit(QWidget* parent = 0); + +public slots: + void startSearch(); + + void startTimer(); + void stopTimer(); + +signals: + void searchInitiated(const QString& text, bool modified = false); + +protected slots: + void on_timeout(); + void on_returnPressed(Qt::KeyboardModifiers modifiers); + +private: + Q_DISABLE_COPY(SearchLineEdit) + + QTimer* m_timer; + +}; + +// splitter + +class Splitter : public QSplitter +{ + Q_OBJECT + +public: + explicit Splitter(Qt::Orientation orientation, QWidget* parent = 0); + + QWidget* currentWidget() const; + void setCurrentWidget(QWidget* const currentWidget); + + void setUniformSizes(); + +signals: + void currentWidgetChanged(QWidget* currentWidget); + +protected slots: + void on_focusChanged(QWidget* old, QWidget* now); + +private: + Q_DISABLE_COPY(Splitter) + + int m_currentIndex; + +}; + +// fallback icons + +inline QIcon loadIconWithFallback(const QString& name) +{ + QIcon icon = QIcon::fromTheme(name); + + if(icon.isNull()) + { + icon = QIcon(QLatin1String(":icons/") + name); + } + + return icon; +} + +void openInNewWindow(const QString& filePath, int page); + +} // qpdfview + +#endif // MISCELLANEOUS_H diff --git a/sources/model.h b/sources/model.h new file mode 100644 index 0000000..6363c32 --- /dev/null +++ b/sources/model.h @@ -0,0 +1,218 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef DOCUMENTMODEL_H +#define DOCUMENTMODEL_H + +#include +#include +#include +#include + +class QAbstractItemModel; +class QColor; +class QImage; +class QPrinter; +class QSizeF; + +#include "global.h" + +namespace qpdfview +{ + +namespace Model +{ + struct Link + { + QPainterPath boundary; + + int page; + qreal left; + qreal top; + + QString urlOrFileName; + + Link() : boundary(), page(-1), left(qQNaN()), top(qQNaN()), urlOrFileName() {} + + Link(const QPainterPath& boundary, int page, qreal left = qQNaN(), qreal top = qQNaN()) : boundary(boundary), page(page), left(left), top(top), urlOrFileName() {} + Link(const QRectF& boundingRect, int page, qreal left = qQNaN(), qreal top = qQNaN()) : boundary(), page(page), left(left), top(top), urlOrFileName() { boundary.addRect(boundingRect); } + + Link(const QPainterPath& boundary, const QString& url) : boundary(boundary), page(-1), left(qQNaN()), top(qQNaN()), urlOrFileName(url) {} + Link(const QRectF& boundingRect, const QString& url) : boundary(), page(-1), left(qQNaN()), top(qQNaN()), urlOrFileName(url) { boundary.addRect(boundingRect); } + + Link(const QPainterPath& boundary, const QString& fileName, int page) : boundary(boundary), page(page), left(qQNaN()), top(qQNaN()), urlOrFileName(fileName) {} + Link(const QRectF& boundingRect, const QString& fileName, int page) : boundary(), page(page), left(qQNaN()), top(qQNaN()), urlOrFileName(fileName) { boundary.addRect(boundingRect); } + + }; + + struct Section; + + typedef QVector< Section > Outline; + + struct Section + { + QString title; + Link link; + + Outline children; + + }; + + typedef QVector< QPair< QString, QString > > Properties; + + class Annotation : public QObject + { + Q_OBJECT + + public: + Annotation(QObject* parent = 0) : QObject(parent) {} + virtual ~Annotation() {} + + virtual QRectF boundary() const = 0; + virtual QString contents() const = 0; + + virtual QWidget* createWidget() = 0; + + signals: + void wasModified(); + + }; + + class FormField : public QObject + { + Q_OBJECT + + public: + FormField(QObject* parent = 0) : QObject(parent) {} + virtual ~FormField() {} + + virtual QRectF boundary() const = 0; + virtual QString name() const = 0; + + virtual QWidget* createWidget() = 0; + + signals: + void wasModified(); + + }; + + class Page + { + public: + virtual ~Page() {} + + virtual QSizeF size() const = 0; + + virtual QImage render(qreal horizontalResolution = 72.0, qreal verticalResolution = 72.0, Rotation rotation = RotateBy0, QRect boundingRect = QRect()) const = 0; + + virtual QString label() const { return QString(); } + + virtual QList< Link* > links() const { return QList< Link* >(); } + + virtual QString text(const QRectF& rect) const { Q_UNUSED(rect); return QString(); } + virtual QString cachedText(const QRectF& rect) const { return text(rect); } + + virtual QList< QRectF > search(const QString& text, bool matchCase, bool wholeWords) const { Q_UNUSED(text); Q_UNUSED(matchCase); Q_UNUSED(wholeWords); return QList< QRectF >(); } + + virtual QList< Annotation* > annotations() const { return QList< Annotation* >(); } + + virtual bool canAddAndRemoveAnnotations() const { return false; } + virtual Annotation* addTextAnnotation(const QRectF& boundary, const QColor& color) { Q_UNUSED(boundary); Q_UNUSED(color); return 0; } + virtual Annotation* addHighlightAnnotation(const QRectF& boundary, const QColor& color) { Q_UNUSED(boundary); Q_UNUSED(color); return 0; } + virtual void removeAnnotation(Annotation* annotation) { Q_UNUSED(annotation); } + + virtual QList< FormField* > formFields() const { return QList< FormField* >(); } + + }; + + class Document + { + public: + virtual ~Document() {} + + virtual int numberOfPages() const = 0; + + virtual Page* page(int index) const = 0; + + virtual bool isLocked() const { return false; } + virtual bool unlock(const QString& password) { Q_UNUSED(password); return false; } + + virtual QStringList saveFilter() const { return QStringList(); } + + virtual bool canSave() const { return false; } + virtual bool save(const QString& filePath, bool withChanges) const { Q_UNUSED(filePath); Q_UNUSED(withChanges); return false; } + + virtual bool canBePrintedUsingCUPS() const { return false; } + + virtual void setPaperColor(const QColor& paperColor) { Q_UNUSED(paperColor); } + + enum + { + PageRole = Qt::UserRole + 1, + LeftRole, + TopRole, + FileNameRole, + ExpansionRole + }; + + virtual Outline outline() const { return Outline(); } + virtual Properties properties() const { return Properties(); } + + virtual QAbstractItemModel* fonts() const { return 0; } + + virtual bool wantsContinuousMode() const { return false; } + virtual bool wantsSinglePageMode() const { return false; } + virtual bool wantsTwoPagesMode() const { return false; } + virtual bool wantsTwoPagesWithCoverPageMode() const { return false; } + virtual bool wantsRightToLeftMode() const { return false; } + + }; +} + +class SettingsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsWidget(QWidget* parent = 0) : QWidget(parent) {} + + virtual void accept() = 0; + virtual void reset() = 0; + +}; + +class Plugin +{ +public: + virtual ~Plugin() {} + + virtual Model::Document* loadDocument(const QString& filePath) const = 0; + + virtual SettingsWidget* createSettingsWidget(QWidget* parent = 0) const { Q_UNUSED(parent); return 0; } + +}; + +} // qpdfview + +Q_DECLARE_INTERFACE(qpdfview::Plugin, "local.qpdfview.Plugin") + +#endif // DOCUMENTMODEL_H diff --git a/sources/pageitem.cpp b/sources/pageitem.cpp new file mode 100644 index 0000000..feb6424 --- /dev/null +++ b/sources/pageitem.cpp @@ -0,0 +1,1321 @@ +/* + +Copyright 2012-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "pageitem.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" +#include "model.h" +#include "tileitem.h" + +namespace qpdfview +{ + +namespace +{ + +const int largeTilesThreshold = 8; +const int veryLargeTilesThreshold = 16; + +const qreal proxyPadding = 2.0; + +inline bool modifiersAreActive(const QGraphicsSceneMouseEvent* event, Qt::KeyboardModifiers modifiers) +{ + if(modifiers == Qt::NoModifier) + { + return false; + } + + return event->modifiers() == modifiers || (event->buttons() & modifiers) != 0; +} + +inline bool modifiersUseMouseButton(Settings* settings, Qt::MouseButton mouseButton) +{ + return ((settings->pageItem().copyToClipboardModifiers() | settings->pageItem().addAnnotationModifiers()) & mouseButton) != 0; +} + +} // anonymous + +Settings* PageItem::s_settings = 0; + +PageItem::PageItem(Model::Page* page, int index, PaintMode paintMode, QGraphicsItem* parent) : QGraphicsObject(parent), + m_page(page), + m_size(page->size()), + m_cropRect(), + m_index(index), + m_paintMode(paintMode), + m_highlights(), + m_loadInteractiveElements(0), + m_links(), + m_annotations(), + m_formFields(), + m_rubberBandMode(ModifiersMode), + m_rubberBand(), + m_annotationOverlay(), + m_formFieldOverlay(), + m_renderParam(), + m_transform(), + m_normalizedTransform(), + m_boundingRect(), + m_tileItems() +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + setAcceptHoverEvents(true); + + setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, useTiling()); + + if(!useTiling()) + { + m_tileItems.resize(1); + m_tileItems.squeeze(); + + m_tileItems.replace(0, new TileItem(this)); + } + + prepareGeometry(); +} + +PageItem::~PageItem() +{ + if(m_loadInteractiveElements != 0) + { + m_loadInteractiveElements->waitForFinished(); + + delete m_loadInteractiveElements; + m_loadInteractiveElements = 0; + } + + hideAnnotationOverlay(false); + hideFormFieldOverlay(false); + + TileItem::dropCachedPixmaps(this); + + qDeleteAll(m_links); + qDeleteAll(m_annotations); + qDeleteAll(m_formFields); + + qDeleteAll(m_tileItems); +} + +QRectF PageItem::boundingRect() const +{ + if(m_cropRect.isNull()) + { + return m_boundingRect; + } + + QRectF boundingRect; + + boundingRect.setLeft(m_boundingRect.left() + m_cropRect.left() * m_boundingRect.width()); + boundingRect.setTop(m_boundingRect.top() + m_cropRect.top() * m_boundingRect.height()); + boundingRect.setWidth(m_cropRect.width() * m_boundingRect.width()); + boundingRect.setHeight(m_cropRect.height() * m_boundingRect.height()); + + return boundingRect; +} + +void PageItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget*) +{ + paintPage(painter, option->exposedRect); + + paintLinks(painter); + paintFormFields(painter); + + paintHighlights(painter); + paintRubberBand(painter); +} + +QSizeF PageItem::displayedSize(const RenderParam& renderParam) const +{ + const bool rotationChanged = m_renderParam.rotation() != renderParam.rotation(); + + const bool flagsChanged = m_renderParam.flags() != renderParam.flags(); + + const bool useCropRect = !m_cropRect.isNull() && !rotationChanged && !flagsChanged; + + const qreal cropWidth = useCropRect ? m_cropRect.width() : 1.0; + const qreal cropHeight = useCropRect ? m_cropRect.height() : 1.0; + + switch(renderParam.rotation()) + { + default: + case RotateBy0: + case RotateBy180: + return QSizeF(renderParam.resolutionX() / 72.0 * cropWidth * m_size.width(), + renderParam.resolutionY() / 72.0 * cropHeight * m_size.height()); + case RotateBy90: + case RotateBy270: + return QSizeF(renderParam.resolutionX() / 72.0 * cropHeight * m_size.height(), + renderParam.resolutionY() / 72.0 * cropWidth * m_size.width()); + } +} + +void PageItem::setHighlights(const QList< QRectF >& highlights) +{ + m_highlights = highlights; + + update(); +} + +void PageItem::setRubberBandMode(RubberBandMode rubberBandMode) +{ + if(m_rubberBandMode != rubberBandMode && rubberBandMode >= 0 && rubberBandMode < NumberOfRubberBandModes) + { + m_rubberBandMode = rubberBandMode; + + if(m_rubberBandMode == ModifiersMode) + { + unsetCursor(); + } + else + { + setCursor(Qt::CrossCursor); + } + } +} + +void PageItem::setRenderParam(const RenderParam& renderParam) +{ + if(m_renderParam != renderParam) + { + const bool resolutionChanged = m_renderParam.resolutionX() != renderParam.resolutionX() + || m_renderParam.resolutionY() != renderParam.resolutionY() + || !qFuzzyCompare(m_renderParam.devicePixelRatio(), renderParam.devicePixelRatio()) + || !qFuzzyCompare(m_renderParam.scaleFactor(), renderParam.scaleFactor()); + + const bool rotationChanged = m_renderParam.rotation() != renderParam.rotation(); + + const RenderFlags changedFlags = m_renderParam.flags() ^ renderParam.flags(); + + refresh(!rotationChanged && changedFlags == 0); + + m_renderParam = renderParam; + + if(resolutionChanged || rotationChanged) + { + prepareGeometryChange(); + prepareGeometry(); + } + + if(changedFlags.testFlag(TrimMargins)) + { + setFlag(QGraphicsItem::ItemClipsToShape, m_renderParam.trimMargins()); + } + } +} + +void PageItem::refresh(bool keepObsoletePixmaps, bool dropCachedPixmaps) +{ + if(!useTiling()) + { + m_tileItems.first()->refresh(keepObsoletePixmaps); + } + else + { + foreach(TileItem* tile, m_tileItems) + { + tile->refresh(keepObsoletePixmaps); + } + } + + if(!keepObsoletePixmaps) + { + prepareGeometryChange(); + + m_cropRect = QRectF(); + } + + if(dropCachedPixmaps) + { + TileItem::dropCachedPixmaps(this); + } + + update(); +} + +int PageItem::startRender(bool prefetch) +{ + int cost = 0; + + if(!useTiling()) + { + cost += m_tileItems.first()->startRender(prefetch); + } + else + { + foreach(TileItem* tile, m_tileItems) + { + cost += tile->startRender(prefetch); + } + } + + return cost; +} + +void PageItem::cancelRender() +{ + if(!useTiling()) + { + m_tileItems.first()->cancelRender(); + } + else + { + foreach(TileItem* tile, m_exposedTileItems) + { + tile->cancelRender(); + } + + m_exposedTileItems.clear(); + } +} + +void PageItem::showAnnotationOverlay(Model::Annotation* selectedAnnotation) +{ + if(s_settings->pageItem().annotationOverlay()) + { + showOverlay(m_annotationOverlay, SLOT(hideAnnotationOverlay()), m_annotations, selectedAnnotation); + } + else + { + hideAnnotationOverlay(false); + + addProxy(m_annotationOverlay, SLOT(hideAnnotationOverlay()), selectedAnnotation); + m_annotationOverlay.value(selectedAnnotation)->widget()->setFocus(); + } +} + +void PageItem::hideAnnotationOverlay(bool deleteLater) +{ + hideOverlay(m_annotationOverlay, deleteLater); +} + +void PageItem::updateAnnotationOverlay() +{ + updateOverlay(m_annotationOverlay); +} + +void PageItem::showFormFieldOverlay(Model::FormField* selectedFormField) +{ + if(s_settings->pageItem().formFieldOverlay()) + { + showOverlay(m_formFieldOverlay, SLOT(hideFormFieldOverlay()), m_formFields, selectedFormField); + } + else + { + hideFormFieldOverlay(false); + + addProxy(m_formFieldOverlay, SLOT(hideFormFieldOverlay()), selectedFormField); + m_formFieldOverlay.value(selectedFormField)->widget()->setFocus(); + } +} + +void PageItem::updateFormFieldOverlay() +{ + updateOverlay(m_formFieldOverlay); +} + +void PageItem::hideFormFieldOverlay(bool deleteLater) +{ + hideOverlay(m_formFieldOverlay, deleteLater); +} + +void PageItem::hoverEnterEvent(QGraphicsSceneHoverEvent*) +{ +} + +void PageItem::hoverMoveEvent(QGraphicsSceneHoverEvent* event) +{ + if(m_rubberBandMode == ModifiersMode && event->modifiers() == Qt::NoModifier) + { + // links + + foreach(const Model::Link* link, m_links) + { + if(m_normalizedTransform.map(link->boundary).contains(event->pos())) + { + if(link->page != -1 && (link->urlOrFileName.isNull() || !presentationMode())) + { + setCursor(Qt::PointingHandCursor); + + if(link->urlOrFileName.isNull()) + { + QToolTip::showText(event->screenPos(), tr("Go to page %1.").arg(link->page)); + } + else + { + QToolTip::showText(event->screenPos(), tr("Go to page %1 of file '%2'.").arg(link->page).arg(link->urlOrFileName)); + } + + return; + } + else if(!link->urlOrFileName.isNull() && !presentationMode()) + { + setCursor(Qt::PointingHandCursor); + QToolTip::showText(event->screenPos(), tr("Open '%1'.").arg(link->urlOrFileName)); + + return; + } + } + } + + if(presentationMode()) + { + unsetCursor(); + QToolTip::hideText(); + + return; + } + + // annotations + + foreach(const Model::Annotation* annotation, m_annotations) + { + if(m_normalizedTransform.mapRect(annotation->boundary()).contains(event->pos())) + { + setCursor(Qt::PointingHandCursor); + QToolTip::showText(event->screenPos(), annotation->contents()); + + return; + } + } + + // form fields + + foreach(const Model::FormField* formField, m_formFields) + { + if(m_normalizedTransform.mapRect(formField->boundary()).contains(event->pos())) + { + setCursor(Qt::PointingHandCursor); + QToolTip::showText(event->screenPos(), tr("Edit form field '%1'.").arg(formField->name())); + + return; + } + } + + unsetCursor(); + QToolTip::hideText(); + } +} + +void PageItem::hoverLeaveEvent(QGraphicsSceneHoverEvent*) +{ +} + +void PageItem::mousePressEvent(QGraphicsSceneMouseEvent* event) +{ + const bool leftButtonActive = event->button() == Qt::LeftButton; + const bool middleButtonActive = event->button() == Qt::MidButton; + const bool anyButtonActive = leftButtonActive || middleButtonActive; + + const bool noModifiersActive = event->modifiers() == Qt::NoModifier; + const bool copyToClipboardModifiersActive = modifiersAreActive(event, s_settings->pageItem().copyToClipboardModifiers()); + const bool addAnnotationModifiersActive = modifiersAreActive(event, s_settings->pageItem().addAnnotationModifiers()); + const bool zoomToSelectionModifiersActive = modifiersAreActive(event, s_settings->pageItem().zoomToSelectionModifiers()); + const bool rubberBandModifiersActive = copyToClipboardModifiersActive || addAnnotationModifiersActive || zoomToSelectionModifiersActive; + const bool openInSourceEditorModifiersActive = modifiersAreActive(event, s_settings->pageItem().openInSourceEditorModifiers()); + + // rubber band + + if(rubberBandModifiersActive && leftButtonActive && !presentationMode()) + { + if(m_rubberBandMode == ModifiersMode) + { + setCursor(Qt::CrossCursor); + + if(copyToClipboardModifiersActive) + { + m_rubberBandMode = CopyToClipboardMode; + } + else if(addAnnotationModifiersActive) + { + m_rubberBandMode = AddAnnotationMode; + } + else if(zoomToSelectionModifiersActive) + { + m_rubberBandMode = ZoomToSelectionMode; + } + } + } + + if(m_rubberBandMode != ModifiersMode) + { + m_rubberBand = QRectF(event->pos(), QSizeF()); + + emit rubberBandStarted(); + + update(); + + event->accept(); + return; + } + + if(openInSourceEditorModifiersActive && leftButtonActive && !presentationMode()) + { + emit openInSourceEditor(m_index + 1, sourcePos(event->pos())); + + event->accept(); + return; + } + + if(noModifiersActive && anyButtonActive) + { + // links + + foreach(const Model::Link* link, m_links) + { + if(m_normalizedTransform.map(link->boundary).contains(event->pos())) + { + unsetCursor(); + + if(link->page != -1 && (link->urlOrFileName.isNull() || !presentationMode())) + { + if(link->urlOrFileName.isNull()) + { + emit linkClicked(middleButtonActive, link->page, link->left, link->top); + } + else + { + emit linkClicked(middleButtonActive, link->urlOrFileName, link->page); + } + + event->accept(); + return; + } + else if(!link->urlOrFileName.isNull() && !presentationMode()) + { + emit linkClicked(link->urlOrFileName); + + event->accept(); + return; + } + } + } + } + + if(noModifiersActive && leftButtonActive && !presentationMode()) + { + // annotations + + foreach(Model::Annotation* annotation, m_annotations) + { + if(m_normalizedTransform.mapRect(annotation->boundary()).contains(event->pos())) + { + unsetCursor(); + + showAnnotationOverlay(annotation); + + event->accept(); + return; + } + } + + hideAnnotationOverlay(); + + // form fields + + foreach(Model::FormField* formField, m_formFields) + { + if(m_normalizedTransform.mapRect(formField->boundary()).contains(event->pos())) + { + unsetCursor(); + + showFormFieldOverlay(formField); + + event->accept(); + return; + } + } + + hideFormFieldOverlay(); + } + + event->ignore(); +} + +void PageItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) +{ + if(!m_rubberBand.isNull()) + { + if(m_boundingRect.contains(event->pos())) + { + m_rubberBand.setBottomRight(event->pos()); + + update(); + + event->accept(); + return; + } + } + + event->ignore(); +} + +void PageItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) +{ + if(!m_rubberBand.isNull()) + { + unsetCursor(); + + m_rubberBand = m_rubberBand.normalized(); + + if(m_rubberBandMode == CopyToClipboardMode) + { + copyToClipboard(event->screenPos()); + } + else if(m_rubberBandMode == AddAnnotationMode) + { + addAnnotation(event->screenPos()); + } + else if(m_rubberBandMode == ZoomToSelectionMode) + { + emit zoomToSelection(m_index + 1, m_normalizedTransform.inverted().mapRect(m_rubberBand)); + } + + m_rubberBandMode = ModifiersMode; + m_rubberBand = QRectF(); + + emit rubberBandFinished(); + + update(); + + event->accept(); + return; + } + + event->ignore(); +} + +void PageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent* event) +{ + if(event->reason() == QGraphicsSceneContextMenuEvent::Mouse && modifiersUseMouseButton(s_settings, Qt::RightButton)) + { + event->accept(); + return; + } + + if(presentationMode()) + { + event->ignore(); + return; + } + + foreach(Model::Link* link, m_links) + { + if(m_normalizedTransform.map(link->boundary).contains(event->pos())) + { + unsetCursor(); + + showLinkContextMenu(link, event->screenPos()); + + event->accept(); + return; + } + } + + foreach(Model::Annotation* annotation, m_annotations) + { + if(m_normalizedTransform.mapRect(annotation->boundary()).contains(event->pos())) + { + unsetCursor(); + + showAnnotationContextMenu(annotation, event->screenPos()); + + event->accept(); + return; + } + } + + event->ignore(); +} + +void PageItem::on_loadInteractiveElements_finished() +{ + update(); +} + +void PageItem::updateCropRect() +{ + QRectF cropRect; + + if(!useTiling()) + { + cropRect = m_tileItems.first()->cropRect(); + } + else + { + foreach(TileItem* tile, m_tileItems) + { + const QRect& tileRect = tile->rect(); + const QRectF& tileCropRect = tile->cropRect(); + + if(tileCropRect.isNull()) + { + cropRect = QRectF(); + break; + } + + const qreal left = (tileRect.left() + tileCropRect.left() * tileRect.width()) / m_boundingRect.width(); + const qreal top = (tileRect.top() + tileCropRect.top() * tileRect.height()) / m_boundingRect.height(); + const qreal width = tileCropRect.width() * tileRect.width() / m_boundingRect.width(); + const qreal height = tileCropRect.height() * tileRect.height() / m_boundingRect.height(); + + cropRect = cropRect.united(QRectF(left, top, width, height)); + } + } + + if(m_cropRect.isNull() && !cropRect.isNull()) + { + prepareGeometryChange(); + + m_cropRect = cropRect; + + emit cropRectChanged(); + } +} + +inline bool PageItem::presentationMode() const +{ + return m_paintMode == PresentationMode; +} + +inline bool PageItem::thumbnailMode() const +{ + return m_paintMode == ThumbnailMode; +} + +bool PageItem::useTiling() const +{ + return m_paintMode != ThumbnailMode && s_settings->pageItem().useTiling(); +} + +void PageItem::startLoadInteractiveElements() +{ + if(thumbnailMode() || m_loadInteractiveElements != 0) + { + return; + } + + m_loadInteractiveElements = new QFutureWatcher< void >(this); + connect(m_loadInteractiveElements, SIGNAL(finished()), SLOT(on_loadInteractiveElements_finished())); + m_loadInteractiveElements->setFuture(QtConcurrent::run(this, &PageItem::loadInteractiveElements)); +} + +void PageItem::loadInteractiveElements() +{ + m_links = m_page->links(); + + if(presentationMode()) + { + return; + } + + PageItem* const parent = this; + QThread* const parentThread = parent->thread(); + + const QList< Model::Annotation* > annotations = m_page->annotations(); + + foreach(Model::Annotation* annotation, annotations) + { + annotation->moveToThread(parentThread); + connect(annotation, SIGNAL(wasModified()), parent, SIGNAL(wasModified())); + } + + m_annotations = annotations; + + const QList< Model::FormField* > formFields = m_page->formFields(); + + foreach(Model::FormField* formField, formFields) + { + formField->moveToThread(parentThread); + connect(formField, SIGNAL(wasModified()), parent, SIGNAL(wasModified())); + } + + m_formFields = formFields; +} + +void PageItem::copyToClipboard(QPoint screenPos) +{ + QMenu menu; + + QAction* copyTextAction = menu.addAction(tr("Copy &text")); + QAction* selectTextAction = menu.addAction(tr("&Select text")); + const QAction* copyImageAction = menu.addAction(tr("Copy &image")); + const QAction* saveImageToFileAction = menu.addAction(tr("Save image to &file...")); + + const QString text = m_page->text(m_transform.inverted().mapRect(m_rubberBand)); + + copyTextAction->setVisible(!text.isEmpty()); + selectTextAction->setVisible(!text.isEmpty() && QApplication::clipboard()->supportsSelection()); + + const QAction* action = menu.exec(screenPos); + + if(action == copyTextAction || action == selectTextAction) + { + if(action == copyTextAction) + { + QApplication::clipboard()->setText(text); + } + else + { + QApplication::clipboard()->setText(text, QClipboard::Selection); + } + } + else if(action == copyImageAction || action == saveImageToFileAction) + { + const QRect rect = m_rubberBand.translated(-m_boundingRect.topLeft()).toRect(); + const QImage image = m_page->render(m_renderParam.resolutionX() * m_renderParam.scaleFactor(), + m_renderParam.resolutionY() * m_renderParam.scaleFactor(), + m_renderParam.rotation(), rect); + + if(!image.isNull()) + { + if(action == copyImageAction) + { + QApplication::clipboard()->setImage(image); + } + else if(action == saveImageToFileAction) + { + const QString fileName = QFileDialog::getSaveFileName(0, tr("Save image to file"), QDir::homePath(), "Portable network graphics (*.png)"); + + if(!image.save(fileName, "PNG")) + { + QMessageBox::warning(0, tr("Warning"), tr("Could not save image to file '%1'.").arg(fileName)); + } + } + } + } +} + +void PageItem::addAnnotation(QPoint screenPos) +{ + if(m_page->canAddAndRemoveAnnotations()) + { + QMenu menu; + + const QAction* addTextAction = menu.addAction(tr("Add &text")); + const QAction* addHighlightAction = menu.addAction(tr("Add &highlight")); + + const QAction* action = menu.exec(screenPos); + + if(action == addTextAction || action == addHighlightAction) + { + QRectF boundary = m_normalizedTransform.inverted().mapRect(m_rubberBand); + + Model::Annotation* annotation = 0; + + if(action == addTextAction) + { + boundary.setWidth(24.0 / m_size.width()); + boundary.setHeight(24.0 / m_size.height()); + + annotation = m_page->addTextAnnotation(boundary, s_settings->pageItem().annotationColor()); + } + else if(action == addHighlightAction) + { + annotation = m_page->addHighlightAnnotation(boundary, s_settings->pageItem().annotationColor()); + } + + m_annotations.append(annotation); + connect(annotation, SIGNAL(wasModified()), SIGNAL(wasModified())); + + refresh(false, true); + emit wasModified(); + + if(action == addTextAction) + { + showAnnotationOverlay(annotation); + } + } + } +} + +void PageItem::showLinkContextMenu(Model::Link* link, QPoint screenPos) +{ + if(link->page == -1) + { + QMenu menu; + + const QAction* copyLinkAddressAction = menu.addAction(tr("&Copy link address")); + QAction* selectLinkAddressAction = menu.addAction(tr("&Select link address")); + + selectLinkAddressAction->setVisible(QApplication::clipboard()->supportsSelection()); + + const QAction* action = menu.exec(screenPos); + + if(action == copyLinkAddressAction) + { + QApplication::clipboard()->setText(link->urlOrFileName); + } + else if(action == selectLinkAddressAction) + { + QApplication::clipboard()->setText(link->urlOrFileName, QClipboard::Selection); + } + } +} + +void PageItem::showAnnotationContextMenu(Model::Annotation* annotation, QPoint screenPos) +{ + if(m_page->canAddAndRemoveAnnotations()) + { + QMenu menu; + + const QAction* removeAnnotationAction = menu.addAction(tr("&Remove annotation")); + + const QAction* action = menu.exec(screenPos); + + if(action == removeAnnotationAction) + { + m_annotations.removeAll(annotation); + m_page->removeAnnotation(annotation); + + annotation->deleteLater(); + + refresh(false, true); + emit wasModified(); + } + } +} + +template< typename Overlay, typename Element > +void PageItem::showOverlay(Overlay& overlay, const char* hideOverlay, const QList< Element* >& elements, Element* selectedElement) +{ + foreach(Element* element, elements) + { + if(!overlay.contains(element)) + { + addProxy(overlay, hideOverlay, element); + } + + if(element == selectedElement) + { + overlay.value(element)->widget()->setFocus(); + } + } +} + +template< typename Overlay, typename Element > +void PageItem::addProxy(Overlay& overlay, const char* hideOverlay, Element* element) +{ + QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget(this); + proxy->setWidget(element->createWidget()); + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + proxy->setAutoFillBackground(true); + +#endif // QT_VERSION + + overlay.insert(element, proxy); + setProxyGeometry(element, proxy); + + connect(proxy, SIGNAL(visibleChanged()), hideOverlay); +} + +template< typename Overlay > +void PageItem::hideOverlay(Overlay& overlay, bool deleteLater) +{ +#if QT_VERSION >= QT_VERSION_CHECK(4,8,0) + + Overlay discardedOverlay; + discardedOverlay.swap(overlay); + +#else + + Overlay discardedOverlay(overlay); + overlay = Overlay(); + +#endif // QT_VERSION + + if(!discardedOverlay.isEmpty()) + { + for(typename Overlay::const_iterator i = discardedOverlay.constBegin(); i != discardedOverlay.constEnd(); ++i) + { + if(deleteLater) + { + i.value()->deleteLater(); + } + else + { + delete i.value(); + } + } + + refresh(false, true); + } +} + +template< typename Overlay > +void PageItem::updateOverlay(const Overlay& overlay) const +{ + for(typename Overlay::const_iterator i = overlay.constBegin(); i != overlay.constEnd(); ++i) + { + setProxyGeometry(i.key(), i.value()); + } +} + +void PageItem::setProxyGeometry(Model::Annotation* annotation, QGraphicsProxyWidget* proxy) const +{ + const QPointF center = m_normalizedTransform.map(annotation->boundary().center()); + + qreal x = center.x() - 0.5 * proxy->preferredWidth(); + qreal y = center.y() - 0.5 * proxy->preferredHeight(); + qreal width = proxy->preferredWidth(); + qreal height = proxy->preferredHeight(); + + x = qMax(x, m_boundingRect.left() + proxyPadding); + y = qMax(y, m_boundingRect.top() + proxyPadding); + + width = qMin(width, m_boundingRect.right() - proxyPadding - x); + height = qMin(height, m_boundingRect.bottom() - proxyPadding - y); + + proxy->setGeometry(QRectF(x, y, width, height)); +} + +void PageItem::setProxyGeometry(Model::FormField* formField, QGraphicsProxyWidget* proxy) const +{ + QRectF rect = m_normalizedTransform.mapRect(formField->boundary()); + + qreal x = rect.x(); + qreal y = rect.y(); + qreal width = rect.width(); + qreal height = rect.height(); + + switch(m_renderParam.rotation()) + { + default: + case RotateBy0: + proxy->setRotation(0.0); + break; + case RotateBy90: + x += width; + qSwap(width, height); + + proxy->setRotation(90.0); + break; + case RotateBy180: + x += width; + y += height; + + proxy->setRotation(180.0); + break; + case RotateBy270: + y += height; + qSwap(width, height); + + proxy->setRotation(270.0); + break; + } + + width /= m_renderParam.scaleFactor(); + height /= m_renderParam.scaleFactor(); + + proxy->setScale(m_renderParam.scaleFactor()); + + proxy->setGeometry(QRectF(x - proxyPadding, y - proxyPadding, width + proxyPadding, height + proxyPadding)); +} + +void PageItem::prepareGeometry() +{ + m_transform.reset(); + + m_transform.scale(m_renderParam.resolutionX() * m_renderParam.scaleFactor() / 72.0, + m_renderParam.resolutionY() * m_renderParam.scaleFactor() / 72.0); + + switch(m_renderParam.rotation()) + { + default: + case RotateBy0: + break; + case RotateBy90: + m_transform.rotate(90.0); + break; + case RotateBy180: + m_transform.rotate(180.0); + break; + case RotateBy270: + m_transform.rotate(270.0); + break; + } + + m_normalizedTransform = m_transform; + m_normalizedTransform.scale(m_size.width(), m_size.height()); + + + m_boundingRect = m_transform.mapRect(QRectF(QPointF(), m_size)); + + m_boundingRect.setWidth(qRound(m_boundingRect.width())); + m_boundingRect.setHeight(qRound(m_boundingRect.height())); + + + prepareTiling(); + + updateAnnotationOverlay(); + updateFormFieldOverlay(); +} + +void PageItem::prepareTiling() +{ + if(!useTiling()) + { + m_tileItems.first()->setRect(QRect(0, 0, m_boundingRect.width(), m_boundingRect.height())); + + return; + } + + + const qreal pageWidth = m_boundingRect.width(); + const qreal pageHeight = m_boundingRect.height(); + const qreal pageSize = qMax(pageWidth, pageHeight); + + int tileSize = s_settings->pageItem().tileSize(); + + if(tileSize * veryLargeTilesThreshold < pageSize) + { + tileSize *= 4; + } + else if(tileSize * largeTilesThreshold < pageSize) + { + tileSize *= 2; + } + + int tileWidth = pageWidth < pageHeight ? tileSize * pageWidth / pageHeight : tileSize; + int tileHeight = pageHeight < pageWidth ? tileSize * pageHeight / pageWidth : tileSize; + + const int columnCount = qCeil(pageWidth / tileWidth); + const int rowCount = qCeil(pageHeight / tileHeight); + + tileWidth = qCeil(pageWidth / columnCount); + tileHeight = qCeil(pageHeight / rowCount); + + + const int newCount = columnCount * rowCount; + const int oldCount = m_tileItems.count(); + + if(oldCount != newCount) + { + for(int index = newCount; index < oldCount; ++index) + { + m_tileItems.at(index)->deleteAfterRender(); + } + + m_tileItems.resize(newCount); + + for(int index = oldCount; index < newCount; ++index) + { + m_tileItems.replace(index, new TileItem(this)); + } + + foreach(TileItem* tile, m_tileItems) + { + tile->dropObsoletePixmap(); + } + } + + m_exposedTileItems.clear(); + + + for(int column = 0; column < columnCount; ++column) + { + for(int row = 0; row < rowCount; ++row) + { + const int left = column > 0 ? column * tileWidth : 0.0; + const int top = row > 0 ? row * tileHeight : 0.0; + + const int width = column < (columnCount - 1) ? tileWidth : pageWidth - left; + const int height = row < (rowCount - 1) ? tileHeight : pageHeight - top; + + m_tileItems.at(column * rowCount + row)->setRect(QRect(left, top, width, height)); + } + } +} + +inline void PageItem::paintPage(QPainter* painter, const QRectF& exposedRect) const +{ + if(s_settings->pageItem().decoratePages() && !presentationMode()) + { + // background + + QColor paperColor = s_settings->pageItem().paperColor(); + + if(m_renderParam.invertColors()) + { + paperColor.setRgb(~paperColor.rgb()); + } + + painter->fillRect(m_boundingRect, QBrush(paperColor)); + } + + // tiles + + if(!useTiling()) + { + TileItem* tile = m_tileItems.first(); + + if(tile->paint(painter, m_boundingRect.topLeft())) + { + tile->dropPixmap(); + } + } + else + { + const QRectF& translatedExposedRect = exposedRect.translated(-m_boundingRect.topLeft()); + + foreach(TileItem* tile, m_tileItems) + { + const bool intersects = translatedExposedRect.intersects(tile->rect()); + const bool contains = m_exposedTileItems.contains(tile); + + if(intersects && !contains) + { + m_exposedTileItems.insert(tile); + } + else if(!intersects && contains) + { + m_exposedTileItems.remove(tile); + + tile->cancelRender(); + } + } + + bool allExposedPainted = true; + + foreach(TileItem* tile, m_exposedTileItems) + { + if(!tile->paint(painter, m_boundingRect.topLeft())) + { + allExposedPainted = false; + } + } + + if(allExposedPainted) + { + foreach(TileItem* tile, m_exposedTileItems) + { + tile->dropPixmap(); + } + } + } + + if(s_settings->pageItem().decoratePages() && !presentationMode()) + { + // border + + painter->save(); + + painter->setClipping(false); + + painter->drawRect(m_renderParam.trimMargins() ? PageItem::boundingRect() : PageItem::uncroppedBoundingRect()); + + painter->restore(); + } +} + +inline void PageItem::paintLinks(QPainter* painter) const +{ + if(s_settings->pageItem().decorateLinks() && !presentationMode() && !m_links.isEmpty()) + { + painter->save(); + + painter->setTransform(m_normalizedTransform, true); + painter->setPen(QPen(Qt::red, 0.0)); + + foreach(const Model::Link* link, m_links) + { + painter->drawPath(link->boundary); + } + + painter->restore(); + } +} + +inline void PageItem::paintFormFields(QPainter* painter) const +{ + if(s_settings->pageItem().decorateFormFields() && !presentationMode() && !m_formFields.isEmpty()) + { + painter->save(); + + painter->setTransform(m_normalizedTransform, true); + painter->setPen(QPen(Qt::blue, 0.0)); + + foreach(const Model::FormField* formField, m_formFields) + { + painter->drawRect(formField->boundary()); + } + + painter->restore(); + } +} + +inline void PageItem::paintHighlights(QPainter* painter) const +{ + if(!m_highlights.isEmpty()) + { + painter->save(); + + painter->setTransform(m_transform, true); + painter->setPen(QPen(s_settings->pageItem().highlightColor(), 0.0)); + painter->setBrush(QBrush(s_settings->pageItem().highlightColor())); + painter->setCompositionMode(QPainter::CompositionMode_Multiply); + + foreach(const QRectF highlight, m_highlights) + { + painter->drawRect(highlight.normalized()); + } + + painter->restore(); + } +} + +inline void PageItem::paintRubberBand(QPainter* painter) const +{ + if(!m_rubberBand.isNull()) + { + painter->save(); + + painter->setPen(QPen(Qt::white, 0.0, Qt::DashLine)); + painter->setCompositionMode(QPainter::CompositionMode_Difference); + + painter->drawRect(m_rubberBand); + + painter->restore(); + } +} + +} // qpdfview diff --git a/sources/pageitem.h b/sources/pageitem.h new file mode 100644 index 0000000..09f81fc --- /dev/null +++ b/sources/pageitem.h @@ -0,0 +1,228 @@ +/* + +Copyright 2012-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PAGEITEM_H +#define PAGEITEM_H + +#include +#include +#include +#include +#include + +class QGraphicsProxyWidget; + +#include "renderparam.h" + +namespace qpdfview +{ + +namespace Model +{ +struct Link; +class Annotation; +class FormField; +class Page; +} + +class Settings; +class RenderTask; +class TileItem; + +class PageItem : public QGraphicsObject +{ + Q_OBJECT + + friend class TileItem; + +public: + enum PaintMode + { + DefaultMode, + PresentationMode, + ThumbnailMode + }; + + PageItem(Model::Page* page, int index, PaintMode paintMode = DefaultMode, QGraphicsItem* parent = 0); + ~PageItem(); + + const QRectF& uncroppedBoundingRect() const { return m_boundingRect; } + + QRectF boundingRect() const; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget*); + + int index() const { return m_index; } + + const QSizeF& size() const { return m_size; } + + QSizeF displayedSize() const { return displayedSize(renderParam()); } + QSizeF displayedSize(const RenderParam& renderParam) const; + + const QList< QRectF >& highlights() const { return m_highlights; } + void setHighlights(const QList< QRectF >& highlights); + + RubberBandMode rubberBandMode() const { return m_rubberBandMode; } + void setRubberBandMode(RubberBandMode rubberBandMode); + + bool showsAnnotationOverlay() const { return !m_annotationOverlay.isEmpty(); } + bool showsFormFieldOverlay() const { return !m_formFieldOverlay.isEmpty(); } + + const RenderParam& renderParam() const { return m_renderParam; } + void setRenderParam(const RenderParam& renderParam); + + const QTransform& transform() const { return m_transform; } + const QTransform& normalizedTransform() const { return m_normalizedTransform; } + + QPointF sourcePos(QPointF point) const { return m_transform.inverted().map(point); } + QPointF normalizedSourcePos(QPointF point) const { return m_normalizedTransform.inverted().map(point); } + +signals: + void cropRectChanged(); + + void linkClicked(bool newTab, int page, qreal left = qQNaN(), qreal top = qQNaN()); + void linkClicked(bool newTab, const QString& fileName, int page); + void linkClicked(const QString& url); + + void rubberBandStarted(); + void rubberBandFinished(); + + void zoomToSelection(int page, const QRectF& rect); + void openInSourceEditor(int page, QPointF pos); + + void wasModified(); + +public slots: + void refresh(bool keepObsoletePixmaps = false, bool dropCachedPixmaps = false); + + int startRender(bool prefetch = false); + void cancelRender(); + +protected slots: + void showAnnotationOverlay(Model::Annotation* selectedAnnotation); + void hideAnnotationOverlay(bool deleteLater = true); + void updateAnnotationOverlay(); + + void showFormFieldOverlay(Model::FormField* selectedFormField); + void hideFormFieldOverlay(bool deleteLater = true); + void updateFormFieldOverlay(); + +protected: + void hoverEnterEvent(QGraphicsSceneHoverEvent*); + void hoverMoveEvent(QGraphicsSceneHoverEvent* event); + void hoverLeaveEvent(QGraphicsSceneHoverEvent*); + + void mousePressEvent(QGraphicsSceneMouseEvent* event); + void mouseMoveEvent(QGraphicsSceneMouseEvent* event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent* event); + + void contextMenuEvent(QGraphicsSceneContextMenuEvent* event); + +private slots: + void on_loadInteractiveElements_finished(); + +private: + Q_DISABLE_COPY(PageItem) + + static Settings* s_settings; + + Model::Page* m_page; + QSizeF m_size; + + QRectF m_cropRect; + + void updateCropRect(); + + int m_index; + PaintMode m_paintMode; + + bool presentationMode() const; + bool thumbnailMode() const; + + bool useTiling() const; + + QList< QRectF > m_highlights; + + // interactive elements + + QFutureWatcher< void >* m_loadInteractiveElements; + + void startLoadInteractiveElements(); + void loadInteractiveElements(); + + QList< Model::Link* > m_links; + QList< Model::Annotation* > m_annotations; + QList< Model::FormField* > m_formFields; + + RubberBandMode m_rubberBandMode; + QRectF m_rubberBand; + + void copyToClipboard(QPoint screenPos); + void addAnnotation(QPoint screenPos); + + void showLinkContextMenu(Model::Link* link, QPoint screenPos); + void showAnnotationContextMenu(Model::Annotation* annotation, QPoint screenPos); + + // overlay + + typedef QMap< Model::Annotation*, QGraphicsProxyWidget* > AnnotationOverlay; + AnnotationOverlay m_annotationOverlay; + + typedef QMap< Model::FormField*, QGraphicsProxyWidget* > FormFieldOverlay; + FormFieldOverlay m_formFieldOverlay; + + template< typename Overlay, typename Element > void showOverlay(Overlay& overlay, const char* hideOverlay, const QList< Element* >& elements, Element* selectedElement); + template< typename Overlay, typename Element > void addProxy(Overlay& overlay, const char* hideOverlay, Element* element); + template< typename Overlay > void hideOverlay(Overlay& overlay, bool deleteLater); + template< typename Overlay > void updateOverlay(const Overlay& overlay) const; + + void setProxyGeometry(Model::Annotation* annotation, QGraphicsProxyWidget* proxy) const; + void setProxyGeometry(Model::FormField* formField, QGraphicsProxyWidget* proxy) const; + + // geometry + + RenderParam m_renderParam; + + QTransform m_transform; + QTransform m_normalizedTransform; + QRectF m_boundingRect; + + void prepareGeometry(); + + QVector< TileItem* > m_tileItems; + mutable QSet< TileItem* > m_exposedTileItems; + + void prepareTiling(); + + // paint + + void paintPage(QPainter* painter, const QRectF& exposedRect) const; + + void paintLinks(QPainter* painter) const; + void paintFormFields(QPainter* painter) const; + + void paintHighlights(QPainter* painter) const; + void paintRubberBand(QPainter* painter) const; + +}; + +} // qpdfview + +#endif // PAGEITEM_H diff --git a/sources/pdfmodel.cpp b/sources/pdfmodel.cpp new file mode 100644 index 0000000..c38e156 --- /dev/null +++ b/sources/pdfmodel.cpp @@ -0,0 +1,1333 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2018 Marshall Banana +Copyright 2013-2014, 2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "pdfmodel.h" + +#include +#include +#include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#else + +#include + +#endif // QT_VERSION + +#include + +#include "annotationwidgets.h" +#include "formfieldwidgets.h" + +#ifndef HAS_POPPLER_24 + +#define LOCK_ANNOTATION QMutexLocker mutexLocker(m_mutex); +#define LOCK_FORM_FIELD QMutexLocker mutexLocker(m_mutex); +#define LOCK_PAGE QMutexLocker mutexLocker(m_mutex); +#define LOCK_DOCUMENT QMutexLocker mutexLocker(&m_mutex); + +#else + +#define LOCK_ANNOTATION +#define LOCK_FORM_FIELD +#define LOCK_PAGE +#define LOCK_DOCUMENT + +#endif // HAS_POPPLER_24 + +namespace +{ + +using namespace qpdfview; +using namespace qpdfview::Model; + +Outline loadOutline(const QDomNode& parent, Poppler::Document* document) +{ + Outline outline; + + const QDomNodeList nodes = parent.childNodes(); + + outline.reserve(nodes.size()); + + for(int index = 0, count = nodes.size(); index < count; ++index) + { + const QDomNode node = nodes.at(index); + const QDomElement element = node.toElement(); + + outline.push_back(Section()); + Section& section = outline.back(); + section.title = element.tagName(); + + QScopedPointer< Poppler::LinkDestination > destination; + + if(element.hasAttribute("Destination")) + { + destination.reset(new Poppler::LinkDestination(element.attribute("Destination"))); + } + else if(element.hasAttribute("DestinationName")) + { + destination.reset(document->linkDestination(element.attribute("DestinationName"))); + } + + if(destination) + { + int page = destination->pageNumber(); + qreal left = qQNaN(); + qreal top = qQNaN(); + + page = page >= 1 ? page : 1; + page = page <= document->numPages() ? page : document->numPages(); + + if(destination->isChangeLeft()) + { + left = destination->left(); + + left = left >= 0.0 ? left : 0.0; + left = left <= 1.0 ? left : 1.0; + } + + if(destination->isChangeTop()) + { + top = destination->top(); + + top = top >= 0.0 ? top : 0.0; + top = top <= 1.0 ? top : 1.0; + } + + Link& link = section.link; + link.page = page; + link.left = left; + link.top = top; + + const QString fileName = element.attribute("ExternalFileName"); + + if(!fileName.isEmpty()) + { + link.urlOrFileName = fileName; + } + } + + if(node.hasChildNodes()) + { + section.children = loadOutline(node, document); + } + } + + return outline; +} + +class FontsModel : public QAbstractTableModel +{ +public: + FontsModel(const QList< Poppler::FontInfo >& fonts) : + m_fonts(fonts) + { + } + + int columnCount(const QModelIndex&) const + { + return 5; + } + + int rowCount(const QModelIndex& parent) const + { + if(parent.isValid()) + { + return 0; + } + + return m_fonts.size(); + } + + QVariant headerData(int section, Qt::Orientation orientation, int role) const + { + if(orientation != Qt::Horizontal || role != Qt::DisplayRole) + { + return QVariant(); + } + + switch(section) + { + case 0: + return PdfDocument::tr("Name"); + case 1: + return PdfDocument::tr("Type"); + case 2: + return PdfDocument::tr("Embedded"); + case 3: + return PdfDocument::tr("Subset"); + case 4: + return PdfDocument::tr("File"); + default: + return QVariant(); + } + } + + QVariant data(const QModelIndex& index, int role) const + { + if(!index.isValid() || role != Qt::DisplayRole) + { + return QVariant(); + } + + const Poppler::FontInfo& font = m_fonts[index.row()]; + + switch (index.column()) + { + case 0: + return font.name(); + case 1: + return font.typeName(); + case 2: + return font.isEmbedded() ? PdfDocument::tr("Yes") : PdfDocument::tr("No"); + case 3: + return font.isSubset() ? PdfDocument::tr("Yes") : PdfDocument::tr("No"); + case 4: + return font.file(); + default: + return QVariant(); + } + } + +private: + const QList< Poppler::FontInfo > m_fonts; + +}; + +inline void restoreRenderHint(Poppler::Document* document, const Poppler::Document::RenderHints hints, const Poppler::Document::RenderHint hint) +{ + document->setRenderHint(hint, hints.testFlag(hint)); +} + +typedef QSharedPointer< Poppler::TextBox > TextBox; +typedef QList< TextBox > TextBoxList; + +class TextCache +{ +public: + TextCache() : m_mutex(), m_cache(1 << 12) {} + + bool object(const PdfPage* page, TextBoxList& textBoxes) const + { + QMutexLocker mutexLocker(&m_mutex); + + if(TextBoxList* const object = m_cache.object(page)) + { + textBoxes = *object; + + return true; + } + + return false; + } + + void insert(const PdfPage* page, const TextBoxList& textBoxes) + { + QMutexLocker mutexLocker(&m_mutex); + + m_cache.insert(page, new TextBoxList(textBoxes), textBoxes.count()); + } + + void remove(const PdfPage* page) + { + QMutexLocker mutexLocker(&m_mutex); + + m_cache.remove(page); + } + +private: + mutable QMutex m_mutex; + QCache< const PdfPage*, TextBoxList > m_cache; + +}; + +Q_GLOBAL_STATIC(TextCache, textCache) + +namespace Defaults +{ + +const bool antialiasing = true; +const bool textAntialiasing = true; + +#ifdef HAS_POPPLER_18 + +const int textHinting = 0; + +#else + +const bool textHinting = false; + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + +const bool ignorePaperColor = false; + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + +const bool overprintPreview = false; + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + +const int thinLineMode = 0; + +#endif // HAS_POPPLER_24 + +const int backend = 0; + +} // Defaults + +} // anonymous + +namespace qpdfview +{ + +namespace Model +{ + +PdfAnnotation::PdfAnnotation(QMutex* mutex, Poppler::Annotation* annotation) : Annotation(), + m_mutex(mutex), + m_annotation(annotation) +{ +} + +PdfAnnotation::~PdfAnnotation() +{ + delete m_annotation; +} + +QRectF PdfAnnotation::boundary() const +{ + LOCK_ANNOTATION + + return m_annotation->boundary().normalized(); +} + +QString PdfAnnotation::contents() const +{ + LOCK_ANNOTATION + + return m_annotation->contents(); +} + +QWidget* PdfAnnotation::createWidget() +{ + QWidget* widget = 0; + + if(m_annotation->subType() == Poppler::Annotation::AText || m_annotation->subType() == Poppler::Annotation::AHighlight) + { + widget = new AnnotationWidget(m_mutex, m_annotation); + + connect(widget, SIGNAL(wasModified()), SIGNAL(wasModified())); + } + else if(m_annotation->subType() == Poppler::Annotation::AFileAttachment) + { + widget = new FileAttachmentAnnotationWidget(m_mutex, static_cast< Poppler::FileAttachmentAnnotation* >(m_annotation)); + } + + connect(this, SIGNAL(destroyed()), widget, SLOT(deleteLater())); + + return widget; +} + +PdfFormField::PdfFormField(QMutex* mutex, Poppler::FormField* formField) : FormField(), + m_mutex(mutex), + m_formField(formField) +{ +} + +PdfFormField::~PdfFormField() +{ + delete m_formField; +} + +QRectF PdfFormField::boundary() const +{ + LOCK_FORM_FIELD + + return m_formField->rect().normalized(); +} + +QString PdfFormField::name() const +{ + LOCK_FORM_FIELD + + return m_formField->name(); +} + +QWidget* PdfFormField::createWidget() +{ + QWidget* widget = 0; + + if(m_formField->type() == Poppler::FormField::FormText) + { + Poppler::FormFieldText* formFieldText = static_cast< Poppler::FormFieldText* >(m_formField); + + if(formFieldText->textType() == Poppler::FormFieldText::Normal) + { + widget = new NormalTextFieldWidget(m_mutex, formFieldText); + } + else if(formFieldText->textType() == Poppler::FormFieldText::Multiline) + { + widget = new MultilineTextFieldWidget(m_mutex, formFieldText); + } + } + else if(m_formField->type() == Poppler::FormField::FormChoice) + { + Poppler::FormFieldChoice* formFieldChoice = static_cast< Poppler::FormFieldChoice* >(m_formField); + + if(formFieldChoice->choiceType() == Poppler::FormFieldChoice::ComboBox) + { + widget = new ComboBoxChoiceFieldWidget(m_mutex, formFieldChoice); + } + else if(formFieldChoice->choiceType() == Poppler::FormFieldChoice::ListBox) + { + widget = new ListBoxChoiceFieldWidget(m_mutex, formFieldChoice); + } + } + else if(m_formField->type() == Poppler::FormField::FormButton) + { + Poppler::FormFieldButton* formFieldButton = static_cast< Poppler::FormFieldButton* >(m_formField); + + if(formFieldButton->buttonType() == Poppler::FormFieldButton::CheckBox) + { + widget = new CheckBoxChoiceFieldWidget(m_mutex, formFieldButton); + } + else if(formFieldButton->buttonType() == Poppler::FormFieldButton::Radio) + { + widget = new RadioChoiceFieldWidget(m_mutex, formFieldButton); + } + } + + connect(widget, SIGNAL(wasModified()), SIGNAL(wasModified())); + + return widget; +} + +PdfPage::PdfPage(QMutex* mutex, Poppler::Page* page) : + m_mutex(mutex), + m_page(page) +{ +} + +PdfPage::~PdfPage() +{ + textCache()->remove(this); + + delete m_page; +} + +QSizeF PdfPage::size() const +{ + LOCK_PAGE + + return m_page->pageSizeF(); +} + +QImage PdfPage::render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const +{ + LOCK_PAGE + + Poppler::Page::Rotation rotate; + + switch(rotation) + { + default: + case RotateBy0: + rotate = Poppler::Page::Rotate0; + break; + case RotateBy90: + rotate = Poppler::Page::Rotate90; + break; + case RotateBy180: + rotate = Poppler::Page::Rotate180; + break; + case RotateBy270: + rotate = Poppler::Page::Rotate270; + break; + } + + int x = -1; + int y = -1; + int w = -1; + int h = -1; + + if(!boundingRect.isNull()) + { + x = boundingRect.x(); + y = boundingRect.y(); + w = boundingRect.width(); + h = boundingRect.height(); + } + + return m_page->renderToImage(horizontalResolution, verticalResolution, x, y, w, h, rotate); +} + +QString PdfPage::label() const +{ + LOCK_PAGE + + return m_page->label(); +} + +QList< Link* > PdfPage::links() const +{ + LOCK_PAGE + + QList< Link* > links; + + foreach(const Poppler::Link* link, m_page->links()) + { + const QRectF boundary = link->linkArea().normalized(); + + if(link->linkType() == Poppler::Link::Goto) + { + const Poppler::LinkGoto* linkGoto = static_cast< const Poppler::LinkGoto* >(link); + + int page = linkGoto->destination().pageNumber(); + qreal left = qQNaN(); + qreal top = qQNaN(); + + page = page >= 1 ? page : 1; + + if(linkGoto->destination().isChangeLeft()) + { + left = linkGoto->destination().left(); + + left = left >= 0.0 ? left : 0.0; + left = left <= 1.0 ? left : 1.0; + } + + if(linkGoto->destination().isChangeTop()) + { + top = linkGoto->destination().top(); + + top = top >= 0.0 ? top : 0.0; + top = top <= 1.0 ? top : 1.0; + } + + if(linkGoto->isExternal()) + { + links.append(new Link(boundary, linkGoto->fileName(), page)); + } + else + { + links.append(new Link(boundary, page, left, top)); + } + } + else if(link->linkType() == Poppler::Link::Browse) + { + const Poppler::LinkBrowse* linkBrowse = static_cast< const Poppler::LinkBrowse* >(link); + const QString url = linkBrowse->url(); + + links.append(new Link(boundary, url)); + } + else if(link->linkType() == Poppler::Link::Execute) + { + const Poppler::LinkExecute* linkExecute = static_cast< const Poppler::LinkExecute* >(link); + const QString url = linkExecute->fileName(); + + links.append(new Link(boundary, url)); + } + + delete link; + } + + return links; +} + +QString PdfPage::text(const QRectF& rect) const +{ + LOCK_PAGE + + return m_page->text(rect).simplified(); +} + +QString PdfPage::cachedText(const QRectF& rect) const +{ + TextBoxList textBoxes; + + if(!textCache()->object(this, textBoxes)) + { + { + LOCK_PAGE + + foreach(Poppler::TextBox* textBox, m_page->textList()) + { + textBoxes.append(TextBox(textBox)); + } + } + + textCache()->insert(this, textBoxes); + } + + QString text; + + foreach(const TextBox& textBox, textBoxes) + { + if(!rect.intersects(textBox->boundingBox())) + { + continue; + } + + const QString& characters = textBox->text(); + + for(int index = 0; index < characters.length(); ++index) + { + if(rect.intersects(textBox->charBoundingBox(index))) + { + text.append(characters.at(index)); + } + } + + if(textBox->hasSpaceAfter()) + { + text.append(QLatin1Char(' ')); + } + } + + return text.simplified(); +} + +QList< QRectF > PdfPage::search(const QString& text, bool matchCase, bool wholeWords) const +{ + LOCK_PAGE + + QList< QRectF > results; + +#ifdef HAS_POPPLER_31 + + const Poppler::Page::SearchFlags flags((matchCase ? 0 : Poppler::Page::IgnoreCase) | (wholeWords ? Poppler::Page::WholeWords : 0)); + + results = m_page->search(text, flags); + +#else + + Q_UNUSED(wholeWords); + + const Poppler::Page::SearchMode mode = matchCase ? Poppler::Page::CaseSensitive : Poppler::Page::CaseInsensitive; + +#if defined(HAS_POPPLER_22) + + results = m_page->search(text, mode); + +#elif defined(HAS_POPPLER_14) + + double left = 0.0, top = 0.0, right = 0.0, bottom = 0.0; + + while(m_page->search(text, left, top, right, bottom, Poppler::Page::NextResult, mode)) + { + results.append(QRectF(left, top, right - left, bottom - top)); + } + +#else + + QRectF rect; + + while(m_page->search(text, rect, Poppler::Page::NextResult, mode)) + { + results.append(rect); + } + +#endif // HAS_POPPLER_22 HAS_POPPLER_14 + +#endif // HAS_POPPLER_31 + + return results; +} + +QList< Annotation* > PdfPage::annotations() const +{ + LOCK_PAGE + + QList< Annotation* > annotations; + + foreach(Poppler::Annotation* annotation, m_page->annotations()) + { + if(annotation->subType() == Poppler::Annotation::AText || annotation->subType() == Poppler::Annotation::AHighlight || annotation->subType() == Poppler::Annotation::AFileAttachment) + { + annotations.append(new PdfAnnotation(m_mutex, annotation)); + continue; + } + + delete annotation; + } + + return annotations; +} + +bool PdfPage::canAddAndRemoveAnnotations() const +{ +#ifdef HAS_POPPLER_20 + + return true; + +#else + + QMessageBox::information(0, tr("Information"), tr("Version 0.20.1 or higher of the Poppler library is required to add or remove annotations.")); + + return false; + +#endif // HAS_POPPLER_20 +} + +Annotation* PdfPage::addTextAnnotation(const QRectF& boundary, const QColor& color) +{ + LOCK_PAGE + +#ifdef HAS_POPPLER_20 + + Poppler::Annotation::Style style; + style.setColor(color); + + Poppler::Annotation::Popup popup; + popup.setFlags(Poppler::Annotation::Hidden | Poppler::Annotation::ToggleHidingOnMouse); + + Poppler::Annotation* annotation = new Poppler::TextAnnotation(Poppler::TextAnnotation::Linked); + + annotation->setBoundary(boundary); + annotation->setStyle(style); + annotation->setPopup(popup); + + m_page->addAnnotation(annotation); + + return new PdfAnnotation(m_mutex, annotation); + +#else + + Q_UNUSED(boundary); + Q_UNUSED(color); + + return 0; + +#endif // HAS_POPPLER_20 +} + +Annotation* PdfPage::addHighlightAnnotation(const QRectF& boundary, const QColor& color) +{ + LOCK_PAGE + +#ifdef HAS_POPPLER_20 + + Poppler::Annotation::Style style; + style.setColor(color); + + Poppler::Annotation::Popup popup; + popup.setFlags(Poppler::Annotation::Hidden | Poppler::Annotation::ToggleHidingOnMouse); + + Poppler::HighlightAnnotation* annotation = new Poppler::HighlightAnnotation(); + + Poppler::HighlightAnnotation::Quad quad; + quad.points[0] = boundary.topLeft(); + quad.points[1] = boundary.topRight(); + quad.points[2] = boundary.bottomRight(); + quad.points[3] = boundary.bottomLeft(); + + annotation->setHighlightQuads(QList< Poppler::HighlightAnnotation::Quad >() << quad); + + annotation->setBoundary(boundary); + annotation->setStyle(style); + annotation->setPopup(popup); + + m_page->addAnnotation(annotation); + + return new PdfAnnotation(m_mutex, annotation); + +#else + + Q_UNUSED(boundary); + Q_UNUSED(color); + + return 0; + +#endif // HAS_POPPLER_20 + +} + +void PdfPage::removeAnnotation(Annotation* annotation) +{ + LOCK_PAGE + +#ifdef HAS_POPPLER_20 + + PdfAnnotation* pdfAnnotation = static_cast< PdfAnnotation* >(annotation); + + m_page->removeAnnotation(pdfAnnotation->m_annotation); + pdfAnnotation->m_annotation = 0; + +#else + + Q_UNUSED(annotation); + +#endif // HAS_POPPLER_20 +} + +QList< FormField* > PdfPage::formFields() const +{ + LOCK_PAGE + + QList< FormField* > formFields; + + foreach(Poppler::FormField* formField, m_page->formFields()) + { + if(!formField->isVisible() || formField->isReadOnly()) + { + delete formField; + continue; + } + + if(formField->type() == Poppler::FormField::FormText) + { + Poppler::FormFieldText* formFieldText = static_cast< Poppler::FormFieldText* >(formField); + + if(formFieldText->textType() == Poppler::FormFieldText::Normal || formFieldText->textType() == Poppler::FormFieldText::Multiline) + { + formFields.append(new PdfFormField(m_mutex, formField)); + continue; + } + } + else if(formField->type() == Poppler::FormField::FormChoice) + { + Poppler::FormFieldChoice* formFieldChoice = static_cast< Poppler::FormFieldChoice* >(formField); + + if(formFieldChoice->choiceType() == Poppler::FormFieldChoice::ListBox || formFieldChoice->choiceType() == Poppler::FormFieldChoice::ComboBox) + { + formFields.append(new PdfFormField(m_mutex, formField)); + continue; + } + } + else if(formField->type() == Poppler::FormField::FormButton) + { + Poppler::FormFieldButton* formFieldButton = static_cast< Poppler::FormFieldButton* >(formField); + + if(formFieldButton->buttonType() == Poppler::FormFieldButton::CheckBox || formFieldButton->buttonType() == Poppler::FormFieldButton::Radio) + { + formFields.append(new PdfFormField(m_mutex, formField)); + continue; + } + } + + delete formField; + } + + return formFields; +} + +PdfDocument::PdfDocument(Poppler::Document* document) : + m_mutex(), + m_document(document) +{ +} + +PdfDocument::~PdfDocument() +{ + delete m_document; +} + +int PdfDocument::numberOfPages() const +{ + LOCK_DOCUMENT + + return m_document->numPages(); +} + +Page* PdfDocument::page(int index) const +{ + LOCK_DOCUMENT + + if(Poppler::Page* page = m_document->page(index)) + { + return new PdfPage(&m_mutex, page); + } + + return 0; +} + +bool PdfDocument::isLocked() const +{ + LOCK_DOCUMENT + + return m_document->isLocked(); +} + +bool PdfDocument::unlock(const QString& password) +{ + LOCK_DOCUMENT + + // Poppler drops render hints and backend after unlocking so we need to restore them. + + const Poppler::Document::RenderHints hints = m_document->renderHints(); + const Poppler::Document::RenderBackend backend = m_document->renderBackend(); + + const bool ok = m_document->unlock(password.toLatin1(), password.toLatin1()); + + restoreRenderHint(m_document, hints, Poppler::Document::Antialiasing); + restoreRenderHint(m_document, hints, Poppler::Document::TextAntialiasing); + +#ifdef HAS_POPPLER_14 + + restoreRenderHint(m_document, hints, Poppler::Document::TextHinting); + +#endif // HAS_POPPLER_14 + +#ifdef HAS_POPPLER_18 + + restoreRenderHint(m_document, hints, Poppler::Document::TextSlightHinting); + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + + restoreRenderHint(m_document, hints, Poppler::Document::IgnorePaperColor); + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + restoreRenderHint(m_document, hints, Poppler::Document::OverprintPreview); + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + restoreRenderHint(m_document, hints, Poppler::Document::ThinLineSolid); + restoreRenderHint(m_document, hints, Poppler::Document::ThinLineShape); + +#endif // HAS_POPPLER_24 + + m_document->setRenderBackend(backend); + + return ok; +} + +QStringList PdfDocument::saveFilter() const +{ + return QStringList() << "Portable document format (*.pdf)"; +} + +bool PdfDocument::canSave() const +{ + return true; +} + +bool PdfDocument::save(const QString& filePath, bool withChanges) const +{ + LOCK_DOCUMENT + + QScopedPointer< Poppler::PDFConverter > pdfConverter(m_document->pdfConverter()); + + pdfConverter->setOutputFileName(filePath); + + Poppler::PDFConverter::PDFOptions options = pdfConverter->pdfOptions(); + + if(withChanges) + { + options |= Poppler::PDFConverter::WithChanges; + } + + pdfConverter->setPDFOptions(options); + + return pdfConverter->convert(); +} + +bool PdfDocument::canBePrintedUsingCUPS() const +{ + return true; +} + +void PdfDocument::setPaperColor(const QColor& paperColor) +{ + LOCK_DOCUMENT + + m_document->setPaperColor(paperColor); +} + +Outline PdfDocument::outline() const +{ + Outline outline; + + LOCK_DOCUMENT + + QScopedPointer< QDomDocument > toc(m_document->toc()); + + if(toc) + { + outline = loadOutline(*toc, m_document); + } + + return outline; +} + +Properties PdfDocument::properties() const +{ + Properties properties; + + LOCK_DOCUMENT + + foreach(const QString& key, m_document->infoKeys()) + { + QString value = m_document->info(key); + + if(value.startsWith("D:")) + { + value = m_document->date(key).toString(); + } + + properties.push_back(qMakePair(key, value)); + } + + int pdfMajorVersion = 1; + int pdfMinorVersion = 0; + m_document->getPdfVersion(&pdfMajorVersion, &pdfMinorVersion); + + properties.push_back(qMakePair(tr("PDF version"), QString("%1.%2").arg(pdfMajorVersion).arg(pdfMinorVersion))); + + properties.push_back(qMakePair(tr("Encrypted"), m_document->isEncrypted() ? tr("Yes") : tr("No"))); + properties.push_back(qMakePair(tr("Linearized"), m_document->isLinearized() ? tr("Yes") : tr("No"))); + + return properties; +} + +QAbstractItemModel* PdfDocument::fonts() const +{ + LOCK_DOCUMENT + + return new FontsModel(m_document->fonts()); +} + +bool PdfDocument::wantsContinuousMode() const +{ + LOCK_DOCUMENT + + const Poppler::Document::PageLayout pageLayout = m_document->pageLayout(); + + return pageLayout == Poppler::Document::OneColumn + || pageLayout == Poppler::Document::TwoColumnLeft + || pageLayout == Poppler::Document::TwoColumnRight; +} + +bool PdfDocument::wantsSinglePageMode() const +{ + LOCK_DOCUMENT + + const Poppler::Document::PageLayout pageLayout = m_document->pageLayout(); + + return pageLayout == Poppler::Document::SinglePage + || pageLayout == Poppler::Document::OneColumn; +} + +bool PdfDocument::wantsTwoPagesMode() const +{ + LOCK_DOCUMENT + + const Poppler::Document::PageLayout pageLayout = m_document->pageLayout(); + + return pageLayout == Poppler::Document::TwoPageLeft + || pageLayout == Poppler::Document::TwoColumnLeft; +} + +bool PdfDocument::wantsTwoPagesWithCoverPageMode() const +{ + LOCK_DOCUMENT + + const Poppler::Document::PageLayout pageLayout = m_document->pageLayout(); + + return pageLayout == Poppler::Document::TwoPageRight + || pageLayout == Poppler::Document::TwoColumnRight; +} + +bool PdfDocument::wantsRightToLeftMode() const +{ +#ifdef HAS_POPPLER_26 + + return m_document->textDirection() == Qt::RightToLeft; + +#else + + return false; + +#endif // HAS_POPPLER_26 +} + +} // Model + +PdfSettingsWidget::PdfSettingsWidget(QSettings* settings, QWidget* parent) : SettingsWidget(parent), + m_settings(settings) +{ + m_layout = new QFormLayout(this); + + // antialiasing + + m_antialiasingCheckBox = new QCheckBox(this); + m_antialiasingCheckBox->setChecked(m_settings->value("antialiasing", Defaults::antialiasing).toBool()); + + m_layout->addRow(tr("Antialiasing:"), m_antialiasingCheckBox); + + // text antialising + + m_textAntialiasingCheckBox = new QCheckBox(this); + m_textAntialiasingCheckBox->setChecked(m_settings->value("textAntialiasing", Defaults::textAntialiasing).toBool()); + + m_layout->addRow(tr("Text antialiasing:"), m_textAntialiasingCheckBox); + + // text hinting + +#ifdef HAS_POPPLER_18 + + m_textHintingComboBox = new QComboBox(this); + m_textHintingComboBox->addItem(tr("None")); + m_textHintingComboBox->addItem(tr("Full")); + m_textHintingComboBox->addItem(tr("Reduced")); + m_textHintingComboBox->setCurrentIndex(m_settings->value("textHinting", Defaults::textHinting).toInt()); + + m_layout->addRow(tr("Text hinting:"), m_textHintingComboBox); + +#else + + m_textHintingCheckBox = new QCheckBox(this); + m_textHintingCheckBox->setChecked(m_settings->value("textHinting", Defaults::textHinting).toBool()); + + m_layout->addRow(tr("Text hinting:"), m_textHintingCheckBox); + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + + m_ignorePaperColorCheckBox = new QCheckBox(this); + m_ignorePaperColorCheckBox->setChecked(m_settings->value("ignorePaperColor", Defaults::ignorePaperColor).toBool()); + + m_layout->addRow(tr("Ignore paper color:"), m_ignorePaperColorCheckBox); + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + // overprint preview + + m_overprintPreviewCheckBox = new QCheckBox(this); + m_overprintPreviewCheckBox->setChecked(m_settings->value("overprintPreview", Defaults::overprintPreview).toBool()); + + m_layout->addRow(tr("Overprint preview:"), m_overprintPreviewCheckBox); + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + m_thinLineModeComboBox = new QComboBox(this); + m_thinLineModeComboBox->addItem(tr("None")); + m_thinLineModeComboBox->addItem(tr("Solid")); + m_thinLineModeComboBox->addItem(tr("Shaped")); + m_thinLineModeComboBox->setCurrentIndex(m_settings->value("thinLineMode", Defaults::thinLineMode).toInt()); + + m_layout->addRow(tr("Thin line mode:"), m_thinLineModeComboBox); + +#endif // HAS_POPPLER_24 + + m_backendComboBox = new QComboBox(this); + m_backendComboBox->addItem(tr("Splash")); + m_backendComboBox->addItem(tr("Arthur")); + m_backendComboBox->setCurrentIndex(m_settings->value("backend", Defaults::backend).toInt()); + + m_layout->addRow(tr("Backend:"), m_backendComboBox); +} + +void PdfSettingsWidget::accept() +{ + m_settings->setValue("antialiasing", m_antialiasingCheckBox->isChecked()); + m_settings->setValue("textAntialiasing", m_textAntialiasingCheckBox->isChecked()); + +#ifdef HAS_POPPLER_18 + + m_settings->setValue("textHinting", m_textHintingComboBox->currentIndex()); + +#else + + m_settings->setValue("textHinting", m_textHintingCheckBox->isChecked()); + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + + m_settings->setValue("ignorePaperColor", m_ignorePaperColorCheckBox->isChecked()); + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + m_settings->setValue("overprintPreview", m_overprintPreviewCheckBox->isChecked()); + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + m_settings->setValue("thinLineMode", m_thinLineModeComboBox->currentIndex()); + +#endif // HAS_POPPLER_24 + + m_settings->setValue("backend", m_backendComboBox->currentIndex()); +} + +void PdfSettingsWidget::reset() +{ + m_antialiasingCheckBox->setChecked(Defaults::antialiasing); + m_textAntialiasingCheckBox->setChecked(Defaults::textAntialiasing); + +#ifdef HAS_POPPLER_18 + + m_textHintingComboBox->setCurrentIndex(Defaults::textHinting); + +#else + + m_textHintingCheckBox->setChecked(Defaults::textHinting); + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + + m_ignorePaperColorCheckBox->setChecked(Defaults::ignorePaperColor); + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + m_overprintPreviewCheckBox->setChecked(Defaults::overprintPreview); + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + m_thinLineModeComboBox->setCurrentIndex(Defaults::thinLineMode); + +#endif // HAS_POPPLER_24 + + m_backendComboBox->setCurrentIndex(Defaults::backend); +} + +PdfPlugin::PdfPlugin(QObject* parent) : QObject(parent) +{ + setObjectName("PdfPlugin"); + + m_settings = new QSettings("qpdfview", "pdf-plugin", this); +} + +Model::Document* PdfPlugin::loadDocument(const QString& filePath) const +{ + if(Poppler::Document* document = Poppler::Document::load(filePath)) + { + document->setRenderHint(Poppler::Document::Antialiasing, m_settings->value("antialiasing", Defaults::antialiasing).toBool()); + document->setRenderHint(Poppler::Document::TextAntialiasing, m_settings->value("textAntialiasing", Defaults::textAntialiasing).toBool()); + +#if defined(HAS_POPPLER_18) + + switch(m_settings->value("textHinting", Defaults::textHinting).toInt()) + { + default: + case 0: + document->setRenderHint(Poppler::Document::TextHinting, false); + break; + case 1: + document->setRenderHint(Poppler::Document::TextHinting, true); + document->setRenderHint(Poppler::Document::TextSlightHinting, false); + break; + case 2: + document->setRenderHint(Poppler::Document::TextHinting, true); + document->setRenderHint(Poppler::Document::TextSlightHinting, true); + break; + } + +#elif defined(HAS_POPPLER_14) + + document->setRenderHint(Poppler::Document::TextHinting, m_settings->value("textHinting", Defaults::textHinting).toBool()); + +#endif // HAS_POPPLER_18 HAS_POPPLER_14 + +#ifdef HAS_POPPLER_35 + + document->setRenderHint(Poppler::Document::IgnorePaperColor, m_settings->value("ignorePaperColor", Defaults::ignorePaperColor).toBool()); + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + document->setRenderHint(Poppler::Document::OverprintPreview, m_settings->value("overprintPreview", Defaults::overprintPreview).toBool()); + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + switch(m_settings->value("thinLineMode", Defaults::thinLineMode).toInt()) + { + default: + case 0: + document->setRenderHint(Poppler::Document::ThinLineSolid, false); + document->setRenderHint(Poppler::Document::ThinLineShape, false); + break; + case 1: + document->setRenderHint(Poppler::Document::ThinLineSolid, true); + document->setRenderHint(Poppler::Document::ThinLineShape, false); + break; + case 2: + document->setRenderHint(Poppler::Document::ThinLineSolid, false); + document->setRenderHint(Poppler::Document::ThinLineShape, true); + break; + } + +#endif // HAS_POPPLER_24 + + switch(m_settings->value("backend", Defaults::backend).toInt()) + { + default: + case 0: + document->setRenderBackend(Poppler::Document::SplashBackend); + break; + case 1: + document->setRenderBackend(Poppler::Document::ArthurBackend); + break; + } + + return new Model::PdfDocument(document); + } + + return 0; +} + +SettingsWidget* PdfPlugin::createSettingsWidget(QWidget* parent) const +{ + return new PdfSettingsWidget(m_settings, parent); +} + +} // qpdfview + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) + +Q_EXPORT_PLUGIN2(qpdfview_pdf, qpdfview::PdfPlugin) + +#endif // QT_VERSION diff --git a/sources/pdfmodel.h b/sources/pdfmodel.h new file mode 100644 index 0000000..133fa0f --- /dev/null +++ b/sources/pdfmodel.h @@ -0,0 +1,267 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2013-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PDFMODEL_H +#define PDFMODEL_H + +#include +#include +#include + +class QCheckBox; +class QComboBox; +class QFormLayout; +class QSettings; + +namespace Poppler +{ +class Annotation; +class Document; +class FormField; +class Page; +} + +#include "model.h" + +namespace qpdfview +{ + +class PdfPlugin; + +namespace Model +{ + class PdfAnnotation : public Annotation + { + Q_OBJECT + + friend class PdfPage; + + public: + ~PdfAnnotation(); + + QRectF boundary() const; + QString contents() const; + + QWidget* createWidget(); + + private: + Q_DISABLE_COPY(PdfAnnotation) + + PdfAnnotation(QMutex* mutex, Poppler::Annotation* annotation); + + mutable QMutex* m_mutex; + Poppler::Annotation* m_annotation; + + }; + + class PdfFormField : public FormField + { + Q_OBJECT + + friend class PdfPage; + + public: + ~PdfFormField(); + + QRectF boundary() const; + QString name() const; + + QWidget* createWidget(); + + private: + Q_DISABLE_COPY(PdfFormField) + + PdfFormField(QMutex* mutex, Poppler::FormField* formField); + + mutable QMutex* m_mutex; + Poppler::FormField* m_formField; + + }; + + class PdfPage : public Page + { + Q_DECLARE_TR_FUNCTIONS(Model::PdfPage) + + friend class PdfDocument; + + public: + ~PdfPage(); + + QSizeF size() const; + + QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const; + + QString label() const; + + QList< Link* > links() const; + + QString text(const QRectF& rect) const; + QString cachedText(const QRectF& rect) const; + + QList< QRectF > search(const QString& text, bool matchCase, bool wholeWords) const; + + QList< Annotation* > annotations() const; + + bool canAddAndRemoveAnnotations() const; + Annotation* addTextAnnotation(const QRectF& boundary, const QColor& color); + Annotation* addHighlightAnnotation(const QRectF& boundary, const QColor& color); + void removeAnnotation(Annotation* annotation); + + QList< FormField* > formFields() const; + + private: + Q_DISABLE_COPY(PdfPage) + + PdfPage(QMutex* mutex, Poppler::Page* page); + + mutable QMutex* m_mutex; + Poppler::Page* m_page; + + }; + + class PdfDocument : public Document + { + Q_DECLARE_TR_FUNCTIONS(Model::PdfDocument) + + friend class qpdfview::PdfPlugin; + + public: + ~PdfDocument(); + + int numberOfPages() const; + + Page* page(int index) const; + + bool isLocked() const; + bool unlock(const QString& password); + + QStringList saveFilter() const; + + bool canSave() const; + bool save(const QString& filePath, bool withChanges) const; + + bool canBePrintedUsingCUPS() const; + + void setPaperColor(const QColor& paperColor); + + Outline outline() const; + Properties properties() const; + + QAbstractItemModel* fonts() const; + + bool wantsContinuousMode() const; + bool wantsSinglePageMode() const; + bool wantsTwoPagesMode() const; + bool wantsTwoPagesWithCoverPageMode() const; + bool wantsRightToLeftMode() const; + + private: + Q_DISABLE_COPY(PdfDocument) + + PdfDocument(Poppler::Document* document); + + mutable QMutex m_mutex; + Poppler::Document* m_document; + + }; +} + +class PdfSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + PdfSettingsWidget(QSettings* settings, QWidget* parent = 0); + + void accept(); + void reset(); + +private: + Q_DISABLE_COPY(PdfSettingsWidget) + + QSettings* m_settings; + + QFormLayout* m_layout; + + QCheckBox* m_antialiasingCheckBox; + QCheckBox* m_textAntialiasingCheckBox; + +#ifdef HAS_POPPLER_18 + + QComboBox* m_textHintingComboBox; + +#else + + QCheckBox* m_textHintingCheckBox; + +#endif // HAS_POPPLER_18 + +#ifdef HAS_POPPLER_35 + + QCheckBox* m_ignorePaperColorCheckBox; + +#endif // HAS_POPPLER_35 + +#ifdef HAS_POPPLER_22 + + QCheckBox* m_overprintPreviewCheckBox; + +#endif // HAS_POPPLER_22 + +#ifdef HAS_POPPLER_24 + + QComboBox* m_thinLineModeComboBox; + +#endif // HAS_POPPLER_24 + + QComboBox* m_backendComboBox; + +}; + +class PdfPlugin : public QObject, Plugin +{ + Q_OBJECT + Q_INTERFACES(qpdfview::Plugin) + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + Q_PLUGIN_METADATA(IID "local.qpdfview.Plugin") + +#endif // QT_VERSION + +public: + PdfPlugin(QObject* parent = 0); + + Model::Document* loadDocument(const QString& filePath) const; + + SettingsWidget* createSettingsWidget(QWidget* parent) const; + +private: + Q_DISABLE_COPY(PdfPlugin) + + QSettings* m_settings; + +}; + +} // qpdfview + +#endif // PDFMODEL_H diff --git a/sources/pluginhandler.cpp b/sources/pluginhandler.cpp new file mode 100644 index 0000000..e733cbd --- /dev/null +++ b/sources/pluginhandler.cpp @@ -0,0 +1,640 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2012-2013, 2015-2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "pluginhandler.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#endif // QT_VERSION + +#ifdef WITH_MAGIC + +#include + +#endif // WITH_MAGIC + +#include "model.h" + +namespace +{ + +using namespace qpdfview; + +Plugin* loadStaticPlugin(const QString& objectName) +{ + foreach(QObject* object, QPluginLoader::staticInstances()) + { + if(object->objectName() == objectName) + { + if(Plugin* plugin = qobject_cast< Plugin* >(object)) + { + return plugin; + } + } + } + + qCritical() << "Could not load static plug-in:" << objectName; + + return 0; +} + +Plugin* loadPlugin(const QString& fileName) +{ + QPluginLoader pluginLoader; + +#ifdef PLUGIN_RESOLVE_ALL + + pluginLoader.setLoadHints(QLibrary::ResolveAllSymbolsHint); + +#endif // PLUGIN_RESOLVE_ALL + + const QString localFileName = QDir(QApplication::applicationDirPath()).absoluteFilePath(fileName); + pluginLoader.setFileName(localFileName); + + if(!pluginLoader.load()) + { + const QString localErrorString = pluginLoader.errorString(); + + const QString globalFileName = QDir(PLUGIN_INSTALL_PATH).absoluteFilePath(fileName); + pluginLoader.setFileName(globalFileName); + + if(!pluginLoader.load()) + { + const QString globalErrorString = pluginLoader.errorString(); + + qCritical() << "Could not load local plug-in:" << localFileName; + qCritical() << localErrorString; + + qCritical() << "Could not load global plug-in:" << globalFileName; + qCritical() << globalErrorString; + + return 0; + } + } + + Plugin* plugin = qobject_cast< Plugin* >(pluginLoader.instance()); + + if(plugin == 0) + { + qCritical() << "Could not instantiate plug-in:" << pluginLoader.fileName(); + qCritical() << pluginLoader.errorString(); + } + + return plugin; +} + +QStringList supportedImageFormats() +{ + QStringList formats; + + foreach(const QByteArray& format, QImageReader::supportedImageFormats()) + { + const QString name = QString::fromLocal8Bit(format); + + formats.append(QLatin1String("*.") + name.toLower()); + formats.append(QLatin1String("*.") + name.toUpper()); + } + + return formats; +} + +struct MimeTypeMapping +{ + const char* mimeType; + PluginHandler::FileType fileType; + const char* suffix; + const char* alternativeSuffix; +}; + +const MimeTypeMapping mimeTypeMappings[] = +{ + { "application/pdf", PluginHandler::PDF, "pdf", 0 }, + { "application/postscript", PluginHandler::PS, "ps", "eps" }, + { "image/vnd.djvu", PluginHandler::DjVu, "djvu", "djv" }, + { "application/x-gzip", PluginHandler::GZip, "gz", 0 }, + { "application/x-bzip2", PluginHandler::BZip2, "bz2", 0 }, + { "application/x-xz", PluginHandler::XZ, "xz", 0 }, + { "application/epub+zip", PluginHandler::EPUB, "epub", 0 }, + { "application/x-fictionbook+xml", PluginHandler::FB2, "fb2", 0 }, + { "application/x-zip-compressed-fb2", PluginHandler::FB2, "fb2", 0 }, + { "application/zip", PluginHandler::ZIP, "zip", 0 } +}; + +const MimeTypeMapping* const endOfMimeTypeMappings = mimeTypeMappings + sizeof(mimeTypeMappings) / sizeof(mimeTypeMappings[0]); + +void matchArchiveAndImageType(const QString& filePath, PluginHandler::FileType& fileType) +{ + if(fileType == PluginHandler::ZIP) + { + const QString suffix = QFileInfo(filePath).suffix().toLower(); + + if (suffix == "cbz") + { + fileType = PluginHandler::CBZ; + } + else if (suffix == "xps" || suffix == "oxps") + { + fileType = PluginHandler::XPS; + } + else + { + fileType = PluginHandler::Unknown; + } + } + + if(fileType == PluginHandler::Unknown && !QImageReader::imageFormat(filePath).isEmpty()) + { + fileType = PluginHandler::Image; + } +} + +PluginHandler::FileType matchFileType(const QString& filePath) +{ + PluginHandler::FileType fileType = PluginHandler::Unknown; + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + const QMimeType mimeType = QMimeDatabase().mimeTypeForFile(filePath, QMimeDatabase::MatchContent); + + for(const MimeTypeMapping* mapping = mimeTypeMappings; mapping != endOfMimeTypeMappings; ++mapping) + { + if(mimeType.inherits(mapping->mimeType)) + { + fileType = mapping->fileType; + break; + } + } + + matchArchiveAndImageType(filePath, fileType); + + if(fileType == PluginHandler::Unknown) + { + qDebug() << "Unknown MIME type:" << mimeType.name(); + } + +#else + +#ifdef WITH_MAGIC + + magic_t cookie = magic_open(MAGIC_MIME_TYPE | MAGIC_SYMLINK); + + if(magic_load(cookie, 0) == 0) + { + const char* const mimeType = magic_file(cookie, QFile::encodeName(filePath)); + + for(const MimeTypeMapping* mapping = mimeTypeMappings; mapping != endOfMimeTypeMappings; ++mapping) + { + if(qstrcmp(mimeType, mapping->mimeType) == 0) + { + fileType = mapping->fileType; + break; + } + } + + matchArchiveAndImageType(filePath, fileType); + + if(fileType == PluginHandler::Unknown) + { + qDebug() << "Unknown MIME type:" << mimeType; + } + } + + magic_close(cookie); + +#else + + const QString suffix = QFileInfo(filePath).suffix().toLower(); + + for(const MimeTypeMapping* mapping = mimeTypeMappings; mapping != endOfMimeTypeMappings; ++mapping) + { + if(suffix == mapping->suffix || (mapping->alternativeSuffix != 0 && suffix == mapping->alternativeSuffix)) + { + fileType = mapping->fileType; + break; + } + } + + matchArchiveAndImageType(filePath, fileType); + + if(fileType == PluginHandler::Unknown) + { + qDebug() << "Unkown file suffix:" << suffix; + } + +#endif // WITH_MAGIC + +#endif // QT_VERSION + + return fileType; +} + +int execute(QProcess& process, const QString& program, const QStringList& arguments = QStringList()) +{ + process.start(program, arguments, QIODevice::NotOpen); + + if(!process.waitForStarted()) + { + return -1; + } + + if(!process.waitForFinished()) + { + return -2; + } + + return process.exitCode(); +} + +QStringList supportedCompressedFormats() +{ + QStringList formats; + + QProcess process; + process.setStandardInputFile("/dev/null"); + process.setStandardOutputFile("/dev/null"); + + if(execute(process, "gzip") >= 0) + { + formats.append("*.gz *.GZ"); + } + + if(execute(process, "bzip2") >= 0) + { + formats.append("*.bz2 *.BZ2"); + } + + if(execute(process, "xz") >= 0) + { + formats.append("*.xz *.XZ"); + } + + return formats; +} + +QString decompressToTemporaryFile(const QString& filePath, const PluginHandler::FileType fileType) +{ + const char* command; + + switch(fileType) + { + case PluginHandler::GZip: + command = "gzip"; + break; + case PluginHandler::BZip2: + command = "bzip2"; + break; + case PluginHandler::XZ: + command = "xz"; + break; + default: + return QString(); + } + + QTemporaryFile file; + file.setAutoRemove(false); + + if(!file.open()) + { + return QString(); + } + + file.close(); + + QProcess process; + process.setStandardInputFile("/dev/null"); + process.setStandardOutputFile(file.fileName()); + + if(execute(process, command, QStringList() << "-dck" << filePath) != 0) + { + return QString(); + } + + return file.fileName(); +} + +} // anonymous + +namespace qpdfview +{ + +PluginHandler* PluginHandler::s_instance = 0; + +PluginHandler* PluginHandler::instance() +{ + if(s_instance == 0) + { + s_instance = new PluginHandler(qApp); + } + + return s_instance; +} + +PluginHandler::~PluginHandler() +{ + s_instance = 0; +} + +QLatin1String PluginHandler::fileTypeName(PluginHandler::FileType fileType) +{ + switch(fileType) + { + default: + case PluginHandler::Unknown: + return QLatin1String("Unknown"); + case PluginHandler::PDF: + return QLatin1String("PDF"); + case PluginHandler::PS: + return QLatin1String("PS"); + case PluginHandler::DjVu: + return QLatin1String("DjVu"); + case PluginHandler::Image: + return QLatin1String("Image"); + case PluginHandler::EPUB: + return QLatin1String("EPUB"); + case PluginHandler::XPS: + return QLatin1String("XPS"); + case PluginHandler::FB2: + return QLatin1String("FictionBook2"); + case PluginHandler::CBZ: + return QLatin1String("CBZ"); + case PluginHandler::GZip: + case PluginHandler::BZip2: + case PluginHandler::XZ: + case PluginHandler::ZIP: + return QLatin1String("Compressed"); + } +} + +QStringList PluginHandler::openFilter() +{ + QStringList openFilter; + QStringList supportedFormats; + +#if defined(WITH_PDF) || defined(WITH_FITZ) + + openFilter.append(QLatin1String("Portable document format (*.pdf *.PDF)")); + supportedFormats.append(QLatin1String("*.pdf *.PDF")); + +#endif // WITH_PDF // WITH_FITZ + +#if defined(WITH_FITZ) + + openFilter.append(QLatin1String("EPUB (*.epub *.EPUB)")); + supportedFormats.append(QLatin1String("*.epub *.EPUB")); + + openFilter.append(QLatin1String("XPS (*.xps *.XPS *.oxps *.OXPS)")); + supportedFormats.append(QLatin1String("*.xps *.XPS *.oxps *.OXPS")); + + openFilter.append(QLatin1String("FictionBook 2 (*.fb2 *.FB2)")); + supportedFormats.append(QLatin1String("*.fb2 *.FB2")); + + openFilter.append(QLatin1String("CBZ (*.cbz *.CBZ)")); + supportedFormats.append(QLatin1String("*.cbz *.CBZ")); + +#endif // WITH_FITZ + +#ifdef WITH_PS + + openFilter.append(QLatin1String("PostScript (*.ps *.PS)")); + openFilter.append(QLatin1String("Encapsulated PostScript (*.eps *.EPS)")); + supportedFormats.append(QLatin1String("*.ps *.PS *.eps *.EPS")); + +#endif // WITH_PS + +#ifdef WITH_DJVU + + openFilter.append(QLatin1String("DjVu (*.djvu *.DJVU *.djv *.DJV)")); + supportedFormats.append(QLatin1String("*.djvu *.DJVU *.djv *.DJV")); + +#endif // WITH_DJVU + +#ifdef WITH_IMAGE + + static QStringList imageFormats; + + if(imageFormats.isEmpty()) + { + imageFormats = supportedImageFormats(); + } + + if(!imageFormats.isEmpty()) + { + openFilter.append(tr("Image (%1)").arg(imageFormats.join(QLatin1String(" ")))); + supportedFormats.append(imageFormats); + } + +#endif // WITH_IMAGE + + static QStringList compressedFormats; + + if(compressedFormats.isEmpty()) + { + compressedFormats = supportedCompressedFormats(); + } + + if(!compressedFormats.isEmpty()) + { + openFilter.append(tr("Compressed (%1)").arg(compressedFormats.join(QLatin1String(" ")))); + supportedFormats.append(compressedFormats); + } + + openFilter.prepend(tr("Supported formats (%1)").arg(supportedFormats.join(QLatin1String(" ")))); + + return openFilter; +} + +Model::Document* PluginHandler::loadDocument(const QString& filePath) +{ + FileType fileType = matchFileType(filePath); + QString adjustedFilePath = filePath; + + if(fileType == GZip || fileType == BZip2 || fileType == XZ) + { + adjustedFilePath = decompressToTemporaryFile(filePath, fileType); + + if(adjustedFilePath.isEmpty()) + { + qWarning() << tr("Could not decompress '%1'!").arg(filePath); + + return 0; + } + + fileType = matchFileType(adjustedFilePath); + } + + if(fileType == Unknown) + { + qWarning() << tr("Could not match file type of '%1'!").arg(filePath); + + return 0; + } + + if(!loadPlugin(fileType)) + { + QMessageBox::critical(0, tr("Critical"), tr("Could not load plug-in for file type '%1'!").arg(fileTypeName(fileType))); + + return 0; + } + + return m_plugins.value(fileType)->loadDocument(adjustedFilePath); +} + +SettingsWidget* PluginHandler::createSettingsWidget(FileType fileType, QWidget* parent) +{ + return loadPlugin(fileType) ? m_plugins.value(fileType)->createSettingsWidget(parent) : 0; +} + +PluginHandler::PluginHandler(QObject* parent) : QObject(parent), + m_plugins() +{ +#ifdef WITH_IMAGE +#ifdef STATIC_IMAGE_PLUGIN + m_objectNames.insertMulti(Image, QLatin1String("ImagePlugin")); +#else + m_fileNames.insertMulti(Image, QLatin1String(IMAGE_PLUGIN_NAME)); +#endif // STATIC_IMAGE_PLUGIN +#endif // WITH_IMAGE + +#ifdef WITH_FITZ +#ifdef STATIC_FITZ_PLUGIN + m_objectNames.insertMulti(PDF, QLatin1String("FitzPlugin")); + m_objectNames.insertMulti(EPUB, QLatin1String("FitzPlugin")); + m_objectNames.insertMulti(XPS, QLatin1String("FitzPlugin")); + m_objectNames.insertMulti(FB2, QLatin1String("FitzPlugin")); + m_objectNames.insertMulti(CBZ, QLatin1String("FitzPlugin")); +#else + m_fileNames.insertMulti(PDF, QLatin1String(FITZ_PLUGIN_NAME)); + m_fileNames.insertMulti(EPUB, QLatin1String(FITZ_PLUGIN_NAME)); + m_fileNames.insertMulti(XPS, QLatin1String(FITZ_PLUGIN_NAME)); + m_fileNames.insertMulti(FB2, QLatin1String(FITZ_PLUGIN_NAME)); + m_fileNames.insertMulti(CBZ, QLatin1String(FITZ_PLUGIN_NAME)); +#endif // STATIC_FITZ_PLUGIN +#endif // WITH_FITZ + +#ifdef WITH_PDF +#ifdef STATIC_PDF_PLUGIN + m_objectNames.insertMulti(PDF, QLatin1String("PdfPlugin")); +#else + m_fileNames.insertMulti(PDF, QLatin1String(PDF_PLUGIN_NAME)); +#endif // STATIC_PDF_PLUGIN +#endif // WITH_PDF + +#ifdef WITH_PS +#ifdef STATIC_PS_PLUGIN + m_objectNames.insertMulti(PS, QLatin1String("PsPlugin")); +#else + m_fileNames.insertMulti(PS, QLatin1String(PS_PLUGIN_NAME)); +#endif // STATIC_PS_PLUGIN +#endif // WITH_PS + +#ifdef WITH_DJVU +#ifdef STATIC_DJVU_PLUGIN + m_objectNames.insertMulti(DjVu, QLatin1String("DjVuPlugin")); +#else + m_fileNames.insertMulti(DjVu, QLatin1String(DJVU_PLUGIN_NAME)); +#endif // STATIC_DJVU_PLUGIN +#endif // WITH_DJVU +} + +bool PluginHandler::loadPlugin(FileType fileType) +{ + if(m_plugins.contains(fileType)) + { + return true; + } + + foreach(const QString& objectName, m_objectNames.values(fileType)) + { + if(Plugin* plugin = ::loadStaticPlugin(objectName)) + { + m_plugins.insert(fileType, plugin); + + return true; + } + } + + foreach(const QString& fileName, m_fileNames.values(fileType)) + { + if(Plugin* plugin = ::loadPlugin(fileName)) + { + m_plugins.insert(fileType, plugin); + + return true; + } + } + + return false; +} + +} // qpdfview + +#ifdef STATIC_IMAGE_PLUGIN + #if QT_VERSION < QT_VERSION_CHECK(5,0,0) + Q_IMPORT_PLUGIN(qpdfview_image) + #else + Q_IMPORT_PLUGIN(ImagePlugin) + #endif // QT_VERSION +#endif // STATIC_IMAGE_PLUGIN + +#ifdef STATIC_FITZ_PLUGIN + #if QT_VERSION < QT_VERSION_CHECK(5,0,0) + Q_IMPORT_PLUGIN(qpdfview_fitz) + #else + Q_IMPORT_PLUGIN(FitzPlugin) + #endif // QT_VERSION +#endif // STATIC_FITZ_PLUGIN + +#ifdef STATIC_PDF_PLUGIN + #if QT_VERSION < QT_VERSION_CHECK(5,0,0) + Q_IMPORT_PLUGIN(qpdfview_pdf) + #else + Q_IMPORT_PLUGIN(PdfPlugin) + #endif // QT_VERSION +#endif // STATIC_PDF_PLUGIN + +#ifdef STATIC_PS_PLUGIN + #if QT_VERSION < QT_VERSION_CHECK(5,0,0) + Q_IMPORT_PLUGIN(qpdfview_ps) + #else + Q_IMPORT_PLUGIN(PsPlugin) + #endif // QT_VERSION +#endif // STATIC_PS_PLUGIN + +#ifdef STATIC_DJVU_PLUGIN + #if QT_VERSION < QT_VERSION_CHECK(5,0,0) + Q_IMPORT_PLUGIN(qpdfview_djvu) + #else + Q_IMPORT_PLUGIN(DjVuPlugin) + #endif // QT_VERSION +#endif // STATIC_DJVU_PLUGIN diff --git a/sources/pluginhandler.h b/sources/pluginhandler.h new file mode 100644 index 0000000..788ac1b --- /dev/null +++ b/sources/pluginhandler.h @@ -0,0 +1,93 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2012-2013, 2017, 2018 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PLUGINHANDLER_H +#define PLUGINHANDLER_H + +#include +#include + +class QString; +class QWidget; + +namespace qpdfview +{ + +namespace Model +{ +class Document; +} + +class SettingsWidget; +class Plugin; + +class PluginHandler : public QObject +{ + Q_OBJECT + +public: + static PluginHandler* instance(); + ~PluginHandler(); + + enum FileType + { + Unknown = 0, + PDF, + PS, + DjVu, + Image, + GZip, + BZip2, + XZ, + ZIP, + EPUB, + XPS, + FB2, + CBZ + }; + + static QLatin1String fileTypeName(FileType fileType); + + static QStringList openFilter(); + + Model::Document* loadDocument(const QString& filePath); + + SettingsWidget* createSettingsWidget(FileType fileType, QWidget* parent = 0); + +private: + Q_DISABLE_COPY(PluginHandler) + + static PluginHandler* s_instance; + PluginHandler(QObject* parent = 0); + + QMap< FileType, Plugin* > m_plugins; + + QMultiMap< FileType, QString > m_objectNames; + QMultiMap< FileType, QString > m_fileNames; + + bool loadPlugin(FileType fileType); + +}; + +} // qpdfview + +#endif // PLUGINHANDLER_H diff --git a/sources/presentationview.cpp b/sources/presentationview.cpp new file mode 100644 index 0000000..34d7c20 --- /dev/null +++ b/sources/presentationview.cpp @@ -0,0 +1,640 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "presentationview.h" + +#include +#include +#include + +#include "settings.h" +#include "model.h" +#include "pageitem.h" +#include "documentview.h" + +namespace +{ + +using namespace qpdfview; + +inline void adjustScaleFactor(RenderParam& renderParam, qreal scaleFactor) +{ + if(!qFuzzyCompare(renderParam.scaleFactor(), scaleFactor)) + { + renderParam.setScaleFactor(scaleFactor); + } +} + +} // anonymous + +namespace qpdfview +{ + +Settings* PresentationView::s_settings = 0; + +PresentationView::PresentationView(const QVector< Model::Page* >& pages, QWidget* parent) : QGraphicsView(parent), + m_prefetchTimer(0), + m_pages(pages), + m_currentPage(1), + m_past(), + m_future(), + m_scaleMode(FitToPageSizeMode), + m_scaleFactor(1.0), + m_rotation(RotateBy0), + m_renderFlags(0), + m_pageItems() +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + setWindowFlags(windowFlags() | Qt::FramelessWindowHint); + setWindowState(windowState() | Qt::WindowFullScreen); + + setFrameShape(QFrame::NoFrame); + + setAcceptDrops(false); + setDragMode(QGraphicsView::ScrollHandDrag); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setScene(new QGraphicsScene(this)); + + preparePages(); + prepareBackground(); + + // prefetch + + m_prefetchTimer = new QTimer(this); + m_prefetchTimer->setInterval(250); + m_prefetchTimer->setSingleShot(true); + + connect(this, SIGNAL(currentPageChanged(int)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(scaleModeChanged(ScaleMode)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(scaleFactorChanged(qreal)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(rotationChanged(Rotation)), m_prefetchTimer, SLOT(start())); + connect(this, SIGNAL(renderFlagsChanged(qpdfview::RenderFlags)), m_prefetchTimer, SLOT(start())); + + connect(m_prefetchTimer, SIGNAL(timeout()), SLOT(on_prefetch_timeout())); + + if(s_settings->documentView().prefetch()) + { + m_prefetchTimer->blockSignals(false); + m_prefetchTimer->start(); + } + else + { + m_prefetchTimer->blockSignals(true); + m_prefetchTimer->stop(); + } + + prepareScene(); + prepareView(); +} + +PresentationView::~PresentationView() +{ + qDeleteAll(m_pageItems); +} + +void PresentationView::setScaleMode(ScaleMode scaleMode) +{ + if(m_scaleMode != scaleMode && scaleMode >= 0 && scaleMode < NumberOfScaleModes) + { + m_scaleMode = scaleMode; + + prepareScene(); + prepareView(); + + emit scaleModeChanged(m_scaleMode); + } +} + +void PresentationView::setScaleFactor(qreal scaleFactor) +{ + if(!qFuzzyCompare(m_scaleFactor, scaleFactor) + && scaleFactor >= s_settings->documentView().minimumScaleFactor() + && scaleFactor <= s_settings->documentView().maximumScaleFactor()) + { + m_scaleFactor = scaleFactor; + + if(m_scaleMode == ScaleFactorMode) + { + prepareScene(); + prepareView(); + } + + emit scaleFactorChanged(m_scaleFactor); + } +} + +void PresentationView::setRotation(Rotation rotation) +{ + if(m_rotation != rotation) + { + m_rotation = rotation; + + prepareScene(); + prepareView(); + + emit rotationChanged(m_rotation); + } +} + +void PresentationView::setRenderFlags(qpdfview::RenderFlags renderFlags) +{ + if(m_renderFlags != renderFlags) + { + const qpdfview::RenderFlags changedFlags = m_renderFlags ^ renderFlags; + + m_renderFlags = renderFlags; + + prepareScene(); + prepareView(); + + if(changedFlags.testFlag(InvertColors)) + { + prepareBackground(); + } + + emit renderFlagsChanged(m_renderFlags); + } +} + +void PresentationView::show() +{ + QWidget::show(); + + prepareView(); +} + +void PresentationView::previousPage() +{ + jumpToPage(m_currentPage - 1); +} + +void PresentationView::nextPage() +{ + jumpToPage(m_currentPage + 1); +} + +void PresentationView::firstPage() +{ + jumpToPage(1); +} + +void PresentationView::lastPage() +{ + jumpToPage(m_pages.count()); +} + +void PresentationView::jumpToPage(int page, bool trackChange) +{ + if(m_currentPage != page && page >= 1 && page <= m_pages.count()) + { + if(trackChange) + { + m_past.append(m_currentPage); + } + + m_currentPage = page; + + prepareView(); + + emit currentPageChanged(m_currentPage, trackChange); + } +} + +void PresentationView::jumpBackward() +{ + if(!m_past.isEmpty()) + { + m_future.prepend(m_currentPage); + + jumpToPage(m_past.takeLast(), false); + } +} + +void PresentationView::jumpForward() +{ + if(!m_future.isEmpty()) + { + m_past.append(m_currentPage); + + jumpToPage(m_future.takeFirst(), false); + } +} + +void PresentationView::zoomIn() +{ + if(scaleMode() != ScaleFactorMode) + { + const qreal currentScaleFactor = m_pageItems.at(m_currentPage - 1)->renderParam().scaleFactor(); + + setScaleFactor(qMin(currentScaleFactor * s_settings->documentView().zoomFactor(), + s_settings->documentView().maximumScaleFactor())); + + setScaleMode(ScaleFactorMode); + } + else + { + setScaleFactor(qMin(m_scaleFactor * s_settings->documentView().zoomFactor(), + s_settings->documentView().maximumScaleFactor())); + } +} + +void PresentationView::zoomOut() +{ + if(scaleMode() != ScaleFactorMode) + { + const qreal currentScaleFactor = m_pageItems.at(m_currentPage - 1)->renderParam().scaleFactor(); + + setScaleFactor(qMax(currentScaleFactor / s_settings->documentView().zoomFactor(), + s_settings->documentView().minimumScaleFactor())); + + setScaleMode(ScaleFactorMode); + } + else + { + setScaleFactor(qMax(m_scaleFactor / s_settings->documentView().zoomFactor(), + s_settings->documentView().minimumScaleFactor())); + } +} + +void PresentationView::originalSize() +{ + setScaleFactor(1.0); + setScaleMode(ScaleFactorMode); +} + +void PresentationView::rotateLeft() +{ + switch(m_rotation) + { + default: + case RotateBy0: + setRotation(RotateBy270); + break; + case RotateBy90: + setRotation(RotateBy0); + break; + case RotateBy180: + setRotation(RotateBy90); + break; + case RotateBy270: + setRotation(RotateBy180); + break; + } +} + +void PresentationView::rotateRight() +{ + switch(m_rotation) + { + default: + case RotateBy0: + setRotation(RotateBy90); + break; + case RotateBy90: + setRotation(RotateBy180); + break; + case RotateBy180: + setRotation(RotateBy270); + break; + case RotateBy270: + setRotation(RotateBy0); + break; + } +} + +void PresentationView::on_prefetch_timeout() +{ + int fromPage = m_currentPage, toPage = m_currentPage; + + fromPage -= s_settings->documentView().prefetchDistance() / 2; + toPage += s_settings->documentView().prefetchDistance(); + + fromPage = qMax(fromPage, 1); + toPage = qMin(toPage, m_pages.count()); + + const int maxCost = toPage - fromPage + 1; + int cost = 0; + + for(int index = m_currentPage - 1; index <= toPage - 1; ++index) + { + cost += m_pageItems.at(index)->startRender(true); + + if(cost >= maxCost) + { + return; + } + } + + for(int index = m_currentPage - 1; index >= fromPage - 1; --index) + { + cost += m_pageItems.at(index)->startRender(true); + + if(cost >= maxCost) + { + return; + } + } +} + +void PresentationView::on_pages_cropRectChanged() +{ + prepareScene(); + prepareView(); +} + +void PresentationView::on_pages_linkClicked(bool newTab, int page, qreal left, qreal top) +{ + Q_UNUSED(newTab); + Q_UNUSED(left); + Q_UNUSED(top); + + page = qMax(page, 1); + page = qMin(page, m_pages.count()); + + jumpToPage(page, true); +} + +void PresentationView::resizeEvent(QResizeEvent* event) +{ + QGraphicsView::resizeEvent(event); + + prepareScene(); + prepareView(); +} + +void PresentationView::keyPressEvent(QKeyEvent* event) +{ + switch(event->modifiers() + event->key()) + { + case Qt::Key_PageUp: + case Qt::Key_Up: + case Qt::Key_Left: + case Qt::Key_Backspace: + previousPage(); + + event->accept(); + return; + case Qt::Key_PageDown: + case Qt::Key_Down: + case Qt::Key_Right: + case Qt::Key_Space: + nextPage(); + + event->accept(); + return; + case Qt::Key_Home: + firstPage(); + + event->accept(); + return; + case Qt::Key_End: + lastPage(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_Return: + jumpBackward(); + + event->accept(); + return; + case Qt::CTRL + Qt::SHIFT + Qt::Key_Return: + jumpForward(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_0: + originalSize(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_9: + setScaleMode(FitToPageWidthMode); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_8: + setScaleMode(FitToPageSizeMode); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_Up: + zoomIn(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_Down: + zoomOut(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_Left: + rotateLeft(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_Right: + rotateRight(); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_I: + setRenderFlags(renderFlags() ^ InvertColors); + + event->accept(); + return; + case Qt::CTRL + Qt::Key_U: + setRenderFlags(renderFlags() ^ ConvertToGrayscale); + + event->accept(); + return; + case Qt::CTRL + Qt::SHIFT + Qt::Key_U: + setRenderFlags(renderFlags() ^ TrimMargins); + + event->accept(); + return; + case Qt::Key_F12: + case Qt::Key_Escape: + close(); + + event->accept(); + return; + } + + QWidget::keyPressEvent(event); +} + +void PresentationView::wheelEvent(QWheelEvent* event) +{ + if(event->modifiers() == s_settings->documentView().zoomModifiers()) + { + if(event->delta() > 0) + { + zoomIn(); + } + else + { + zoomOut(); + } + + event->accept(); + return; + } + else if(event->modifiers() == s_settings->documentView().rotateModifiers()) + { + if(event->delta() > 0) + { + rotateLeft(); + } + else + { + rotateRight(); + } + + event->accept(); + return; + } + else if(event->modifiers() == Qt::NoModifier) + { + if(event->delta() > 0 && m_currentPage != 1) + { + previousPage(); + + event->accept(); + return; + } + else if(event->delta() < 0 && m_currentPage != m_pages.count()) + { + nextPage(); + + event->accept(); + return; + } + } + + QGraphicsView::wheelEvent(event); +} + +void PresentationView::preparePages() +{ + for(int index = 0; index < m_pages.count(); ++index) + { + PageItem* page = new PageItem(m_pages.at(index), index, PageItem::PresentationMode); + + scene()->addItem(page); + m_pageItems.append(page); + + connect(page, SIGNAL(cropRectChanged()), SLOT(on_pages_cropRectChanged())); + + connect(page, SIGNAL(linkClicked(bool,int,qreal,qreal)), SLOT(on_pages_linkClicked(bool,int,qreal,qreal))); + } +} + +void PresentationView::prepareBackground() +{ + QColor backgroundColor = s_settings->presentationView().backgroundColor(); + + if(!backgroundColor.isValid()) + { + backgroundColor = s_settings->pageItem().paperColor(); + } + + if(m_renderFlags.testFlag(InvertColors)) + { + backgroundColor.setRgb(~backgroundColor.rgb()); + } + + scene()->setBackgroundBrush(QBrush(backgroundColor)); +} + +void PresentationView::prepareScene() +{ + RenderParam renderParam(logicalDpiX(), logicalDpiY(), 1.0, + scaleFactor(), rotation(), renderFlags()); + +#if QT_VERSION >= QT_VERSION_CHECK(5,1,0) + + if(s_settings->pageItem().useDevicePixelRatio()) + { +#if QT_VERSION >= QT_VERSION_CHECK(5,6,0) + + renderParam.setDevicePixelRatio(devicePixelRatioF()); + +#else + + renderParam.setDevicePixelRatio(devicePixelRatio()); + +#endif // QT_VERSION + } + +#endif // QT_VERSION + + const qreal visibleWidth = viewport()->width(); + const qreal visibleHeight = viewport()->height(); + + foreach(PageItem* page, m_pageItems) + { + const QSizeF displayedSize = page->displayedSize(renderParam); + + if(m_scaleMode == FitToPageWidthMode) + { + adjustScaleFactor(renderParam, visibleWidth / displayedSize.width()); + } + else if(m_scaleMode == FitToPageSizeMode) + { + adjustScaleFactor(renderParam, qMin(visibleWidth / displayedSize.width(), visibleHeight / displayedSize.height())); + } + + page->setRenderParam(renderParam); + } +} + +void PresentationView::prepareView() +{ + for(int index = 0; index < m_pageItems.count(); ++index) + { + PageItem* page = m_pageItems.at(index); + + if(index == m_currentPage - 1) + { + page->setVisible(true); + + setSceneRect(page->boundingRect().translated(page->pos())); + } + else + { + page->setVisible(false); + + page->cancelRender(); + } + + } + + viewport()->update(); +} + +} // qpdfview diff --git a/sources/presentationview.h b/sources/presentationview.h new file mode 100644 index 0000000..9c9bafd --- /dev/null +++ b/sources/presentationview.h @@ -0,0 +1,137 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PRESENTATIONVIEW_H +#define PRESENTATIONVIEW_H + +#include + +#include "renderparam.h" + +namespace qpdfview +{ + +namespace Model +{ +class Page; +} + +class Settings; +class PageItem; + +class PresentationView : public QGraphicsView +{ + Q_OBJECT + +public: + PresentationView(const QVector< Model::Page* >& pages, QWidget* parent = 0); + ~PresentationView(); + + int numberOfPages() const { return m_pages.count(); } + int currentPage() const { return m_currentPage; } + + ScaleMode scaleMode() const { return m_scaleMode; } + void setScaleMode(ScaleMode scaleMode); + + qreal scaleFactor() const { return m_scaleFactor; } + void setScaleFactor(qreal scaleFactor); + + Rotation rotation() const { return m_rotation; } + void setRotation(Rotation rotation); + + qpdfview::RenderFlags renderFlags() const { return m_renderFlags; } + void setRenderFlags(qpdfview::RenderFlags renderFlags); + +signals: + void currentPageChanged(int currentPage, bool trackChange = false); + + void scaleModeChanged(ScaleMode scaleMode); + void scaleFactorChanged(qreal scaleFactor); + void rotationChanged(Rotation rotation); + + void renderFlagsChanged(qpdfview::RenderFlags renderFlags); + +public slots: + void show(); + + void previousPage(); + void nextPage(); + void firstPage(); + void lastPage(); + + void jumpToPage(int page, bool trackChange = true); + + void jumpBackward(); + void jumpForward(); + + void zoomIn(); + void zoomOut(); + void originalSize(); + + void rotateLeft(); + void rotateRight(); + +protected slots: + void on_prefetch_timeout(); + + void on_pages_cropRectChanged(); + + void on_pages_linkClicked(bool newTab, int page, qreal left, qreal top); + +protected: + void resizeEvent(QResizeEvent* event); + + void keyPressEvent(QKeyEvent* event); + void wheelEvent(QWheelEvent* event); + +private: + Q_DISABLE_COPY(PresentationView) + + static Settings* s_settings; + + QTimer* m_prefetchTimer; + + QVector< Model::Page* > m_pages; + + int m_currentPage; + + QList< int > m_past; + QList< int > m_future; + + ScaleMode m_scaleMode; + qreal m_scaleFactor; + Rotation m_rotation; + + qpdfview::RenderFlags m_renderFlags; + + QVector< PageItem* > m_pageItems; + + void preparePages(); + void prepareBackground(); + + void prepareScene(); + void prepareView(); + +}; + +} // qpdfview + +#endif // PRESENTATIONVIEW_H diff --git a/sources/printdialog.cpp b/sources/printdialog.cpp new file mode 100644 index 0000000..b887e94 --- /dev/null +++ b/sources/printdialog.cpp @@ -0,0 +1,161 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "printdialog.h" + +#include +#include +#include +#include + +#include "settings.h" + +namespace qpdfview +{ + +Settings* PrintDialog::s_settings = 0; + +QPrinter* PrintDialog::createPrinter() +{ + QPrinter* printer = new QPrinter(); + + const Settings::PrintDialog& settings = Settings::instance()->printDialog(); + printer->setCollateCopies(settings.collateCopies()); + printer->setPageOrder(settings.pageOrder()); + printer->setOrientation(settings.orientation()); + printer->setColorMode(settings.colorMode()); + printer->setDuplex(settings.duplex()); + + return printer; +} + +PrintDialog::PrintDialog(QPrinter* printer, QWidget* parent) : QPrintDialog(printer, parent) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + // print options + + m_printOptionsWidget = new QWidget(this); + m_printOptionsLayout = new QFormLayout(m_printOptionsWidget); + + m_fitToPageCheckBox = new QCheckBox(this); + m_fitToPageCheckBox->setChecked(s_settings->printDialog().fitToPage()); + + m_printOptionsLayout->addRow(tr("Fit to page:"), m_fitToPageCheckBox); + +#if QT_VERSION < QT_VERSION_CHECK(5,11,0) + + m_pageRangesLineEdit = new QLineEdit(this); + + m_printOptionsLayout->addRow(tr("Page ranges:"), m_pageRangesLineEdit); + +#endif // QT_VERSION + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + m_pageSetComboBox = new QComboBox(this); + m_pageSetComboBox->addItem(tr("All pages"), static_cast< uint >(PrintOptions::AllPages)); + m_pageSetComboBox->addItem(tr("Even pages"), static_cast< uint >(PrintOptions::EvenPages)); + m_pageSetComboBox->addItem(tr("Odd pages"), static_cast< uint >(PrintOptions::OddPages)); + m_pageSetComboBox->setCurrentIndex(m_pageSetComboBox->findData(static_cast< uint >(s_settings->printDialog().pageSet()))); + + m_printOptionsLayout->addRow(tr("Page set:"), m_pageSetComboBox); + + m_numberUpComboBox = new QComboBox(this); + m_numberUpComboBox->addItem(tr("Single page"), static_cast< uint >(PrintOptions::SinglePage)); + m_numberUpComboBox->addItem(tr("Two pages"), static_cast< uint >(PrintOptions::TwoPages)); + m_numberUpComboBox->addItem(tr("Four pages"), static_cast< uint >(PrintOptions::FourPages)); + m_numberUpComboBox->addItem(tr("Six pages"), static_cast< uint >(PrintOptions::SixPages)); + m_numberUpComboBox->addItem(tr("Nine pages"), static_cast< uint >(PrintOptions::NinePages)); + m_numberUpComboBox->addItem(tr("Sixteen pages"), static_cast< uint >(PrintOptions::SixteenPages)); + m_numberUpComboBox->setCurrentIndex(m_numberUpComboBox->findData(static_cast< uint >(s_settings->printDialog().numberUp()))); + + m_printOptionsLayout->addRow(tr("Number-up:"), m_numberUpComboBox); + + m_numberUpLayoutComboBox = new QComboBox(this); + m_numberUpLayoutComboBox->addItem(tr("Bottom to top and left to right"), static_cast< uint >(PrintOptions::BottomTopLeftRight)); + m_numberUpLayoutComboBox->addItem(tr("Bottom to top and right to left"), static_cast< uint >(PrintOptions::BottomTopRightLeft)); + m_numberUpLayoutComboBox->addItem(tr("Left to right and bottom to top"), static_cast< uint >(PrintOptions::LeftRightBottomTop)); + m_numberUpLayoutComboBox->addItem(tr("Left to right and top to bottom"), static_cast< uint >(PrintOptions::LeftRightTopBottom)); + m_numberUpLayoutComboBox->addItem(tr("Right to left and bottom to top"), static_cast< uint >(PrintOptions::RightLeftBottomTop)); + m_numberUpLayoutComboBox->addItem(tr("Right to left and top to bottom"), static_cast< uint >(PrintOptions::RightLeftTopBottom)); + m_numberUpLayoutComboBox->addItem(tr("Top to bottom and left to right"), static_cast< uint >(PrintOptions::TopBottomLeftRight)); + m_numberUpLayoutComboBox->addItem(tr("Top to bottom and right to left"), static_cast< uint >(PrintOptions::TopBottomRightLeft)); + m_numberUpLayoutComboBox->setCurrentIndex(m_numberUpLayoutComboBox->findData(static_cast< uint >(s_settings->printDialog().numberUpLayout()))); + + m_printOptionsLayout->addRow(tr("Number-up layout:"), m_numberUpLayoutComboBox); + +#endif // QT_VERSION + + m_printOptionsWidget->setWindowTitle(tr("Extended options")); + setOptionTabs(QList< QWidget* >() << m_printOptionsWidget); +} + +PrintOptions PrintDialog::printOptions() const +{ + PrintOptions printOptions; + + printOptions.fitToPage = m_fitToPageCheckBox->isChecked(); + +#if QT_VERSION < QT_VERSION_CHECK(5,11,0) + + printOptions.pageRanges = m_pageRangesLineEdit->text(); + +#endif // QT_VERSION + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + printOptions.pageSet = static_cast< PrintOptions::PageSet >(m_pageSetComboBox->itemData(m_pageSetComboBox->currentIndex()).toUInt()); + + printOptions.numberUp = static_cast< PrintOptions::NumberUp >(m_numberUpComboBox->itemData(m_numberUpComboBox->currentIndex()).toUInt()); + printOptions.numberUpLayout = static_cast< PrintOptions::NumberUpLayout >(m_numberUpLayoutComboBox->itemData(m_numberUpLayoutComboBox->currentIndex()).toUInt()); + +#endif // QT_VERSION + + return printOptions; +} + +void PrintDialog::accept() +{ + QPrintDialog::accept(); + + s_settings->printDialog().setCollateCopies(printer()->collateCopies()); + s_settings->printDialog().setPageOrder(printer()->pageOrder()); + s_settings->printDialog().setOrientation(printer()->orientation()); + s_settings->printDialog().setColorMode(printer()->colorMode()); + s_settings->printDialog().setDuplex(printer()->duplex()); + + s_settings->printDialog().setFitToPage(m_fitToPageCheckBox->isChecked()); + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + s_settings->printDialog().setPageSet(static_cast< PrintOptions::PageSet >(m_pageSetComboBox->itemData(m_pageSetComboBox->currentIndex()).toUInt())); + + s_settings->printDialog().setNumberUp(static_cast< PrintOptions::NumberUp >(m_numberUpComboBox->itemData(m_numberUpComboBox->currentIndex()).toUInt())); + s_settings->printDialog().setNumberUpLayout(static_cast< PrintOptions::NumberUpLayout >(m_numberUpLayoutComboBox->itemData(m_numberUpLayoutComboBox->currentIndex()).toUInt())); + +#endif // QT_VERSION +} + +} // qpdfview diff --git a/sources/printdialog.h b/sources/printdialog.h new file mode 100644 index 0000000..dec9a36 --- /dev/null +++ b/sources/printdialog.h @@ -0,0 +1,82 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PRINTDIALOG_H +#define PRINTDIALOG_H + +#include + +class QCheckBox; +class QComboBox; +class QFormLayout; +class QLineEdit; +class QPrinter; + +namespace qpdfview +{ + +struct PrintOptions; +class Settings; + +class PrintDialog : public QPrintDialog +{ + Q_OBJECT + +public: + static QPrinter* createPrinter(); + + PrintDialog(QPrinter* printer, QWidget* parent = 0); + + PrintOptions printOptions() const; + +public slots: + void accept(); + +private: + Q_DISABLE_COPY(PrintDialog) + + static Settings* s_settings; + + QWidget* m_printOptionsWidget; + QFormLayout* m_printOptionsLayout; + + QCheckBox* m_fitToPageCheckBox; + +#if QT_VERSION < QT_VERSION_CHECK(5,11,0) + + QLineEdit* m_pageRangesLineEdit; + +#endif // QT_VERSION + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + QComboBox* m_pageSetComboBox; + + QComboBox* m_numberUpComboBox; + QComboBox* m_numberUpLayoutComboBox; + +#endif // QT_VERSION + +}; + +} // qpdfview + +#endif // PRINTDIALOG_H diff --git a/sources/printoptions.h b/sources/printoptions.h new file mode 100644 index 0000000..39a5428 --- /dev/null +++ b/sources/printoptions.h @@ -0,0 +1,84 @@ +/* + +Copyright 2013 Adam Reichold +Copyright 2013 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PRINTOPTIONS_H +#define PRINTOPTIONS_H + +namespace qpdfview +{ + +struct PrintOptions +{ + bool fitToPage; + + QString pageRanges; + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + enum PageSet + { + AllPages = 0, + EvenPages = 1, + OddPages = 2 + }; + + PageSet pageSet; + + enum NumberUp + { + SinglePage = 0, + TwoPages = 1, + FourPages = 2, + SixPages = 3, + NinePages = 4, + SixteenPages = 5 + }; + + NumberUp numberUp; + + enum NumberUpLayout + { + BottomTopLeftRight = 0, + BottomTopRightLeft = 1, + LeftRightBottomTop = 2, + LeftRightTopBottom = 3, + RightLeftBottomTop = 4, + RightLeftTopBottom = 5, + TopBottomLeftRight = 6, + TopBottomRightLeft = 7 + }; + + NumberUpLayout numberUpLayout; + + PrintOptions() : fitToPage(false), pageRanges(), pageSet(AllPages), numberUp(SinglePage), numberUpLayout(LeftRightTopBottom) {} + +#else + + PrintOptions() : fitToPage(false), pageRanges() {} + +#endif // QT_VERSION + +}; + +} // qpdfview + +#endif // PRINTOPTIONS_H diff --git a/sources/psmodel.cpp b/sources/psmodel.cpp new file mode 100644 index 0000000..b5b14a3 --- /dev/null +++ b/sources/psmodel.cpp @@ -0,0 +1,325 @@ +/* + +Copyright 2013 Alexander Volkov +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "psmodel.h" + +#include +#include +#include +#include +#include + +#include + +namespace +{ + +using namespace qpdfview; +using namespace qpdfview::Model; + +namespace Defaults +{ + +const int graphicsAntialiasBits = 4; +const int textAntialiasBits = 2; + +} // Defaults + +} // anonymous + +namespace qpdfview +{ + +namespace Model +{ + +PsPage::PsPage(QMutex* mutex, SpectrePage* page, SpectreRenderContext* renderContext) : + m_mutex(mutex), + m_page(page), + m_renderContext(renderContext) +{ +} + +PsPage::~PsPage() +{ + spectre_page_free(m_page); + m_page = 0; +} + +QSizeF PsPage::size() const +{ + QMutexLocker mutexLocker(m_mutex); + + int w; + int h; + + spectre_page_get_size(m_page, &w, &h); + + return QSizeF(w, h); +} + +QImage PsPage::render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const +{ + QMutexLocker mutexLocker(m_mutex); + + double xscale; + double yscale; + + switch(rotation) + { + default: + case RotateBy0: + case RotateBy180: + xscale = horizontalResolution / 72.0; + yscale = verticalResolution / 72.0; + break; + case RotateBy90: + case RotateBy270: + xscale = verticalResolution / 72.0; + yscale = horizontalResolution / 72.0; + break; + } + + spectre_render_context_set_scale(m_renderContext, xscale, yscale); + + switch(rotation) + { + default: + case RotateBy0: + spectre_render_context_set_rotation(m_renderContext, 0); + break; + case RotateBy90: + spectre_render_context_set_rotation(m_renderContext, 90); + break; + case RotateBy180: + spectre_render_context_set_rotation(m_renderContext, 180); + break; + case RotateBy270: + spectre_render_context_set_rotation(m_renderContext, 270); + break; + } + + int w; + int h; + + spectre_page_get_size(m_page, &w, &h); + + w = qRound(w * xscale); + h = qRound(h * yscale); + + if(rotation == RotateBy90 || rotation == RotateBy270) + { + qSwap(w, h); + } + + unsigned char* pageData = 0; + int rowLength = 0; + + spectre_page_render(m_page, m_renderContext, &pageData, &rowLength); + + if (spectre_page_status(m_page) != SPECTRE_STATUS_SUCCESS) + { + free(pageData); + pageData = 0; + + return QImage(); + } + + QImage auxiliaryImage(pageData, rowLength / 4, h, QImage::Format_RGB32); + QImage image(boundingRect.isNull() ? auxiliaryImage.copy(0, 0, w, h) : auxiliaryImage.copy(boundingRect)); + + free(pageData); + pageData = 0; + + return image; +} + +PsDocument::PsDocument(SpectreDocument* document, SpectreRenderContext* renderContext) : + m_mutex(), + m_document(document), + m_renderContext(renderContext) +{ +} + +PsDocument::~PsDocument() +{ + spectre_render_context_free(m_renderContext); + m_renderContext = 0; + + spectre_document_free(m_document); + m_document = 0; +} + +int PsDocument::numberOfPages() const +{ + QMutexLocker mutexLocker(&m_mutex); + + return spectre_document_get_n_pages(m_document); +} + +Page* PsDocument::page(int index) const +{ + QMutexLocker mutexLocker(&m_mutex); + + if(SpectrePage* page = spectre_document_get_page(m_document, index)) + { + return new PsPage(&m_mutex, page, m_renderContext); + } + + return 0; +} + +QStringList PsDocument::saveFilter() const +{ + QMutexLocker mutexLocker(&m_mutex); + + if(spectre_document_is_eps(m_document)) + { + return QStringList() << QLatin1String("Encapsulated PostScript (*.eps)"); + } + else + { + return QStringList() << QLatin1String("PostScript (*.ps)"); + } +} + +bool PsDocument::canSave() const +{ + return true; +} + +bool PsDocument::save(const QString& filePath, bool withChanges) const +{ + Q_UNUSED(withChanges) + + QMutexLocker mutexLocker(&m_mutex); + + spectre_document_save(m_document, QFile::encodeName(filePath)); + + return spectre_document_status(m_document) == SPECTRE_STATUS_SUCCESS; +} + +bool PsDocument::canBePrintedUsingCUPS() const +{ + return true; +} + +Properties PsDocument::properties() const +{ + Properties properties; + + QMutexLocker mutexLocker(&m_mutex); + + const QString title = QString::fromLocal8Bit(spectre_document_get_title(m_document)); + const QString createdFor = QString::fromLocal8Bit(spectre_document_get_for(m_document)); + const QString creator = QString::fromLocal8Bit(spectre_document_get_creator(m_document)); + const QString creationDate = QString::fromLocal8Bit(spectre_document_get_creation_date(m_document)); + const QString format = QString::fromLocal8Bit(spectre_document_get_format(m_document)); + const QString languageLevel = QString::number(spectre_document_get_language_level(m_document)); + + properties.push_back(qMakePair(tr("Title"), title)); + properties.push_back(qMakePair(tr("Created for"), createdFor)); + properties.push_back(qMakePair(tr("Creator"), creator)); + properties.push_back(qMakePair(tr("Creation date"), creationDate)); + properties.push_back(qMakePair(tr("Format"), format)); + properties.push_back(qMakePair(tr("Language level"), languageLevel)); + + return properties; +} + +} // Model + +PsSettingsWidget::PsSettingsWidget(QSettings* settings, QWidget* parent) : SettingsWidget(parent), + m_settings(settings) +{ + m_layout = new QFormLayout(this); + + // graphics antialias bits + + m_graphicsAntialiasBitsSpinBox = new QSpinBox(this); + m_graphicsAntialiasBitsSpinBox->setRange(1, 4); + m_graphicsAntialiasBitsSpinBox->setValue(m_settings->value("graphicsAntialiasBits", Defaults::graphicsAntialiasBits).toInt()); + + m_layout->addRow(tr("Graphics antialias bits:"), m_graphicsAntialiasBitsSpinBox); + + // text antialias bits + + m_textAntialiasBitsSpinBox = new QSpinBox(this); + m_textAntialiasBitsSpinBox->setRange(1, 2); + m_textAntialiasBitsSpinBox->setValue(m_settings->value("textAntialiasBits", Defaults::textAntialiasBits).toInt()); + + m_layout->addRow(tr("Text antialias bits:"), m_textAntialiasBitsSpinBox); +} + +void PsSettingsWidget::accept() +{ + m_settings->setValue("graphicsAntialiasBits", m_graphicsAntialiasBitsSpinBox->value()); + m_settings->setValue("textAntialiasBits", m_textAntialiasBitsSpinBox->value()); +} + +void PsSettingsWidget::reset() +{ + m_graphicsAntialiasBitsSpinBox->setValue(Defaults::graphicsAntialiasBits); + m_textAntialiasBitsSpinBox->setValue(Defaults::textAntialiasBits); +} + +PsPlugin::PsPlugin(QObject* parent) : QObject(parent) +{ + setObjectName("PsPlugin"); + + m_settings = new QSettings("qpdfview", "ps-plugin", this); +} + +Model::Document* PsPlugin::loadDocument(const QString& filePath) const +{ + SpectreDocument* document = spectre_document_new(); + + spectre_document_load(document, QFile::encodeName(filePath)); + + if (spectre_document_status(document) != SPECTRE_STATUS_SUCCESS) + { + spectre_document_free(document); + + return 0; + } + + SpectreRenderContext* renderContext = spectre_render_context_new(); + + spectre_render_context_set_antialias_bits(renderContext, + m_settings->value("graphicsAntialiasBits", Defaults::graphicsAntialiasBits).toInt(), + m_settings->value("textAntialiasBits", Defaults::textAntialiasBits).toInt()); + + return new Model::PsDocument(document, renderContext); +} + +SettingsWidget* PsPlugin::createSettingsWidget(QWidget* parent) const +{ + return new PsSettingsWidget(m_settings, parent); +} + +} // qpdfview + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) + +Q_EXPORT_PLUGIN2(qpdfview_ps, qpdfview::PsPlugin) + +#endif // QT_VERSION diff --git a/sources/psmodel.h b/sources/psmodel.h new file mode 100644 index 0000000..d11a9c7 --- /dev/null +++ b/sources/psmodel.h @@ -0,0 +1,151 @@ +/* + +Copyright 2013 Alexander Volkov +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef PSMODEL_H +#define PSMODEL_H + +#include +#include + +class QFormLayout; +class QSettings; +class QSpinBox; + +struct SpectrePage; +struct SpectreDocument; +struct SpectreRenderContext; + +#include "model.h" + +namespace qpdfview +{ + +class PsPlugin; + +namespace Model +{ + class PsPage : public Page + { + friend class PsDocument; + + public: + ~PsPage(); + + QSizeF size() const; + + QImage render(qreal horizontalResolution, qreal verticalResolution, Rotation rotation, QRect boundingRect) const; + + private: + Q_DISABLE_COPY(PsPage) + + PsPage(QMutex* mutex, SpectrePage* page, SpectreRenderContext* renderContext); + + mutable QMutex* m_mutex; + SpectrePage* m_page; + SpectreRenderContext* m_renderContext; + + }; + + class PsDocument : public Document + { + Q_DECLARE_TR_FUNCTIONS(Model::PsDocument) + + friend class qpdfview::PsPlugin; + + public: + ~PsDocument(); + + int numberOfPages() const; + + Page* page(int index) const; + + QStringList saveFilter() const; + + bool canSave() const; + bool save(const QString& filePath, bool withChanges) const; + + bool canBePrintedUsingCUPS() const; + + Properties properties() const; + + private: + Q_DISABLE_COPY(PsDocument) + + PsDocument(SpectreDocument* document, SpectreRenderContext* renderContext); + + mutable QMutex m_mutex; + SpectreDocument* m_document; + SpectreRenderContext* m_renderContext; + + }; +} + +class PsSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + PsSettingsWidget(QSettings* settings, QWidget* parent = 0); + + void accept(); + void reset(); + +private: + Q_DISABLE_COPY(PsSettingsWidget) + + QSettings* m_settings; + + QFormLayout* m_layout; + + QSpinBox* m_graphicsAntialiasBitsSpinBox; + QSpinBox* m_textAntialiasBitsSpinBox; + +}; + +class PsPlugin : public QObject, Plugin +{ + Q_OBJECT + Q_INTERFACES(qpdfview::Plugin) + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + Q_PLUGIN_METADATA(IID "local.qpdfview.Plugin") + +#endif // QT_VERSION + +public: + PsPlugin(QObject* parent = 0); + + Model::Document* loadDocument(const QString& filePath) const; + + SettingsWidget* createSettingsWidget(QWidget* parent) const; + +private: + Q_DISABLE_COPY(PsPlugin) + + QSettings* m_settings; + +}; + +} // qpdfview + +#endif // PSMODEL_H diff --git a/sources/recentlyclosedmenu.cpp b/sources/recentlyclosedmenu.cpp new file mode 100644 index 0000000..3d326a4 --- /dev/null +++ b/sources/recentlyclosedmenu.cpp @@ -0,0 +1,95 @@ +/* + +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "recentlyclosedmenu.h" + +#include "documentview.h" + +namespace qpdfview +{ + +RecentlyClosedMenu::RecentlyClosedMenu(int count, QWidget* parent) : ToolTipMenu(parent), + m_count(count) +{ + menuAction()->setText(tr("&Recently closed")); + + m_tabActionGroup = new QActionGroup(this); + connect(m_tabActionGroup, SIGNAL(triggered(QAction*)), SLOT(on_tabAction_triggered(QAction*))); + + m_separatorAction = addSeparator(); + + m_clearListAction = addAction(tr("&Clear list")); + connect(m_clearListAction, SIGNAL(triggered()), SLOT(on_clearList_triggered())); +} + +void RecentlyClosedMenu::addTabAction(QAction* tabAction) +{ + if(m_tabActionGroup->actions().count() >= m_count) + { + QAction* first = m_tabActionGroup->actions().at(0); + + removeAction(first); + m_tabActionGroup->removeAction(first); + + first->parent()->deleteLater(); + } + + insertAction(actions().at(0), tabAction); + m_tabActionGroup->addAction(tabAction); +} + +void RecentlyClosedMenu::triggerFirstTabAction() +{ + const QList< QAction* >& actions = m_tabActionGroup->actions(); + + if(!actions.isEmpty()) + { + on_tabAction_triggered(actions.first()); + } +} + +void RecentlyClosedMenu::triggerLastTabAction() +{ + const QList< QAction* >& actions = m_tabActionGroup->actions(); + + if(!actions.isEmpty()) + { + on_tabAction_triggered(actions.last()); + } +} + +void RecentlyClosedMenu::on_tabAction_triggered(QAction* tabAction) +{ + removeAction(tabAction); + m_tabActionGroup->removeAction(tabAction); + + emit tabActionTriggered(tabAction); +} + +void RecentlyClosedMenu::on_clearList_triggered() +{ + foreach(QAction* action, m_tabActionGroup->actions()) + { + action->parent()->deleteLater(); + } +} + +} // qpdfview diff --git a/sources/recentlyclosedmenu.h b/sources/recentlyclosedmenu.h new file mode 100644 index 0000000..1e7fb7f --- /dev/null +++ b/sources/recentlyclosedmenu.h @@ -0,0 +1,63 @@ +/* + +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef RECENTLYCLOSEDMENU_H +#define RECENTLYCLOSEDMENU_H + +#include "miscellaneous.h" + +namespace qpdfview +{ + +class RecentlyClosedMenu : public ToolTipMenu +{ + Q_OBJECT + +public: + explicit RecentlyClosedMenu(int count, QWidget *parent = 0); + + void addTabAction(QAction* tabAction); + +signals: + void tabActionTriggered(QAction* tabAction); + +public slots: + void triggerFirstTabAction(); + void triggerLastTabAction(); + +protected slots: + void on_tabAction_triggered(QAction* tabAction); + void on_clearList_triggered(); + +private: + Q_DISABLE_COPY(RecentlyClosedMenu) + + int m_count; + + QActionGroup* m_tabActionGroup; + QAction* m_separatorAction; + QAction* m_clearListAction; + +}; + +} // qpdfview + +#endif // RECENTLYCLOSEDMENU_H diff --git a/sources/recentlyusedmenu.cpp b/sources/recentlyusedmenu.cpp new file mode 100644 index 0000000..7d606c1 --- /dev/null +++ b/sources/recentlyusedmenu.cpp @@ -0,0 +1,121 @@ +/* + +Copyright 2012-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "recentlyusedmenu.h" + +#include + +namespace qpdfview +{ + +RecentlyUsedMenu::RecentlyUsedMenu(const QStringList& absoluteFilePaths, int count, QWidget* parent) : ToolTipMenu(parent), + m_count(count) +{ + menuAction()->setText(tr("Recently &used")); + menuAction()->setIcon(QIcon::fromTheme("document-open-recent")); + menuAction()->setIconVisibleInMenu(true); + + m_openActionGroup = new QActionGroup(this); + connect(m_openActionGroup, SIGNAL(triggered(QAction*)), SLOT(on_open_triggered(QAction*))); + + m_separatorAction = addSeparator(); + + m_clearListAction = addAction(tr("&Clear list")); + connect(m_clearListAction, SIGNAL(triggered()), SLOT(on_clearList_triggered())); + + foreach(const QString& absoluteFilePath, absoluteFilePaths) + { + addOpenAction(QFileInfo(absoluteFilePath)); + } +} + +void RecentlyUsedMenu::addOpenAction(const QFileInfo& fileInfo) +{ + foreach(QAction* action, m_openActionGroup->actions()) + { + if(action->data().toString() == fileInfo.absoluteFilePath()) + { + removeAction(action); + m_openActionGroup->removeAction(action); + + insertAction(actions().at(0), action); + m_openActionGroup->addAction(action); + + return; + } + } + + if(m_openActionGroup->actions().count() >= m_count) + { + QAction* first = m_openActionGroup->actions().at(0); + + removeAction(first); + m_openActionGroup->removeAction(first); + + delete first; + } + + QAction* action = new QAction(fileInfo.completeBaseName(), this); + action->setToolTip(fileInfo.absoluteFilePath()); + action->setData(fileInfo.absoluteFilePath()); + + insertAction(actions().at(0), action); + m_openActionGroup->addAction(action); +} + +void RecentlyUsedMenu::removeOpenAction(const QString& filePath) +{ + const QFileInfo fileInfo(filePath); + + foreach(QAction* action, m_openActionGroup->actions()) + { + if(action->data().toString() == fileInfo.absoluteFilePath()) + { + delete action; + + break; + } + } +} + +QStringList RecentlyUsedMenu::filePaths() const +{ + QStringList filePaths; + + foreach(const QAction* action, m_openActionGroup->actions()) + { + filePaths.append(action->data().toString()); + } + + return filePaths; +} + +void RecentlyUsedMenu::on_open_triggered(QAction* action) +{ + emit openTriggered(action->data().toString()); +} + +void RecentlyUsedMenu::on_clearList_triggered() +{ + qDeleteAll(m_openActionGroup->actions()); +} + +} // qpdfview diff --git a/sources/recentlyusedmenu.h b/sources/recentlyusedmenu.h new file mode 100644 index 0000000..139f048 --- /dev/null +++ b/sources/recentlyusedmenu.h @@ -0,0 +1,64 @@ +/* + +Copyright 2012-2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef RECENTLYUSEDMENU_H +#define RECENTLYUSEDMENU_H + +#include "miscellaneous.h" + +class QFileInfo; + +namespace qpdfview +{ + +class RecentlyUsedMenu : public ToolTipMenu +{ + Q_OBJECT + +public: + explicit RecentlyUsedMenu(const QStringList& filePaths, int count, QWidget* parent = 0); + + void addOpenAction(const QFileInfo& fileInfo); + void removeOpenAction(const QString& filePath); + + QStringList filePaths() const; + +signals: + void openTriggered(const QString& filePath); + +protected slots: + void on_open_triggered(QAction* action); + void on_clearList_triggered(); + +private: + Q_DISABLE_COPY(RecentlyUsedMenu) + + int m_count; + + QActionGroup* m_openActionGroup; + QAction* m_separatorAction; + QAction* m_clearListAction; + +}; + +} // qpdfview + +#endif // RECENTLYUSEDMENU_H diff --git a/sources/renderparam.h b/sources/renderparam.h new file mode 100644 index 0000000..c922087 --- /dev/null +++ b/sources/renderparam.h @@ -0,0 +1,156 @@ +/* + +Copyright 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef RENDERPARAM_H +#define RENDERPARAM_H + +#include + +#include "global.h" + +namespace qpdfview +{ + +enum RenderFlag +{ + InvertColors = 1 << 0, + ConvertToGrayscale = 1 << 1, + TrimMargins = 1 << 2, + DarkenWithPaperColor = 1 << 3, + LightenWithPaperColor = 1 << 4 +}; + +Q_DECLARE_FLAGS(RenderFlags, RenderFlag) + +class RenderParam +{ +public: + RenderParam(int resolutionX = 72, int resolutionY = 72, qreal devicePixelRatio = 1.0, + qreal scaleFactor = 1.0, Rotation rotation = RotateBy0, + RenderFlags flags = 0) : d(new SharedData) + { + d->resolutionX = resolutionX; + d->resolutionY = resolutionY; + d->devicePixelRatio = devicePixelRatio; + d->scaleFactor = scaleFactor; + d->rotation = rotation; + d->flags = flags; + } + + int resolutionX() const { return d->resolutionX; } + int resolutionY() const { return d->resolutionY; } + void setResolution(int resolutionX, int resolutionY) + { + d->resolutionX = resolutionX; + d->resolutionY = resolutionY; + } + + qreal devicePixelRatio() const { return d->devicePixelRatio; } + void setDevicePixelRatio(qreal devicePixelRatio) { d->devicePixelRatio = devicePixelRatio; } + + qreal scaleFactor() const { return d->scaleFactor; } + void setScaleFactor(qreal scaleFactor) { d->scaleFactor = scaleFactor; } + + Rotation rotation() const { return d->rotation; } + void setRotation(Rotation rotation) { d->rotation = rotation; } + + RenderFlags flags() const { return d->flags; } + void setFlags(RenderFlags flags) { d->flags = flags; } + void setFlag(RenderFlag flag, bool enabled = true) + { + if(enabled) + { + d->flags |= flag; + } + else + { + d->flags &= ~flag; + } + } + + bool invertColors() const { return d->flags.testFlag(InvertColors); } + void setInvertColors(bool invertColors) { setFlag(InvertColors, invertColors); } + + bool convertToGrayscale() const { return d->flags.testFlag(ConvertToGrayscale); } + void setConvertToGrayscale(bool convertToGrayscale) { setFlag(ConvertToGrayscale, convertToGrayscale); } + + bool trimMargins() const { return d->flags.testFlag(TrimMargins); } + void setTrimMargins(bool trimMargins) { setFlag(TrimMargins, trimMargins); } + + bool darkenWithPaperColor() const { return d->flags.testFlag(DarkenWithPaperColor); } + void setDarkenWithPaperColor(bool darkenWithPaperColor) { setFlag(DarkenWithPaperColor, darkenWithPaperColor); } + + bool lightenWithPaperColor() const { return d->flags.testFlag(LightenWithPaperColor); } + void setLightenWithPaperColor(bool lightenWithPaperColor) { setFlag(LightenWithPaperColor, lightenWithPaperColor); } + + bool operator==(const RenderParam& other) const + { + if(d == other.d) + { + return true; + } + else + { + return d->resolutionX == other.d->resolutionX + && d->resolutionY == other.d->resolutionY + && qFuzzyCompare(d->devicePixelRatio, other.d->devicePixelRatio) + && qFuzzyCompare(d->scaleFactor, other.d->scaleFactor) + && d->rotation == other.d->rotation + && d->flags == other.d->flags; + } + } + + bool operator!=(const RenderParam& other) const { return !operator==(other); } + +private: + struct SharedData : public QSharedData + { + int resolutionX; + int resolutionY; + qreal devicePixelRatio; + + qreal scaleFactor; + Rotation rotation; + + RenderFlags flags; + + }; + + QSharedDataPointer< SharedData > d; + +}; + +inline QDataStream& operator<<(QDataStream& stream, const RenderParam& that) +{ + stream << that.resolutionX() + << that.resolutionY() + << that.devicePixelRatio() + << that.scaleFactor() + << that.rotation() + << that.flags(); + + return stream; +} + +} // qpdfview + +#endif // RENDERPARAM_H + diff --git a/sources/rendertask.cpp b/sources/rendertask.cpp new file mode 100644 index 0000000..f2818fe --- /dev/null +++ b/sources/rendertask.cpp @@ -0,0 +1,542 @@ +/* + +Copyright 2013-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "rendertask.h" + +#include +#include +#include +#include + +#include "model.h" +#include "settings.h" + +namespace qpdfview +{ + +namespace +{ + +void registerEventType(QEvent::Type& registeredType) +{ + if(registeredType == QEvent::None) + { + registeredType = QEvent::Type(QEvent::registerEventType()); + } +} + +qreal scaledResolutionX(const RenderParam& renderParam) +{ + return renderParam.devicePixelRatio() + * renderParam.resolutionX() + * renderParam.scaleFactor(); +} + +qreal scaledResolutionY(const RenderParam& renderParam) +{ + return renderParam.devicePixelRatio() + * renderParam.resolutionY() + * renderParam.scaleFactor(); +} + +const QRgb alphaMask = 0xffu << 24; + +bool columnHasPaperColor(int x, QRgb paperColor, const QImage& image) +{ + const int height = image.height(); + + for(int y = 0; y < height; ++y) + { + const QRgb color = image.pixel(x, y); + + if(qAlpha(color) != 0 && paperColor != (color | alphaMask)) + { + return false; + } + } + + return true; +} + +bool rowHasPaperColor(int y, QRgb paperColor, const QImage& image) +{ + const int width = image.width(); + + for(int x = 0; x < width; ++x) + { + const QRgb color = image.pixel(x, y); + + if(qAlpha(color) != 0 && paperColor != (color | alphaMask)) + { + return false; + } + } + + return true; +} + +QRectF trimMargins(QRgb paperColor, const QImage& image) +{ + if(image.isNull()) + { + return QRectF(0.0, 0.0, 1.0, 1.0); + } + + const int width = image.width(); + const int height = image.height(); + + int left; + for(left = 0; left < width; ++left) + { + if(!columnHasPaperColor(left, paperColor, image)) + { + break; + } + } + left = qMin(left, width / 3); + + int right; + for(right = width - 1; right >= left; --right) + { + if(!columnHasPaperColor(right, paperColor, image)) + { + break; + } + } + right = qMax(right, 2 * width / 3); + + int top; + for(top = 0; top < height; ++top) + { + if(!rowHasPaperColor(top, paperColor, image)) + { + break; + } + } + top = qMin(top, height / 3); + + int bottom; + for(bottom = height - 1; bottom >= top; --bottom) + { + if(!rowHasPaperColor(bottom, paperColor, image)) + { + break; + } + } + bottom = qMax(bottom, 2 * height / 3); + + left = qMax(left - width / 100, 0); + top = qMax(top - height / 100, 0); + + right = qMin(right + width / 100, width); + bottom = qMin(bottom + height / 100, height); + + return QRectF(static_cast< qreal >(left) / width, + static_cast< qreal >(top) / height, + static_cast< qreal >(right - left) / width, + static_cast< qreal >(bottom - top) / height); +} + +void convertToGrayscale(QImage& image) +{ + QRgb* const begin = reinterpret_cast< QRgb* >(image.bits()); + QRgb* const end = reinterpret_cast< QRgb* >(image.bits() + image.byteCount()); + + for(QRgb* pointer = begin; pointer != end; ++pointer) + { + const int gray = qGray(*pointer); + const int alpha = qAlpha(*pointer); + + *pointer = qRgba(gray, gray, gray, alpha); + } +} + +void composeWithColor(QPainter::CompositionMode mode, const QColor& color, QImage& image) +{ + QPainter painter(&image); + + painter.setCompositionMode(mode); + painter.fillRect(image.rect(), color); +} + +} // anonymous + +RenderTaskParent::~RenderTaskParent() +{ +} + +struct RenderTaskFinishedEvent : public QEvent +{ + static QEvent::Type registeredType; + + RenderTaskFinishedEvent(RenderTaskParent* const parent, + const RenderParam& renderParam, + const QRect& rect, + const bool prefetch, + const QImage& image, + const QRectF& cropRect) + : QEvent(registeredType) + , parent(parent) + , renderParam(renderParam) + , rect(rect) + , prefetch(prefetch) + , image(image) + , cropRect(cropRect) + { + } + ~RenderTaskFinishedEvent(); + + void dispatch() const + { + parent->on_finished(renderParam, + rect, prefetch, + image, cropRect); + } + + RenderTaskParent* const parent; + + const RenderParam renderParam; + const QRect rect; + const bool prefetch; + const QImage image; + const QRectF cropRect; +}; + +QEvent::Type RenderTaskFinishedEvent::registeredType = QEvent::None; + +RenderTaskFinishedEvent::~RenderTaskFinishedEvent() +{ +} + +struct RenderTaskCanceledEvent : public QEvent +{ + + static QEvent::Type registeredType; + + RenderTaskCanceledEvent(RenderTaskParent* parent) + : QEvent(registeredType) + , parent(parent) + { + } + ~RenderTaskCanceledEvent(); + + void dispatch() const + { + parent->on_canceled(); + } + + RenderTaskParent* const parent; +}; + +QEvent::Type RenderTaskCanceledEvent::registeredType = QEvent::None; + +RenderTaskCanceledEvent::~RenderTaskCanceledEvent() +{ +} + +struct DeleteParentLaterEvent : public QEvent +{ + static QEvent::Type registeredType; + + DeleteParentLaterEvent(RenderTaskParent* const parent) + : QEvent(registeredType) + , parent(parent) + { + } + ~DeleteParentLaterEvent(); + + void dispatch() const + { + delete parent; + } + + RenderTaskParent* const parent; +}; + +QEvent::Type DeleteParentLaterEvent::registeredType = QEvent::None; + +DeleteParentLaterEvent::~DeleteParentLaterEvent() +{ +} + +namespace +{ + +class DispatchChain +{ +public: + DispatchChain(const QEvent* const event, const QSet< RenderTaskParent* >& activeParents) : + m_event(event), + m_activeParents(activeParents) + { + } + + template< typename Event > + DispatchChain& dispatch() + { + if(m_event != 0 && m_event->type() == Event::registeredType) + { + const Event* const event = static_cast< const Event* >(m_event); + + m_event = 0; + + if(m_activeParents.contains(event->parent)) + { + event->dispatch(); + } + } + + return *this; + } + + bool wasDispatched() const + { + return m_event == 0; + } + +private: + const QEvent* m_event; + const QSet< RenderTaskParent* >& m_activeParents; +}; + +} // anonymous + +RenderTaskDispatcher::RenderTaskDispatcher(QObject* parent) : QObject(parent) +{ + registerEventType(DeleteParentLaterEvent::registeredType); + registerEventType(RenderTaskFinishedEvent::registeredType); + registerEventType(RenderTaskCanceledEvent::registeredType); +} + +void RenderTaskDispatcher::finished(RenderTaskParent* parent, + const RenderParam& renderParam, + const QRect& rect, bool prefetch, + const QImage& image, const QRectF& cropRect) +{ + RenderTaskFinishedEvent* const event = new RenderTaskFinishedEvent(parent, + renderParam, + rect, prefetch, + image, cropRect); + + QApplication::postEvent(this, event, Qt::HighEventPriority); +} + +void RenderTaskDispatcher::canceled(RenderTaskParent* parent) +{ + QApplication::postEvent(this, new RenderTaskCanceledEvent(parent), Qt::HighEventPriority); +} + +void RenderTaskDispatcher::deleteParentLater(RenderTaskParent* parent) +{ + QApplication::postEvent(this, new DeleteParentLaterEvent(parent), Qt::LowEventPriority); +} + +bool RenderTaskDispatcher::event(QEvent* event) +{ + DispatchChain chain(event, m_activeParents); + + chain.dispatch< RenderTaskFinishedEvent >() + .dispatch< RenderTaskCanceledEvent >() + .dispatch< DeleteParentLaterEvent >(); + + return chain.wasDispatched() || QObject::event(event); +} + +void RenderTaskDispatcher::addActiveParent(RenderTaskParent* parent) +{ + m_activeParents.insert(parent); +} + +void RenderTaskDispatcher::removeActiveParent(RenderTaskParent* parent) +{ + m_activeParents.remove(parent); +} + +RenderTaskDispatcher* RenderTask::s_dispatcher = 0; + +Settings* RenderTask::s_settings = 0; + +const RenderParam RenderTask::s_defaultRenderParam; + +RenderTask::RenderTask(Model::Page* page, RenderTaskParent* parent) : QRunnable(), + m_parent(parent), + m_isRunning(false), + m_wasCanceled(NotCanceled), + m_page(page), + m_renderParam(s_defaultRenderParam), + m_rect(), + m_prefetch(false) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + if(s_dispatcher == 0) + { + s_dispatcher = new RenderTaskDispatcher(qApp); + } + + setAutoDelete(false); + + s_dispatcher->addActiveParent(m_parent); +} + +RenderTask::~RenderTask() +{ + s_dispatcher->removeActiveParent(m_parent); +} + +void RenderTask::wait() +{ + QMutexLocker mutexLocker(&m_mutex); + + while(m_isRunning) + { + m_waitCondition.wait(&m_mutex); + } +} + +bool RenderTask::isRunning() const +{ + QMutexLocker mutexLocker(&m_mutex); + + return m_isRunning; +} + +void RenderTask::run() +{ +#define CANCELLATION_POINT if(testCancellation()) { finish(true); return; } + + CANCELLATION_POINT + + QImage image; + QRectF cropRect; + +#if QT_VERSION >= QT_VERSION_CHECK(5,1,0) + + const qreal devicePixelRatio = m_renderParam.devicePixelRatio(); + + const QRect rect = + qFuzzyCompare(1.0, devicePixelRatio) + ? m_rect + : QTransform().scale(devicePixelRatio, devicePixelRatio).mapRect(m_rect); + +#else + + const QRect& rect = m_rect; + +#endif // QT_VERSION + + image = m_page->render(scaledResolutionX(m_renderParam), scaledResolutionY(m_renderParam), + m_renderParam.rotation(), rect); + +#if QT_VERSION >= QT_VERSION_CHECK(5,1,0) + + image.setDevicePixelRatio(devicePixelRatio); + +#endif // QT_VERSION + + if(m_renderParam.darkenWithPaperColor()) + { + CANCELLATION_POINT + + composeWithColor(QPainter::CompositionMode_Darken, s_settings->pageItem().paperColor(), image); + } + else if(m_renderParam.lightenWithPaperColor()) + { + CANCELLATION_POINT + + composeWithColor(QPainter::CompositionMode_Lighten, s_settings->pageItem().paperColor(), image); + } + + if(m_renderParam.trimMargins()) + { + CANCELLATION_POINT + + cropRect = trimMargins(s_settings->pageItem().paperColor().rgb() | alphaMask, image); + } + + if(m_renderParam.convertToGrayscale()) + { + CANCELLATION_POINT + + convertToGrayscale(image); + } + + if(m_renderParam.invertColors()) + { + CANCELLATION_POINT + + image.invertPixels(); + } + + CANCELLATION_POINT + + s_dispatcher->finished(m_parent, + m_renderParam, + m_rect, m_prefetch, + image, cropRect); + + finish(false); + +#undef CANCELLATION_POINT +} + +void RenderTask::start(const RenderParam& renderParam, + const QRect& rect, bool prefetch) +{ + m_renderParam = renderParam; + + m_rect = rect; + m_prefetch = prefetch; + + m_mutex.lock(); + m_isRunning = true; + m_mutex.unlock(); + + resetCancellation(); + + QThreadPool::globalInstance()->start(this, prefetch ? 1 : 2); +} + +void RenderTask::deleteParentLater() +{ + s_dispatcher->deleteParentLater(m_parent); +} + +void RenderTask::finish(bool canceled) +{ + m_renderParam = s_defaultRenderParam; + + if(canceled) + { + s_dispatcher->canceled(m_parent); + } + + m_mutex.lock(); + m_isRunning = false; + m_mutex.unlock(); + + m_waitCondition.wakeAll(); +} + +} // qpdfview diff --git a/sources/rendertask.h b/sources/rendertask.h new file mode 100644 index 0000000..a65465a --- /dev/null +++ b/sources/rendertask.h @@ -0,0 +1,204 @@ +/* + +Copyright 2013-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef RENDERTASK_H +#define RENDERTASK_H + +#include +#include +#include +#include +#include + +#include "renderparam.h" + +namespace qpdfview +{ + +namespace Model +{ +class Page; +} + +class Settings; + +class RenderTaskParent +{ + friend struct RenderTaskFinishedEvent; + friend struct RenderTaskCanceledEvent; + friend struct DeleteParentLaterEvent; + +public: + virtual ~RenderTaskParent(); + +private: + virtual void on_finished(const RenderParam& renderParam, + const QRect& rect, bool prefetch, + const QImage& image, const QRectF& cropRect) = 0; + virtual void on_canceled() = 0; +}; + +class RenderTaskDispatcher : public QObject +{ + Q_OBJECT + + friend class RenderTask; + +private: + Q_DISABLE_COPY(RenderTaskDispatcher) + + RenderTaskDispatcher(QObject* parent = 0); + + + void finished(RenderTaskParent* parent, + const RenderParam& renderParam, + const QRect& rect, bool prefetch, + const QImage& image, const QRectF& cropRect); + void canceled(RenderTaskParent* parent); + + void deleteParentLater(RenderTaskParent* parent); + +public: + bool event(QEvent* event); + +private: + QSet< RenderTaskParent* > m_activeParents; + + void addActiveParent(RenderTaskParent* parent); + void removeActiveParent(RenderTaskParent* parent); + +}; + +class RenderTask : public QRunnable +{ +public: + explicit RenderTask(Model::Page* page, RenderTaskParent* parent = 0); + ~RenderTask(); + + void wait(); + + bool isRunning() const; + + bool wasCanceled() const { return loadCancellation() != NotCanceled; } + bool wasCanceledNormally() const { return loadCancellation() == CanceledNormally; } + bool wasCanceledForcibly() const { return loadCancellation() == CanceledForcibly; } + + void run(); + + void start(const RenderParam& renderParam, + const QRect& rect, bool prefetch); + + void cancel(bool force = false) { setCancellation(force); } + + void deleteParentLater(); + +private: + Q_DISABLE_COPY(RenderTask) + + static Settings* s_settings; + + static RenderTaskDispatcher* s_dispatcher; + RenderTaskParent* m_parent; + + mutable QMutex m_mutex; + QWaitCondition m_waitCondition; + + bool m_isRunning; + QAtomicInt m_wasCanceled; + + enum + { + NotCanceled = 0, + CanceledNormally = 1, + CanceledForcibly = 2 + }; + + void setCancellation(bool force); + void resetCancellation(); + bool testCancellation(); + int loadCancellation() const; + + void finish(bool canceled); + + + Model::Page* m_page; + + static const RenderParam s_defaultRenderParam; + RenderParam m_renderParam; + + QRect m_rect; + bool m_prefetch; + +}; + +#if QT_VERSION > QT_VERSION_CHECK(5,0,0) + +inline void RenderTask::setCancellation(bool force) +{ + m_wasCanceled.storeRelease(force ? CanceledForcibly : CanceledNormally); +} + +inline void RenderTask::resetCancellation() +{ + m_wasCanceled.storeRelease(NotCanceled); +} + +inline bool RenderTask::testCancellation() +{ + return m_prefetch ? + m_wasCanceled.load() == CanceledForcibly : + m_wasCanceled.load() != NotCanceled; +} + +inline int RenderTask::loadCancellation() const +{ + return m_wasCanceled.load(); +} + +#else + +inline void RenderTask::setCancellation(bool force) +{ + m_wasCanceled.fetchAndStoreRelease(force ? CanceledForcibly : CanceledNormally); +} + +inline void RenderTask::resetCancellation() +{ + m_wasCanceled.fetchAndStoreRelease(NotCanceled); +} + +inline bool RenderTask::testCancellation() +{ + return m_prefetch ? + m_wasCanceled.testAndSetRelaxed(CanceledForcibly, CanceledForcibly) : + !m_wasCanceled.testAndSetRelaxed(NotCanceled, NotCanceled); +} + +inline int RenderTask::loadCancellation() const +{ + return m_wasCanceled; +} + +#endif // QT_VERSION + +} // qpdfview + +#endif // RENDERTASK_H diff --git a/sources/searchitemdelegate.cpp b/sources/searchitemdelegate.cpp new file mode 100644 index 0000000..528114f --- /dev/null +++ b/sources/searchitemdelegate.cpp @@ -0,0 +1,144 @@ +/* + +Copyright 2018 S. Razi Alavizadeh +Copyright 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "searchitemdelegate.h" + +#include +#include +#include +#include + +#include "searchmodel.h" + +namespace qpdfview +{ + +SearchItemDelegate::SearchItemDelegate(QObject* parent) : QStyledItemDelegate(parent) +{ +} + +void SearchItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QStyledItemDelegate::paint(painter, option, index); + + if(index.column() != 0) + { + return; + } + + const int progress = index.data(SearchModel::ProgressRole).toInt(); + + if(progress != 0) + { + paintProgress(painter, option, progress); + return; + } + + const QString matchedText = index.data(SearchModel::MatchedTextRole).toString(); + const QString surroundingText = index.data(SearchModel::SurroundingTextRole).toString(); + + if(!matchedText.isEmpty() && !surroundingText.isEmpty()) + { + paintText(painter, option, matchedText, surroundingText); + return; + } +} + +void SearchItemDelegate::paintProgress(QPainter* painter, const QStyleOptionViewItem& option, + int progress) const +{ + QRect highlightedRect = option.rect; + highlightedRect.setWidth(progress * highlightedRect.width() / 100); + + painter->save(); + + painter->setCompositionMode(QPainter::CompositionMode_Multiply); + painter->fillRect(highlightedRect, option.palette.highlight()); + + painter->restore(); +} + +void SearchItemDelegate::paintText(QPainter* painter, const QStyleOptionViewItem& option, + const QString& matchedText, const QString& surroundingText) const +{ + const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; + const QRect textRect = option.rect.adjusted(textMargin, 0, -textMargin, 0); + const QString elidedText = option.fontMetrics.elidedText(surroundingText, option.textElideMode, textRect.width()); + + QTextOption textOption; + textOption.setWrapMode(QTextOption::NoWrap); + textOption.setTextDirection(elidedText.isRightToLeft() ? Qt::RightToLeft : Qt::LeftToRight); + textOption.setAlignment(QStyle::visualAlignment(textOption.textDirection(), option.displayAlignment)); + + QTextLayout textLayout; + textLayout.setTextOption(textOption); + textLayout.setText(elidedText); + textLayout.setFont(option.font); + + QFont font = textLayout.font(); + font.setWeight(QFont::Light); + textLayout.setFont(font); + + + QList< QTextLayout::FormatRange > additionalFormats; + + for(int index = 0; (index = surroundingText.indexOf(matchedText, index)) != -1; index += matchedText.length()) + { + QTextLayout::FormatRange formatRange; + formatRange.start = index; + formatRange.length = matchedText.length(); + formatRange.format.setFontWeight(QFont::Bold); + + additionalFormats.append(formatRange); + } + + textLayout.setAdditionalFormats(additionalFormats); + + + textLayout.beginLayout(); + + QTextLine textLine = textLayout.createLine(); + + if(!textLine.isValid()) + { + return; + } + + textLine.setLineWidth(textRect.width()); + + textLayout.endLayout(); + + + const QSize layoutSize(textRect.width(), qFloor(textLine.height())); + const QRect layoutRect = QStyle::alignedRect(option.direction, option.displayAlignment, layoutSize, textRect); + + painter->save(); + + painter->setClipping(true); + painter->setClipRect(layoutRect); + + textLine.draw(painter, layoutRect.topLeft()); + + painter->restore(); +} + +} // qpdfview diff --git a/sources/searchitemdelegate.h b/sources/searchitemdelegate.h new file mode 100644 index 0000000..f6c4b79 --- /dev/null +++ b/sources/searchitemdelegate.h @@ -0,0 +1,49 @@ +/* + +Copyright 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SEARCHITEMDELEGATE_H +#define SEARCHITEMDELEGATE_H + +#include + +namespace qpdfview +{ + +class SearchItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit SearchItemDelegate(QObject* parent = 0); + + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; + +private: + void paintProgress(QPainter* painter, const QStyleOptionViewItem& option, + int progress) const; + void paintText(QPainter* painter, const QStyleOptionViewItem& option, + const QString& matchedText, const QString& surroundingText) const; + +}; + +} // qpdfview + +#endif // SEARCHITEMDELEGATE_H diff --git a/sources/searchmodel.cpp b/sources/searchmodel.cpp new file mode 100644 index 0000000..724d438 --- /dev/null +++ b/sources/searchmodel.cpp @@ -0,0 +1,511 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2014-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "searchmodel.h" + +#include +#include + +#include "documentview.h" + +static inline bool operator<(int page, const QPair< int, QRectF >& result) { return page < result.first; } +static inline bool operator<(const QPair< int, QRectF >& result, int page) { return result.first < page; } + +namespace qpdfview +{ + +SearchModel* SearchModel::s_instance = 0; + +SearchModel* SearchModel::instance() +{ + if(s_instance == 0) + { + s_instance = new SearchModel(qApp); + } + + return s_instance; +} + +SearchModel::~SearchModel() +{ + foreach(TextWatcher* watcher, m_textWatchers) + { + watcher->waitForFinished(); + watcher->deleteLater(); + } + + qDeleteAll(m_results); + + s_instance = 0; +} + +QModelIndex SearchModel::index(int row, int column, const QModelIndex& parent) const +{ + if(hasIndex(row, column, parent)) + { + if(!parent.isValid()) + { + return createIndex(row, column); + } + else + { + DocumentView* view = m_views.value(parent.row(), 0); + + return createIndex(row, column, view); + } + } + + return QModelIndex(); +} + +QModelIndex SearchModel::parent(const QModelIndex& child) const +{ + if(child.internalPointer() != 0) + { + DocumentView* view = static_cast< DocumentView* >(child.internalPointer()); + + return findView(view); + } + + return QModelIndex(); +} + +int SearchModel::rowCount(const QModelIndex& parent) const +{ + if(!parent.isValid()) + { + return m_views.count(); + } + else if(parent.internalPointer() == 0) + { + DocumentView* view = m_views.value(parent.row(), 0); + const Results* results = m_results.value(view, 0); + + if(results != 0) + { + return results->count(); + } + } + + return 0; +} + +int SearchModel::columnCount(const QModelIndex&) const +{ + return 2; +} + +QVariant SearchModel::data(const QModelIndex& index, int role) const +{ + if(!index.isValid()) + { + return QVariant(); + } + + if(index.internalPointer() == 0) + { + DocumentView* view = m_views.value(index.row(), 0); + const Results* results = m_results.value(view, 0); + + if(results == 0) + { + return QVariant(); + } + + switch(role) + { + default: + return QVariant(); + case CountRole: + return results->count(); + case ProgressRole: + return view->searchProgress(); + case Qt::DisplayRole: + switch(index.column()) + { + case 0: + return view->title(); + case 1: + return results->count(); + } + case Qt::ToolTipRole: + return tr("%1 occurrences").arg(results->count()); + } + } + else + { + DocumentView* view = static_cast< DocumentView* >(index.internalPointer()); + const Results* results = m_results.value(view, 0); + + if(results == 0 || index.row() >= results->count()) + { + return QVariant(); + } + + const Result& result = results->at(index.row()); + + switch(role) + { + default: + return QVariant(); + case PageRole: + return result.first; + case RectRole: + return result.second; + case TextRole: + return view->searchText(); + case MatchCaseRole: + return view->searchMatchCase(); + case WholeWordsRole: + return view->searchWholeWords(); + case MatchedTextRole: + return fetchMatchedText(view, result); + case SurroundingTextRole: + return fetchSurroundingText(view, result); + case Qt::DisplayRole: + switch(index.column()) + { + case 0: + return QVariant(); + case 1: + return result.first; + } + case Qt::ToolTipRole: + return tr("%1 occurrences on page %2").arg(numberOfResultsOnPage(view, result.first)).arg(result.first); + } + } + + return QVariant(); +} + +DocumentView* SearchModel::viewForIndex(const QModelIndex& index) const +{ + if(index.internalPointer() == 0) + { + return m_views.value(index.row(), 0); + } + else + { + return static_cast< DocumentView* >(index.internalPointer()); + } +} + +bool SearchModel::hasResults(DocumentView* view) const +{ + const Results* results = m_results.value(view, 0); + + return results != 0 && !results->isEmpty(); +} + +bool SearchModel::hasResultsOnPage(DocumentView* view, int page) const +{ + const Results* results = m_results.value(view, 0); + + return results != 0 && qBinaryFind(results->begin(), results->end(), page) != results->end(); +} + +int SearchModel::numberOfResultsOnPage(DocumentView* view, int page) const +{ + const Results* results = m_results.value(view, 0); + + if(results == 0) + { + return 0; + } + + const Results::const_iterator pageBegin = qLowerBound(results->constBegin(), results->constEnd(), page); + const Results::const_iterator pageEnd = qUpperBound(pageBegin, results->constEnd(), page); + + return pageEnd - pageBegin; +} + +QList< QRectF > SearchModel::resultsOnPage(DocumentView* view, int page) const +{ + QList< QRectF > resultsOnPage; + + const Results* results = m_results.value(view, 0); + + if(results != 0) + { + const Results::const_iterator pageBegin = qLowerBound(results->constBegin(), results->constEnd(), page); + const Results::const_iterator pageEnd = qUpperBound(pageBegin, results->constEnd(), page); + + for(Results::const_iterator iterator = pageBegin; iterator != pageEnd; ++iterator) + { + resultsOnPage.append(iterator->second); + } + } + + return resultsOnPage; +} + +QPersistentModelIndex SearchModel::findResult(DocumentView* view, const QPersistentModelIndex& currentResult, int currentPage, FindDirection direction) const +{ + const Results* results = m_results.value(view, 0); + + if(results == 0 || results->isEmpty()) + { + return QPersistentModelIndex(); + } + + const int rows = results->count(); + int row; + + if(currentResult.isValid()) + { + switch(direction) + { + default: + case FindNext: + row = (currentResult.row() + 1) % rows; + break; + case FindPrevious: + row = (currentResult.row() + rows - 1) % rows; + break; + } + } + else + { + switch(direction) + { + default: + case FindNext: + { + Results::const_iterator lowerBound = qLowerBound(results->constBegin(), results->constEnd(), currentPage); + + row = (lowerBound - results->constBegin()) % rows; + break; + } + case FindPrevious: + { + Results::const_iterator upperBound = qUpperBound(results->constBegin(), results->constEnd(), currentPage); + + row = ((upperBound - results->constBegin()) + rows - 1) % rows; + break; + } + } + } + + return createIndex(row, 0, view); +} + +void SearchModel::insertResults(DocumentView* view, int page, const QList< QRectF >& resultsOnPage) +{ + if(resultsOnPage.isEmpty()) + { + return; + } + + const QModelIndex parent = findOrInsertView(view); + + Results* results = m_results.value(view); + + Results::iterator at = qLowerBound(results->begin(), results->end(), page); + const int row = at - results->begin(); + + beginInsertRows(parent, row, row + resultsOnPage.size() - 1); + + for(int index = resultsOnPage.size() - 1; index >= 0; --index) + { + at = results->insert(at, qMakePair(page, resultsOnPage.at(index))); + } + + endInsertRows(); +} + +void SearchModel::clearResults(DocumentView* view) +{ + typedef QHash< TextCacheKey, TextWatcher* >::iterator WatcherIterator; + + for(WatcherIterator iterator = m_textWatchers.begin(); iterator != m_textWatchers.end(); ++iterator) + { + const TextCacheKey& key = iterator.key(); + + if(key.first == view) + { + TextWatcher* const watcher = iterator.value(); + watcher->cancel(); + watcher->waitForFinished(); + watcher->deleteLater(); + + iterator = m_textWatchers.erase(iterator); + continue; + } + } + + foreach(const TextCacheKey& key, m_textCache.keys()) + { + if(key.first == view) + { + m_textCache.remove(key); + } + } + + const QVector< DocumentView* >::iterator at = qBinaryFind(m_views.begin(), m_views.end(), view); + const int row = at - m_views.begin(); + + if(at == m_views.end()) + { + return; + } + + beginRemoveRows(QModelIndex(), row, row); + + m_views.erase(at); + delete m_results.take(view); + + endRemoveRows(); +} + +void SearchModel::updateProgress(DocumentView* view) +{ + QModelIndex index = findView(view); + + if(index.isValid()) + { + emit dataChanged(index, index); + } +} + +void SearchModel::on_fetchSurroundingText_finished() +{ + TextWatcher* watcher = dynamic_cast< TextWatcher* >(sender()); + + if(watcher == 0 || watcher->isCanceled()) + { + return; + } + + const TextJob job = watcher->result(); + + m_textWatchers.remove(job.key); + watcher->deleteLater(); + + DocumentView* view = job.key.first; + const Results* results = m_results.value(view, 0); + + if(results == 0) + { + return; + } + + const int cost = job.object->first.length() + job.object->second.length(); + + m_textCache.insert(job.key, job.object, cost); + + emit dataChanged(createIndex(0, 0, view), createIndex(results->count() - 1, 0, view)); +} + +SearchModel::SearchModel(QObject* parent) : QAbstractItemModel(parent), + m_views(), + m_results(), + m_textCache(1 << 16), + m_textWatchers() +{ +} + +QModelIndex SearchModel::findView(DocumentView *view) const +{ + const QVector< DocumentView* >::const_iterator at = qBinaryFind(m_views.constBegin(), m_views.constEnd(), view); + const int row = at - m_views.constBegin(); + + if(at == m_views.constEnd()) + { + return QModelIndex(); + } + + return createIndex(row, 0); +} + +QModelIndex SearchModel::findOrInsertView(DocumentView* view) +{ + const QVector< DocumentView* >::iterator at = qLowerBound(m_views.begin(), m_views.end(), view); + const int row = at - m_views.begin(); + + if(at == m_views.end() || *at != view) + { + beginInsertRows(QModelIndex(), row, row); + + m_views.insert(at, view); + m_results.insert(view, new Results); + + endInsertRows(); + } + + return createIndex(row, 0); +} + +QString SearchModel::fetchMatchedText(DocumentView* view, const SearchModel::Result& result) const +{ + const TextCacheObject* object = fetchText(view, result); + + return object != 0 ? object->first : QString(); +} + +QString SearchModel::fetchSurroundingText(DocumentView* view, const Result& result) const +{ + const TextCacheObject* object = fetchText(view, result); + + return object != 0 ? object->second : QString(); +} + +const SearchModel::TextCacheObject* SearchModel::fetchText(DocumentView* view, const SearchModel::Result& result) const +{ + const TextCacheKey key = textCacheKey(view, result); + + if(const TextCacheObject* object = m_textCache.object(key)) + { + return object; + } + + if(m_textWatchers.size() < 20 && !m_textWatchers.contains(key)) + { + TextWatcher* watcher = new TextWatcher(); + m_textWatchers.insert(key, watcher); + + connect(watcher, SIGNAL(finished()), SLOT(on_fetchSurroundingText_finished())); + + watcher->setFuture(QtConcurrent::run(textJob, key, result)); + } + + return 0; +} + +inline SearchModel::TextCacheKey SearchModel::textCacheKey(DocumentView* view, const Result& result) +{ + QByteArray key; + + QDataStream(&key, QIODevice::WriteOnly) + << result.first + << result.second; + + return qMakePair(view, key); +} + +SearchModel::TextJob SearchModel::textJob(const TextCacheKey& key, const Result& result) +{ + const QPair< QString, QString >& text = key.first->searchContext(result.first, result.second); + + return TextJob(key, new TextCacheObject(text)); +} + +} // qpdfview diff --git a/sources/searchmodel.h b/sources/searchmodel.h new file mode 100644 index 0000000..2d11231 --- /dev/null +++ b/sources/searchmodel.h @@ -0,0 +1,140 @@ +/* + +Copyright 2014 S. Razi Alavizadeh +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SEARCHMODEL_H +#define SEARCHMODEL_H + +#include +#include +#include +#include + +namespace qpdfview +{ + +class DocumentView; + +class SearchModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + static SearchModel* instance(); + ~SearchModel(); + + + QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const; + + QModelIndex parent(const QModelIndex& child) const; + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + enum + { + CountRole = Qt::UserRole + 1, + ProgressRole, + PageRole, + RectRole, + TextRole, + MatchCaseRole, + WholeWordsRole, + MatchedTextRole, + SurroundingTextRole + }; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + + DocumentView* viewForIndex(const QModelIndex& index) const; + + + bool hasResults(DocumentView* view) const; + bool hasResultsOnPage(DocumentView* view, int page) const; + int numberOfResultsOnPage(DocumentView* view, int page) const; + QList< QRectF > resultsOnPage(DocumentView* view, int page) const; + + enum FindDirection + { + FindNext, + FindPrevious + }; + + QPersistentModelIndex findResult(DocumentView* view, const QPersistentModelIndex& currentResult, int currentPage, FindDirection direction) const; + + void insertResults(DocumentView* view, int page, const QList< QRectF >& resultsOnPage); + void clearResults(DocumentView* view); + + void updateProgress(DocumentView* view); + +protected slots: + void on_fetchSurroundingText_finished(); + +private: + Q_DISABLE_COPY(SearchModel) + + static SearchModel* s_instance; + SearchModel(QObject* parent = 0); + + QVector< DocumentView* > m_views; + + QModelIndex findView(DocumentView* view) const; + QModelIndex findOrInsertView(DocumentView* view); + + + typedef QPair< int, QRectF > Result; + typedef QList< Result > Results; + + QHash< DocumentView*, Results* > m_results; + + + typedef QPair< DocumentView*, QByteArray > TextCacheKey; + typedef QPair< QString, QString > TextCacheObject; + + struct TextJob + { + TextCacheKey key; + TextCacheObject* object; + + TextJob() : key(), object(0) {} + TextJob(const TextCacheKey& key, TextCacheObject* object) : key(key), object(object) {} + + }; + + typedef QFutureWatcher< TextJob > TextWatcher; + + mutable QCache< TextCacheKey, TextCacheObject > m_textCache; + mutable QHash< TextCacheKey, TextWatcher* > m_textWatchers; + + QString fetchMatchedText(DocumentView* view, const Result& result) const; + QString fetchSurroundingText(DocumentView* view, const Result& result) const; + + const TextCacheObject* fetchText(DocumentView* view, const Result& result) const; + + static TextCacheKey textCacheKey(DocumentView* view, const Result& result); + static TextJob textJob(const TextCacheKey& key, const Result& result); + +}; + +} // qpdfview + +#endif // SEARCHMODEL_H diff --git a/sources/searchtask.cpp b/sources/searchtask.cpp new file mode 100644 index 0000000..cf283ed --- /dev/null +++ b/sources/searchtask.cpp @@ -0,0 +1,157 @@ +/* + +Copyright 2012-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "searchtask.h" + +#include "model.h" + +#include + +namespace qpdfview +{ + +namespace +{ + +struct Search +{ + Search(const QString& text, const bool matchCase, const bool wholeWords) : + text(text), + matchCase(matchCase), + wholeWords(wholeWords) + { + } + + const QString& text; + const bool matchCase; + const bool wholeWords; + + typedef QList< QRectF > result_type; + + result_type operator()(const Model::Page* const page) const + { + return page->search(text, matchCase, wholeWords); + } +}; + +struct FutureWrapper +{ + FutureWrapper(const QVector< const Model::Page* >& pages, const Search& search) : + pages(pages), + search(search) + { + } + + const QVector< const Model::Page* >& pages; + const Search& search; + + void cancel() + { + } + + Search::result_type resultAt(int index) + { + return search(pages.at(index)); + } +}; + +} + +SearchTask::SearchTask(QObject* parent) : QThread(parent), + m_wasCanceled(NotCanceled), + m_progress(0), + m_pages(), + m_text(), + m_matchCase(false), + m_wholeWords(false), + m_beginAtPage(1), + m_parallelExecution(false) +{ +} + +void SearchTask::run() +{ + QVector< const Model::Page* > pages; + pages.reserve(m_pages.count()); + + for(int index = 0, count = m_pages.count(); index < count; ++index) + { + const int shiftedIndex = (index + m_beginAtPage - 1) % count; + pages.append(m_pages.at(shiftedIndex)); + } + + const Search search(m_text, m_matchCase, m_wholeWords); + + if(m_parallelExecution) + { + processResults(QtConcurrent::mapped(pages, search)); + } + else + { + processResults(FutureWrapper(pages, search)); + } +} + +void SearchTask::start(const QVector< Model::Page* >& pages, + const QString& text, bool matchCase, bool wholeWords, + int beginAtPage, bool parallelExecution) +{ + m_pages = pages; + + m_text = text; + m_matchCase = matchCase; + m_wholeWords = wholeWords; + m_beginAtPage = beginAtPage; + m_parallelExecution = parallelExecution; + + resetCancellation(); + releaseProgress(0); + + QThread::start(); +} + +template< typename Future > +void SearchTask::processResults(Future future) +{ + for(int index = 0, count = m_pages.count(); index < count; ++index) + { + if(testCancellation()) + { + future.cancel(); + break; + } + + const int shiftedIndex = (index + m_beginAtPage - 1) % count; + const QList< QRectF > results = future.resultAt(index); + + emit resultsReady(shiftedIndex, results); + + const int progress = 100 * (index + 1) / m_pages.count(); + + releaseProgress(progress); + + emit progressChanged(progress); + } + + releaseProgress(0); +} + +} // qpdfview diff --git a/sources/searchtask.h b/sources/searchtask.h new file mode 100644 index 0000000..b83fa2a --- /dev/null +++ b/sources/searchtask.h @@ -0,0 +1,178 @@ +/* + +Copyright 2012-2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SEARCHTASK_H +#define SEARCHTASK_H + +#include +#include +#include + +namespace qpdfview +{ + +namespace Model +{ +class Page; +} + +class SearchTask : public QThread +{ + Q_OBJECT + +public: + explicit SearchTask(QObject* parent = 0); + + bool wasCanceled() const { return loadCancellation() != NotCanceled; } + int progress() const { return acquireProgress(); } + + const QString& text() const { return m_text; } + bool matchCase() const { return m_matchCase; } + bool wholeWords() const { return m_wholeWords; } + + void run(); + +signals: + void progressChanged(int progress); + + void resultsReady(int index, const QList< QRectF >& results); + +public slots: + void start(const QVector< Model::Page* >& pages, + const QString& text, bool matchCase, bool wholeWords, + int beginAtPage = 1, bool parallelExecution = false); + + void cancel() { setCancellation(); } + +private: + Q_DISABLE_COPY(SearchTask) + + QAtomicInt m_wasCanceled; + mutable QAtomicInt m_progress; + + enum + { + NotCanceled = 0, + Canceled = 1 + }; + + void setCancellation(); + void resetCancellation(); + bool testCancellation(); + int loadCancellation() const; + + void releaseProgress(int value); + int acquireProgress() const; + int loadProgress() const; + + template< typename Future > + void processResults(Future future); + + + QVector< Model::Page* > m_pages; + + QString m_text; + bool m_matchCase; + bool m_wholeWords; + int m_beginAtPage; + bool m_parallelExecution; + +}; + +#if QT_VERSION > QT_VERSION_CHECK(5,0,0) + +inline void SearchTask::setCancellation() +{ + m_wasCanceled.storeRelease(Canceled); +} + +inline void SearchTask::resetCancellation() +{ + m_wasCanceled.storeRelease(NotCanceled); +} + +inline bool SearchTask::testCancellation() +{ + return m_wasCanceled.load() != NotCanceled; +} + +inline int SearchTask::loadCancellation() const +{ + return m_wasCanceled.load(); +} + +inline void SearchTask::releaseProgress(int value) +{ + m_progress.storeRelease(value); +} + +inline int SearchTask::acquireProgress() const +{ + return m_progress.loadAcquire(); +} + +inline int SearchTask::loadProgress() const +{ + return m_progress.load(); +} + +#else + +inline void SearchTask::setCancellation() +{ + m_wasCanceled.fetchAndStoreRelease(Canceled); +} + +inline void SearchTask::resetCancellation() +{ + m_wasCanceled.fetchAndStoreRelease(NotCanceled); +} + +inline bool SearchTask::testCancellation() +{ + return !m_wasCanceled.testAndSetRelaxed(NotCanceled, NotCanceled); +} + +inline int SearchTask::loadCancellation() const +{ + return m_wasCanceled; +} + +inline void SearchTask::releaseProgress(int value) +{ + m_progress.fetchAndStoreRelease(value); +} + +inline int SearchTask::acquireProgress() const +{ + return m_progress.fetchAndAddAcquire(0); +} + +inline int SearchTask::loadProgress() const +{ + return m_progress; +} + +#endif // QT_VERSION + +} // qpdfview + +#endif // SEARCHTHREAD_H diff --git a/sources/settings.cpp b/sources/settings.cpp new file mode 100644 index 0000000..5b77c5f --- /dev/null +++ b/sources/settings.cpp @@ -0,0 +1,1231 @@ +/* + +Copyright 2015 S. Razi Alavizadeh +Copyright 2012-2015 Adam Reichold +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "settings.h" + +#include +#include +#include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + +#include + +#else + +#include + +#endif // QT_VERSION + +namespace +{ + +inline QStringList trimmed(const QStringList& list) +{ + QStringList trimmedList; + + foreach(const QString& item, list) + { + trimmedList.append(item.trimmed()); + } + + return trimmedList; +} + +inline int toInt(const QString& text, int defaultValue) +{ + bool ok = false; + const int value = text.toInt(&ok); + return ok ? value : defaultValue; +} + +int dataSize(const QSettings* settings, const QString& key, int defaultValue) +{ + QString text = settings->value(key, QString("%1K").arg(defaultValue)).toString().trimmed(); + + if(text.endsWith('M')) + { + text.chop(1); + + return toInt(text, defaultValue / 1024) * 1024; + } + else if(text.endsWith('K')) + { + text.chop(1); + + return toInt(text, defaultValue); + } + else + { + return toInt(text, defaultValue * 1024) / 1024; + } +} + +void setDataSize(QSettings* settings, const QString& key, int value) +{ + settings->setValue(key, QString("%1K").arg(value)); +} + +} // anonymous + +namespace qpdfview +{ + +Settings* Settings::s_instance = 0; + +Settings* Settings::instance() +{ + if(s_instance == 0) + { + s_instance = new Settings(qApp); + + s_instance->sync(); + } + + return s_instance; +} + +Settings::~Settings() +{ + s_instance = 0; +} + +// page item + +void Settings::PageItem::sync() +{ + m_cacheSize = dataSize(m_settings, "pageItem/cacheSize", Defaults::PageItem::cacheSize()); + + m_useTiling = m_settings->value("pageItem/useTiling", Defaults::PageItem::useTiling()).toBool(); + m_tileSize = m_settings->value("pageItem/tileSize", Defaults::PageItem::tileSize()).toInt(); + + m_keepObsoletePixmaps = m_settings->value("pageItem/keepObsoletePixmaps", Defaults::PageItem::keepObsoletePixmaps()).toBool(); + m_useDevicePixelRatio = m_settings->value("pageItem/useDevicePixelRatio", Defaults::PageItem::useDevicePixelRatio()).toBool(); + + m_decoratePages = m_settings->value("pageItem/decoratePages", Defaults::PageItem::decoratePages()).toBool(); + m_decorateLinks = m_settings->value("pageItem/decorateLinks", Defaults::PageItem::decorateLinks()).toBool(); + m_decorateFormFields = m_settings->value("pageItem/decorateFormFields", Defaults::PageItem::decorateFormFields()).toBool(); + + m_backgroundColor = m_settings->value("pageItem/backgroundColor", Defaults::PageItem::backgroundColor()).value< QColor >(); + m_paperColor = m_settings->value("pageItem/paperColor", Defaults::PageItem::paperColor()).value< QColor >(); + + m_highlightColor = m_settings->value("pageItem/highlightColor", Defaults::PageItem::highlightColor()).value< QColor >(); +} + +void Settings::PageItem::setCacheSize(int cacheSize) +{ + if(cacheSize >= 0) + { + m_cacheSize = cacheSize; + setDataSize(m_settings, "pageItem/cacheSize", cacheSize); + } +} + +void Settings::PageItem::setUseTiling(bool useTiling) +{ + m_useTiling = useTiling; + m_settings->setValue("pageItem/useTiling", useTiling); +} + +void Settings::PageItem::setKeepObsoletePixmaps(bool keepObsoletePixmaps) +{ + m_keepObsoletePixmaps = keepObsoletePixmaps; + m_settings->setValue("pageItem/keepObsoletePixmaps", keepObsoletePixmaps); +} + +void Settings::PageItem::setUseDevicePixelRatio(bool useDevicePixelRatio) +{ + m_useDevicePixelRatio = useDevicePixelRatio; + m_settings->setValue("pageItem/useDevicePixelRatio", useDevicePixelRatio); +} + +void Settings::PageItem::setDecoratePages(bool decoratePages) +{ + m_decoratePages = decoratePages; + m_settings->setValue("pageItem/decoratePages", decoratePages); +} + +void Settings::PageItem::setDecorateLinks(bool decorateLinks) +{ + m_decorateLinks = decorateLinks; + m_settings->setValue("pageItem/decorateLinks", decorateLinks); +} + +void Settings::PageItem::setDecorateFormFields(bool decorateFormFields) +{ + m_decorateFormFields = decorateFormFields; + m_settings->setValue("pageItem/decorateFormFields", decorateFormFields); +} + +void Settings::PageItem::setBackgroundColor(const QColor& backgroundColor) +{ + m_backgroundColor = backgroundColor; + m_settings->setValue("pageItem/backgroundColor", backgroundColor); +} + +void Settings::PageItem::setPaperColor(const QColor& paperColor) +{ + m_paperColor = paperColor; + m_settings->setValue("pageItem/paperColor", paperColor); +} + +void Settings::PageItem::setHighlightColor(const QColor& highlightColor) +{ + m_highlightColor = highlightColor; + m_settings->setValue("pageItem/highlightColor", highlightColor); +} + +QColor Settings::PageItem::annotationColor() const +{ + return m_settings->value("pageItem/annotationColor", Defaults::PageItem::annotationColor()).value< QColor >(); +} + +void Settings::PageItem::setAnnotationColor(const QColor& annotationColor) +{ + m_settings->setValue("pageItem/annotationColor", annotationColor); +} + +Qt::KeyboardModifiers Settings::PageItem::copyToClipboardModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("pageItem/copyToClipboardModifiers", static_cast< int >(Defaults::PageItem::copyToClipboardModifiers())).toInt()); +} + +void Settings::PageItem::setCopyToClipboardModifiers(Qt::KeyboardModifiers modifiers) +{ + m_settings->setValue("pageItem/copyToClipboardModifiers", static_cast< int >(modifiers)); +} + +Qt::KeyboardModifiers Settings::PageItem::addAnnotationModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("pageItem/addAnnotationModifiers", static_cast< int >(Defaults::PageItem::addAnnotationModifiers())).toInt()); +} + +void Settings::PageItem::setAddAnnotationModifiers(Qt::KeyboardModifiers modifiers) +{ + m_settings->setValue("pageItem/addAnnotationModifiers", static_cast< int >(modifiers)); +} + +Qt::KeyboardModifiers Settings::PageItem::zoomToSelectionModifiers() const +{ + return static_cast< Qt::KeyboardModifiers>(m_settings->value("pageItem/zoomToSelectionModifiers", static_cast< int >(Defaults::PageItem::zoomToSelectionModifiers())).toInt()); +} + +void Settings::PageItem::setZoomToSelectionModifiers(Qt::KeyboardModifiers modifiers) +{ + m_settings->setValue("pageItem/zoomToSelectionModifiers", static_cast< int >(modifiers)); +} + +Qt::KeyboardModifiers Settings::PageItem::openInSourceEditorModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("pageItem/openInSourceEditorModifiers", static_cast< int >(Defaults::PageItem::openInSourceEditorModifiers())).toInt()); +} + +void Settings::PageItem::setOpenInSourceEditorModifiers(Qt::KeyboardModifiers modifiers) +{ + m_settings->setValue("pageItem/openInSourceEditorModifiers", static_cast< int >(modifiers)); +} + +bool Settings::PageItem::annotationOverlay() const +{ + return m_settings->value("pageItem/annotationOverlay", Defaults::PageItem::annotationOverlay()).toBool(); +} + +void Settings::PageItem::setAnnotationOverlay(bool overlay) +{ + m_settings->setValue("pageItem/annotationOverlay", overlay); +} + +bool Settings::PageItem::formFieldOverlay() const +{ + return m_settings->value("pageItem/formFieldOverlay", Defaults::PageItem::formFieldOverlay()).toBool(); +} + +void Settings::PageItem::setFormFieldOverlay(bool overlay) +{ + m_settings->setValue("pageItem/formFieldOverlay", overlay); +} + +Settings::PageItem::PageItem(QSettings* settings) : + m_settings(settings), + m_cacheSize(Defaults::PageItem::cacheSize()), + m_progressIcon(), + m_errorIcon(), + m_keepObsoletePixmaps(Defaults::PageItem::keepObsoletePixmaps()), + m_useDevicePixelRatio(false), + m_decoratePages(Defaults::PageItem::decoratePages()), + m_decorateLinks(Defaults::PageItem::decorateLinks()), + m_decorateFormFields(Defaults::PageItem::decorateFormFields()), + m_backgroundColor(Defaults::PageItem::backgroundColor()), + m_paperColor(Defaults::PageItem::paperColor()), + m_highlightColor(Defaults::PageItem::highlightColor()) +{ +} + +// presentation view + +bool Settings::PresentationView::synchronize() const +{ + return m_settings->value("presentationView/synchronize", Defaults::PresentationView::synchronize()).toBool(); +} + +void Settings::PresentationView::setSynchronize(bool synchronize) +{ + m_settings->setValue("presentationView/synchronize", synchronize); +} + +int Settings::PresentationView::screen() const +{ + int screen = m_settings->value("presentationView/screen", Defaults::PresentationView::screen()).toInt(); + + if(screen < -1 || screen >= QApplication::desktop()->screenCount()) + { + screen = -1; + } + + return screen; +} + +void Settings::PresentationView::setScreen(int screen) +{ + m_settings->setValue("presentationView/screen", screen); +} + +QColor Settings::PresentationView::backgroundColor() const +{ + return m_settings->value("presentationView/backgroundColor", Defaults::PresentationView::backgroundColor()).value< QColor >(); +} + +void Settings::PresentationView::setBackgroundColor(const QColor& backgroundColor) +{ + m_settings->setValue("presentationView/backgroundColor", backgroundColor); +} + +Settings::PresentationView::PresentationView(QSettings* settings) : + m_settings(settings) +{ +} + +// document view + +void Settings::DocumentView::sync() +{ + m_prefetch = m_settings->value("documentView/prefetch", Defaults::DocumentView::prefetch()).toBool(); + m_prefetchDistance = m_settings->value("documentView/prefetchDistance", Defaults::DocumentView::prefetchDistance()).toInt(); + + m_pagesPerRow = m_settings->value("documentView/pagesPerRow", Defaults::DocumentView::pagesPerRow()).toInt(); + + m_minimalScrolling = m_settings->value("documentView/minimalScrolling", Defaults::DocumentView::minimalScrolling()).toBool(); + + m_highlightCurrentThumbnail = m_settings->value("documentView/highlightCurrentThumbnail", Defaults::DocumentView::highlightCurrentThumbnail()).toBool(); + m_limitThumbnailsToResults = m_settings->value("documentView/limitThumbnailsToResults", Defaults::DocumentView::limitThumbnailsToResults()).toBool(); + + m_pageSpacing = m_settings->value("documentView/pageSpacing", Defaults::DocumentView::pageSpacing()).toReal(); + m_thumbnailSpacing = m_settings->value("documentView/thumbnailSpacing", Defaults::DocumentView::thumbnailSpacing()).toReal(); + + m_thumbnailSize = m_settings->value("documentView/thumbnailSize", Defaults::DocumentView::thumbnailSize()).toReal(); +} + +bool Settings::DocumentView::openUrl() const +{ + return m_settings->value("documentView/openUrl", Defaults::DocumentView::openUrl()).toBool(); +} + +void Settings::DocumentView::setOpenUrl(bool openUrl) +{ + m_settings->setValue("documentView/openUrl", openUrl); +} + +bool Settings::DocumentView::autoRefresh() const +{ + return m_settings->value("documentView/autoRefresh", Defaults::DocumentView::autoRefresh()).toBool(); +} + +void Settings::DocumentView::setAutoRefresh(bool autoRefresh) +{ + m_settings->setValue("documentView/autoRefresh", autoRefresh); +} + +int Settings::DocumentView::autoRefreshTimeout() const +{ + return m_settings->value("documentView/autoRefreshTimeout", Defaults::DocumentView::autoRefreshTimeout()).toInt(); +} + +void Settings::DocumentView::setPrefetch(bool prefetch) +{ + m_prefetch = prefetch; + m_settings->setValue("documentView/prefetch", prefetch); +} + +void Settings::DocumentView::setPrefetchDistance(int prefetchDistance) +{ + if(prefetchDistance > 0) + { + m_prefetchDistance = prefetchDistance; + m_settings->setValue("documentView/prefetchDistance", prefetchDistance); + } +} + +int Settings::DocumentView::prefetchTimeout() const +{ + return m_settings->value("documentView/prefetchTimeout", Defaults::DocumentView::prefetchTimeout()).toInt(); +} + +void Settings::DocumentView::setPagesPerRow(int pagesPerRow) +{ + if(pagesPerRow > 0) + { + m_pagesPerRow = pagesPerRow; + m_settings->setValue("documentView/pagesPerRow", pagesPerRow); + } +} + +void Settings::DocumentView::setMinimalScrolling(bool minimalScrolling) +{ + m_minimalScrolling = minimalScrolling; + m_settings->setValue("documentView/minimalScrolling", minimalScrolling); +} + +void Settings::DocumentView::setHighlightCurrentThumbnail(bool highlightCurrentThumbnail) +{ + m_highlightCurrentThumbnail = highlightCurrentThumbnail; + m_settings->setValue("documentView/highlightCurrentThumbnail", highlightCurrentThumbnail); +} + +void Settings::DocumentView::setLimitThumbnailsToResults(bool limitThumbnailsToResults) +{ + m_limitThumbnailsToResults = limitThumbnailsToResults; + m_settings->setValue("documentView/limitThumbnailsToResults", limitThumbnailsToResults); +} + +qreal Settings::DocumentView::minimumScaleFactor() const +{ + return m_settings->value("documentView/minimumScaleFactor", Defaults::DocumentView::minimumScaleFactor()).toReal(); +} + +qreal Settings::DocumentView::maximumScaleFactor() const +{ + return m_settings->value("documentView/maximumScaleFactor", Defaults::DocumentView::maximumScaleFactor()).toReal(); +} + +qreal Settings::DocumentView::zoomFactor() const +{ + return m_settings->value("documentView/zoomFactor", Defaults::DocumentView::zoomFactor()).toReal(); +} + +void Settings::DocumentView::setZoomFactor(qreal zoomFactor) +{ + m_settings->setValue("documentView/zoomFactor", zoomFactor); +} + +void Settings::DocumentView::setPageSpacing(qreal pageSpacing) +{ + if(pageSpacing >= 0.0) + { + m_pageSpacing = pageSpacing; + m_settings->setValue("documentView/pageSpacing", pageSpacing); + } +} + +void Settings::DocumentView::setThumbnailSpacing(qreal thumbnailSpacing) +{ + if(thumbnailSpacing >= 0.0) + { + m_thumbnailSpacing = thumbnailSpacing; + m_settings->setValue("documentView/thumbnailSpacing", thumbnailSpacing); + } +} + +void Settings::DocumentView::setThumbnailSize(qreal thumbnailSize) +{ + if(thumbnailSize >= 0.0) + { + m_thumbnailSize = thumbnailSize; + m_settings->setValue("documentView/thumbnailSize", thumbnailSize); + } +} + +bool Settings::DocumentView::matchCase() const +{ + return m_settings->value("documentView/matchCase", Defaults::DocumentView::matchCase()).toBool(); +} + +void Settings::DocumentView::setMatchCase(bool matchCase) +{ + m_settings->setValue("documentView/matchCase", matchCase); +} + +bool Settings::DocumentView::wholeWords() const +{ + return m_settings->value("documentView/wholeWords", Defaults::DocumentView::wholeWords()).toBool(); +} + +void Settings::DocumentView::setWholeWords(bool wholeWords) +{ + m_settings->setValue("documentView/wholeWords", wholeWords); +} + +bool Settings::DocumentView::parallelSearchExecution() const +{ + return m_settings->value("documentView/parallelSearchExecution", Defaults::DocumentView::parallelSearchExecution()).toBool(); +} + +void Settings::DocumentView::setParallelSearchExecution(bool parallelSearchExecution) +{ + m_settings->setValue("documentView/parallelSearchExecution", parallelSearchExecution); +} + +int Settings::DocumentView::highlightDuration() const +{ + return m_settings->value("documentView/highlightDuration", Defaults::DocumentView::highlightDuration()).toInt(); +} + +void Settings::DocumentView::setHighlightDuration(int highlightDuration) +{ + if(highlightDuration >= 0) + { + m_settings->setValue("documentView/highlightDuration", highlightDuration); + } +} + +QString Settings::DocumentView::sourceEditor() const +{ + return m_settings->value("documentView/sourceEditor", Defaults::DocumentView::sourceEditor()).toString(); +} + +void Settings::DocumentView::setSourceEditor(const QString& sourceEditor) +{ + m_settings->setValue("documentView/sourceEditor", sourceEditor); +} + +Qt::KeyboardModifiers Settings::DocumentView::zoomModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("documentView/zoomModifiers", static_cast< int >(Defaults::DocumentView::zoomModifiers())).toInt()); +} + +void Settings::DocumentView::setZoomModifiers(Qt::KeyboardModifiers zoomModifiers) +{ + m_settings->setValue("documentView/zoomModifiers", static_cast< int >(zoomModifiers)); +} + +Qt::KeyboardModifiers Settings::DocumentView::rotateModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("documentView/rotateModifiers", static_cast< int >(Defaults::DocumentView::rotateModifiers())).toInt()); +} + +void Settings::DocumentView::setRotateModifiers(Qt::KeyboardModifiers rotateModifiers) +{ + m_settings->setValue("documentView/rotateModifiers", static_cast< int >(rotateModifiers)); +} + +Qt::KeyboardModifiers Settings::DocumentView::scrollModifiers() const +{ + return static_cast< Qt::KeyboardModifiers >(m_settings->value("documentView/scrollModifiers", static_cast< int >(Defaults::DocumentView::scrollModifiers())).toInt()); +} + +void Settings::DocumentView::setScrollModifiers(Qt::KeyboardModifiers scrollModifiers) +{ + m_settings->setValue("documentView/scrollModifiers", static_cast< int >(scrollModifiers)); +} + +// per-tab settings + +bool Settings::DocumentView::continuousMode() const +{ + return m_settings->value("documentView/continuousMode", Defaults::DocumentView::continuousMode()).toBool(); +} + +void Settings::DocumentView::setContinuousMode(bool continuousMode) +{ + m_settings->setValue("documentView/continuousMode", continuousMode); +} + +LayoutMode Settings::DocumentView::layoutMode() const +{ + return static_cast< LayoutMode >(m_settings->value("documentView/layoutMode", static_cast< uint >(Defaults::DocumentView::layoutMode())).toUInt()); +} + +void Settings::DocumentView::setLayoutMode(LayoutMode layoutMode) +{ + m_settings->setValue("documentView/layoutMode", static_cast< uint >(layoutMode)); +} + +bool Settings::DocumentView::rightToLeftMode() const +{ + return m_settings->value("documentView/rightToLeftMode", Defaults::DocumentView::rightToLeftMode()).toBool(); +} + +void Settings::DocumentView::setRightToLeftMode(bool rightToLeftMode) +{ + m_settings->setValue("documentView/rightToLeftMode", rightToLeftMode); +} + +ScaleMode Settings::DocumentView::scaleMode() const +{ + return static_cast< ScaleMode >(m_settings->value("documentView/scaleMode", static_cast< uint >(Defaults::DocumentView::scaleMode())).toUInt()); +} + +void Settings::DocumentView::setScaleMode(ScaleMode scaleMode) +{ + m_settings->setValue("documentView/scaleMode", static_cast< uint >(scaleMode)); +} + +qreal Settings::DocumentView::scaleFactor() const +{ + return m_settings->value("documentView/scaleFactor", Defaults::DocumentView::scaleFactor()).toReal(); +} + +void Settings::DocumentView::setScaleFactor(qreal scaleFactor) +{ + m_settings->setValue("documentView/scaleFactor", scaleFactor); +} + +Rotation Settings::DocumentView::rotation() const +{ + return static_cast< Rotation >(m_settings->value("documentView/rotation", static_cast< uint >(Defaults::DocumentView::rotation())).toUInt()); +} + +void Settings::DocumentView::setRotation(Rotation rotation) +{ + m_settings->setValue("documentView/rotation", static_cast< uint >(rotation)); +} + +bool Settings::DocumentView::invertColors() const +{ + return m_settings->value("documentView/invertColors", Defaults::DocumentView::invertColors()).toBool(); +} + +void Settings::DocumentView::setInvertColors(bool invertColors) +{ + m_settings->setValue("documentView/invertColors", invertColors); +} + +bool Settings::DocumentView::convertToGrayscale() const +{ + return m_settings->value("documentView/convertToGrayscale", Defaults::DocumentView::convertToGrayscale()).toBool(); +} + +void Settings::DocumentView::setConvertToGrayscale(bool convertToGrayscale) +{ + m_settings->setValue("documentView/convertToGrayscale", convertToGrayscale); +} + +bool Settings::DocumentView::trimMargins() const +{ + return m_settings->value("documentView/trimMargins", Defaults::DocumentView::trimMargins()).toBool(); +} + +void Settings::DocumentView::setTrimMargins(bool trimMargins) +{ + m_settings->setValue("documentView/trimMargins", trimMargins); +} + +CompositionMode Settings::DocumentView::compositionMode() const +{ + return static_cast< CompositionMode >(m_settings->value("documentView/compositionMode", static_cast< uint >(Defaults::DocumentView::compositionMode())).toInt()); +} + +void Settings::DocumentView::setCompositionMode(CompositionMode compositionMode) +{ + m_settings->setValue("documentView/compositionMode", static_cast< uint >(compositionMode)); +} + +bool Settings::DocumentView::highlightAll() const +{ + return m_settings->value("documentView/highlightAll", Defaults::DocumentView::highlightAll()).toBool(); +} + +void Settings::DocumentView::setHighlightAll(bool highlightAll) +{ + m_settings->setValue("documentView/highlightAll", highlightAll); +} + +Settings::DocumentView::DocumentView(QSettings *settings) : + m_settings(settings), + m_prefetch(Defaults::DocumentView::prefetch()), + m_prefetchDistance(Defaults::DocumentView::prefetchDistance()), + m_pagesPerRow(Defaults::DocumentView::pagesPerRow()), + m_highlightCurrentThumbnail(Defaults::DocumentView::highlightCurrentThumbnail()), + m_limitThumbnailsToResults(Defaults::DocumentView::limitThumbnailsToResults()), + m_pageSpacing(Defaults::DocumentView::pageSpacing()), + m_thumbnailSpacing(Defaults::DocumentView::thumbnailSpacing()), + m_thumbnailSize(Defaults::DocumentView::thumbnailSize()) +{ +} + +// main window + +bool Settings::MainWindow::trackRecentlyUsed() const +{ + return m_settings->value("mainWindow/trackRecentlyUsed", Defaults::MainWindow::trackRecentlyUsed()).toBool(); +} + +void Settings::MainWindow::setTrackRecentlyUsed(bool trackRecentlyUsed) +{ + m_settings->setValue("mainWindow/trackRecentlyUsed", trackRecentlyUsed); +} + +int Settings::MainWindow::recentlyUsedCount() const +{ + return m_settings->value("mainWindow/recentlyUsedCount", Defaults::MainWindow::recentlyUsedCount()).toInt(); +} + +void Settings::MainWindow::setRecentlyUsedCount(int recentlyUsedCount) +{ + m_settings->setValue("mainWindow/recentlyUsedCount", recentlyUsedCount); +} + +QStringList Settings::MainWindow::recentlyUsed() const +{ + return m_settings->value("mainWindow/recentlyUsed").toStringList(); +} + +void Settings::MainWindow::setRecentlyUsed(const QStringList& recentlyUsed) +{ + m_settings->setValue("mainWindow/recentlyUsed", recentlyUsed); +} + +bool Settings::MainWindow::keepRecentlyClosed() const +{ + return m_settings->value("mainWindow/keepRecentlyClosed", Defaults::MainWindow::keepRecentlyClosed()).toBool(); +} + +void Settings::MainWindow::setKeepRecentlyClosed(bool keepRecentlyClosed) +{ + m_settings->setValue("mainWindow/keepRecentlyClosed", keepRecentlyClosed); +} + +int Settings::MainWindow::recentlyClosedCount() const +{ + return m_settings->value("mainWindow/recentlyClosedCount", Defaults::MainWindow::recentlyClosedCount()).toInt(); +} + +void Settings::MainWindow::setRecentlyClosedCount(int recentlyClosedCount) +{ + m_settings->setValue("mainWindow/recentlyClosedCount", recentlyClosedCount); +} + +bool Settings::MainWindow::restoreTabs() const +{ + return m_settings->value("mainWindow/restoreTabs", Defaults::MainWindow::restoreTabs()).toBool(); +} + +void Settings::MainWindow::setRestoreTabs(bool restoreTabs) +{ + m_settings->setValue("mainWindow/restoreTabs", restoreTabs); +} + +bool Settings::MainWindow::restoreBookmarks() const +{ + return m_settings->value("mainWindow/restoreBookmarks", Defaults::MainWindow::restoreBookmarks()).toBool(); +} + +void Settings::MainWindow::setRestoreBookmarks(bool restoreBookmarks) +{ + m_settings->setValue("mainWindow/restoreBookmarks", restoreBookmarks); +} + +bool Settings::MainWindow::restorePerFileSettings() const +{ + return m_settings->value("mainWindow/restorePerFileSettings", Defaults::MainWindow::restorePerFileSettings()).toBool(); +} + +void Settings::MainWindow::setRestorePerFileSettings(bool restorePerFileSettings) +{ + m_settings->setValue("mainWindow/restorePerFileSettings", restorePerFileSettings); +} + +int Settings::MainWindow::perFileSettingsLimit() const +{ + return m_settings->value("mainWindow/perFileSettingsLimit", Defaults::MainWindow::perFileSettingsLimit()).toInt(); +} + +int Settings::MainWindow::saveDatabaseInterval() const +{ + return m_settings->value("mainWindow/saveDatabaseInterval", Defaults::MainWindow::saveDatabaseInterval()).toInt(); +} + +void Settings::MainWindow::setSaveDatabaseInterval(int saveDatabaseInterval) +{ + m_settings->setValue("mainWindow/saveDatabaseInterval", saveDatabaseInterval); +} + +int Settings::MainWindow::currentTabIndex() const +{ + return m_settings->value("mainWindow/currentTabIndex", -1).toInt(); +} + +void Settings::MainWindow::setCurrentTabIndex(int currentTabIndex) +{ + m_settings->setValue("mainWindow/currentTabIndex", currentTabIndex); +} + +int Settings::MainWindow::tabPosition() const +{ + return m_settings->value("mainWindow/tabPosition", Defaults::MainWindow::tabPosition()).toInt(); +} + +void Settings::MainWindow::setTabPosition(int tabPosition) +{ + if(tabPosition >= 0 && tabPosition < 4) + { + m_settings->setValue("mainWindow/tabPosition", tabPosition); + } +} + +int Settings::MainWindow::tabVisibility() const +{ + return m_settings->value("mainWindow/tabVisibility", Defaults::MainWindow::tabVisibility()).toInt(); +} + +void Settings::MainWindow::setTabVisibility(int tabVisibility) +{ + if(tabVisibility >= 0 && tabVisibility < 3) + { + m_settings->setValue("mainWindow/tabVisibility", tabVisibility); + } +} + +bool Settings::MainWindow::spreadTabs() const +{ + return m_settings->value("mainWindow/spreadTabs", Defaults::MainWindow::spreadTabs()).toBool(); +} + +void Settings::MainWindow::setSpreadTabs(bool spreadTabs) +{ + m_settings->setValue("mainWindow/spreadTabs", spreadTabs); +} + +bool Settings::MainWindow::newTabNextToCurrentTab() const +{ + return m_settings->value("mainWindow/newTabNextToCurrentTab", Defaults::MainWindow::newTabNextToCurrentTab()).toBool(); +} + +void Settings::MainWindow::setNewTabNextToCurrentTab(bool newTabNextToCurrentTab) +{ + m_settings->setValue("mainWindow/newTabNextToCurrentTab", newTabNextToCurrentTab); +} + +bool Settings::MainWindow::exitAfterLastTab() const +{ + return m_settings->value("mainWindow/exitAfterLastTab", Defaults::MainWindow::exitAfterLastTab()).toBool(); +} + +void Settings::MainWindow::setExitAfterLastTab(bool exitAfterLastTab) +{ + m_settings->setValue("mainWindow/exitAfterLastTab", exitAfterLastTab); +} + +bool Settings::MainWindow::documentTitleAsTabTitle() const +{ + return m_settings->value("mainWindow/documentAsTabTitle", Defaults::MainWindow::documentTitleAsTabTitle()).toBool(); +} + +void Settings::MainWindow::setDocumentTitleAsTabTitle(bool documentTitleAsTabTitle) +{ + m_settings->setValue("mainWindow/documentAsTabTitle", documentTitleAsTabTitle); +} + +bool Settings::MainWindow::currentPageInWindowTitle() const +{ + return m_settings->value("mainWindow/currentPageInWindowTitle", Defaults::MainWindow::currentPageInWindowTitle()).toBool(); +} + +void Settings::MainWindow::setCurrentPageInWindowTitle(bool currentPageInTabText) +{ + m_settings->setValue("mainWindow/currentPageInWindowTitle", currentPageInTabText); +} + +bool Settings::MainWindow::instanceNameInWindowTitle() const +{ + return m_settings->value("mainWindow/instanceNameInWindowTitle", Defaults::MainWindow::instanceNameInWindowTitle()).toBool(); +} + +void Settings::MainWindow::setInstanceNameInWindowTitle(bool instanceNameInWindowTitle) +{ + m_settings->setValue("mainWindow/instanceNameInWindowTitle", instanceNameInWindowTitle); +} + +bool Settings::MainWindow::extendedSearchDock() const +{ + return m_settings->value("mainWindow/extendedSearchDock", Defaults::MainWindow::extendedSearchDock()).toBool(); +} + +void Settings::MainWindow::setExtendedSearchDock(bool extendedSearchDock) +{ + m_settings->setValue("mainWindow/extendedSearchDock", extendedSearchDock); +} + +bool Settings::MainWindow::usePageLabel() const +{ + return m_settings->value("mainWindow/usePageLabel", Defaults::MainWindow::usePageLabel()).toBool(); +} + +void Settings::MainWindow::setUsePageLabel(bool usePageLabel) +{ + m_settings->setValue("mainWindow/usePageLabel", usePageLabel); +} + +bool Settings::MainWindow::synchronizeOutlineView() const +{ + return m_settings->value("mainWindow/synchronizeOutlineView", Defaults::MainWindow::synchronizeOutlineView()).toBool(); +} + +void Settings::MainWindow::setSynchronizeOutlineView(bool synchronizeOutlineView) +{ + m_settings->setValue("mainWindow/synchronizeOutlineView", synchronizeOutlineView); +} + +bool Settings::MainWindow::synchronizeSplitViews() const +{ + return m_settings->value("mainWindow/synchronizeSplitViews", Defaults::MainWindow::synchronizeSplitViews()).toBool(); +} + +void Settings::MainWindow::setSynchronizeSplitViews(bool synchronizeSplitViews) +{ + m_settings->setValue("mainWindow/synchronizeSplitViews", synchronizeSplitViews); +} + +QStringList Settings::MainWindow::fileToolBar() const +{ + return m_settings->value("mainWindow/fileToolBar", Defaults::MainWindow::fileToolBar()).toStringList(); +} + +void Settings::MainWindow::setFileToolBar(const QStringList& fileToolBar) +{ + m_settings->setValue("mainWindow/fileToolBar", trimmed(fileToolBar)); +} + +QStringList Settings::MainWindow::editToolBar() const +{ + return m_settings->value("mainWindow/editToolBar", Defaults::MainWindow::editToolBar()).toStringList(); +} + +void Settings::MainWindow::setEditToolBar(const QStringList& editToolBar) +{ + m_settings->setValue("mainWindow/editToolBar", trimmed(editToolBar)); +} + +QStringList Settings::MainWindow::viewToolBar() const +{ + return m_settings->value("mainWindow/viewToolBar", Defaults::MainWindow::viewToolBar()).toStringList(); +} + +void Settings::MainWindow::setViewToolBar(const QStringList& viewToolBar) +{ + m_settings->setValue("mainWindow/viewToolBar", trimmed(viewToolBar)); +} + +QStringList Settings::MainWindow::documentContextMenu() const +{ + return m_settings->value("mainWindow/documentContextMenu", Defaults::MainWindow::documentContextMenu()).toStringList(); +} + +void Settings::MainWindow::setDocumentContextMenu(const QStringList& documentContextMenu) +{ + m_settings->setValue("mainWindow/documentContextMenu", trimmed(documentContextMenu)); +} + +QStringList Settings::MainWindow::tabContextMenu() const +{ + return m_settings->value("mainWindow/tabContextMenu", Defaults::MainWindow::tabContexntMenu()).toStringList(); +} + +void Settings::MainWindow::setTabContextMenu(const QStringList& tabContextMenu) +{ + m_settings->setValue("mainWindow/tabContextMenu", trimmed(tabContextMenu)); +} + +bool Settings::MainWindow::scrollableMenus() const +{ + return m_settings->value("mainWindow/scrollableMenus", Defaults::MainWindow::scrollableMenus()).toBool(); +} + +void Settings::MainWindow::setScrollableMenus(bool scrollableMenus) +{ + m_settings->setValue("mainWindow/scrollableMenus", scrollableMenus); +} + +bool Settings::MainWindow::searchableMenus() const +{ + return m_settings->value("mainWindow/searchableMenus", Defaults::MainWindow::searchableMenus()).toBool(); +} + +void Settings::MainWindow::setSearchableMenus(bool searchableMenus) +{ + m_settings->setValue("mainWindow/searchableMenus", searchableMenus); +} + +bool Settings::MainWindow::toggleToolAndMenuBarsWithFullscreen() const +{ + return m_settings->value("mainWindow/toggleToolAndMenuBarsWithFullscreen", Defaults::MainWindow::toggleToolAndMenuBarsWithFullscreen()).toBool(); +} + +void Settings::MainWindow::setToggleToolAndMenuBarsWithFullscreen(bool toggleToolAndMenuBarsWithFullscreen) const +{ + m_settings->setValue("mainWindow/toggleToolAndMenuBarsWithFullscreen", toggleToolAndMenuBarsWithFullscreen); +} + +bool Settings::MainWindow::hasIconTheme() const +{ + return m_settings->contains("mainWindow/iconTheme"); +} + +QString Settings::MainWindow::iconTheme() const +{ + return m_settings->value("mainWindow/iconTheme").toString(); +} + +bool Settings::MainWindow::hasStyleSheet() const +{ + return m_settings->contains("mainWindow/styleSheet"); +} + +QString Settings::MainWindow::styleSheet() const +{ + return m_settings->value("mainWindow/styleSheet").toString(); +} + +QByteArray Settings::MainWindow::geometry() const +{ + return m_settings->value("mainWindow/geometry").toByteArray(); +} + +void Settings::MainWindow::setGeometry(const QByteArray& geometry) +{ + m_settings->setValue("mainWindow/geometry", geometry); +} + +QByteArray Settings::MainWindow::state() const +{ + return m_settings->value("mainWindow/state").toByteArray(); +} + +void Settings::MainWindow::setState(const QByteArray& state) +{ + m_settings->setValue("mainWindow/state", state); +} + +QString Settings::MainWindow::openPath() const +{ + return m_settings->value("mainWindow/openPath", Defaults::MainWindow::path()).toString(); +} + +void Settings::MainWindow::setOpenPath(const QString& openPath) +{ + m_settings->setValue("mainWindow/openPath", openPath); +} + +QString Settings::MainWindow::savePath() const +{ + return m_settings->value("mainWindow/savePath", Defaults::MainWindow::path()).toString(); +} + +void Settings::MainWindow::setSavePath(const QString& savePath) +{ + m_settings->setValue("mainWindow/savePath", savePath); +} + +QSize Settings::MainWindow::settingsDialogSize(QSize sizeHint) const +{ + return m_settings->value("mainWindow/settingsDialogSize", sizeHint).toSize(); +} + +void Settings::MainWindow::setSettingsDialogSize(QSize settingsDialogSize) +{ + m_settings->setValue("mainWindow/settingsDialogSize", settingsDialogSize); +} + +QSize Settings::MainWindow::fontsDialogSize(QSize sizeHint) const +{ + return m_settings->value("mainWindow/fontsDialogSize", sizeHint).toSize(); +} + +void Settings::MainWindow::setFontsDialogSize(QSize fontsDialogSize) +{ + m_settings->setValue("mainWindow/fontsDialogSize", fontsDialogSize); +} + +QSize Settings::MainWindow::contentsDialogSize(QSize sizeHint) const +{ + return m_settings->value("mainWindow/contentsDialogSize", sizeHint).toSize(); +} + +void Settings::MainWindow::setContentsDialogSize(QSize contentsDialogSize) +{ + m_settings->setValue("mainWindow/contentsDialogSize", contentsDialogSize); +} + +Settings::MainWindow::MainWindow(QSettings* settings) : + m_settings(settings) +{ +} + +// print dialog + +Settings::PrintDialog::PrintDialog(QSettings* settings) : + m_settings(settings) +{ +} + +bool Settings::PrintDialog::collateCopies() const +{ + return m_settings->value("printDialog/collateCopies", Defaults::PrintDialog::collateCopies()).toBool(); +} + +void Settings::PrintDialog::setCollateCopies(bool collateCopies) +{ + m_settings->setValue("printDialog/collateCopies", collateCopies); +} + +QPrinter::PageOrder Settings::PrintDialog::pageOrder() const +{ + return static_cast< QPrinter::PageOrder >(m_settings->value("printDialog/pageOrder", static_cast< int >(Defaults::PrintDialog::pageOrder())).toInt()); +} + +void Settings::PrintDialog::setPageOrder(QPrinter::PageOrder pageOrder) +{ + m_settings->setValue("printDialog/pageOrder", static_cast< int >(pageOrder)); +} + +QPrinter::Orientation Settings::PrintDialog::orientation() const +{ + return static_cast< QPrinter::Orientation >(m_settings->value("printDialog/orientation", static_cast< int >(Defaults::PrintDialog::orientation())).toInt()); +} + +void Settings::PrintDialog::setOrientation(QPrinter::Orientation orientation) +{ + m_settings->setValue("printDialog/orientation", static_cast< int >(orientation)); +} + +QPrinter::ColorMode Settings::PrintDialog::colorMode() const +{ + return static_cast< QPrinter::ColorMode >(m_settings->value("printDialog/colorMode", static_cast< int >(Defaults::PrintDialog::colorMode())).toInt()); +} + +void Settings::PrintDialog::setColorMode(QPrinter::ColorMode colorMode) +{ + m_settings->setValue("printDialog/colorMode", static_cast< int >(colorMode)); +} + +QPrinter::DuplexMode Settings::PrintDialog::duplex() const +{ + return static_cast< QPrinter::DuplexMode >(m_settings->value("printDialog/duplex", static_cast< int >(Defaults::PrintDialog::duplex())).toInt()); +} + +void Settings::PrintDialog::setDuplex(QPrinter::DuplexMode duplex) +{ + m_settings->setValue("printDialog/duplex", static_cast< int >(duplex)); +} + +bool Settings::PrintDialog::fitToPage() const +{ + return m_settings->value("printDialog/fitToPage", Defaults::PrintDialog::fitToPage()).toBool(); +} + +void Settings::PrintDialog::setFitToPage(bool fitToPage) +{ + m_settings->setValue("printDialog/fitToPage", fitToPage); +} + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + +PrintOptions::PageSet Settings::PrintDialog::pageSet() const +{ + return static_cast< PrintOptions::PageSet >(m_settings->value("printDialog/pageSet", static_cast< uint >(Defaults::PrintDialog::pageSet())).toUInt()); +} + +void Settings::PrintDialog::setPageSet(PrintOptions::PageSet pageSet) +{ + m_settings->setValue("printDialog/pageSet", static_cast< uint >(pageSet)); +} + +PrintOptions::NumberUp Settings::PrintDialog::numberUp() const +{ + return static_cast< PrintOptions::NumberUp >(m_settings->value("printDialog/numberUp", static_cast< uint >(Defaults::PrintDialog::numberUp())).toUInt()); +} + +void Settings::PrintDialog::setNumberUp(PrintOptions::NumberUp numberUp) +{ + m_settings->setValue("printDialog/numberUp", static_cast< uint >(numberUp)); +} + +PrintOptions::NumberUpLayout Settings::PrintDialog::numberUpLayout() const +{ + return static_cast< PrintOptions::NumberUpLayout >(m_settings->value("printDialog/numberUpLayout", static_cast< uint >(Defaults::PrintDialog::numberUpLayout())).toUInt()); +} + +void Settings::PrintDialog::setNumberUpLayout(PrintOptions::NumberUpLayout numberUpLayout) +{ + m_settings->setValue("printDialog/numberUpLayout", static_cast< uint >(numberUpLayout)); +} + +#endif // QT_VERSION + +void Settings::sync() +{ + m_settings->sync(); + + m_pageItem.sync(); + m_documentView.sync(); +} + +Settings::Settings(QObject* parent) : QObject(parent), + m_settings(new QSettings("qpdfview", "qpdfview", this)), + m_pageItem(m_settings), + m_presentationView(m_settings), + m_documentView(m_settings), + m_mainWindow(m_settings), + m_printDialog(m_settings) +{ +} + +// defaults + +bool Defaults::DocumentView::rightToLeftMode() +{ +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + return QLocale::system().textDirection() == Qt::RightToLeft; + +#else + + return false; + +#endif // QT_VERSION +} + +QString Defaults::MainWindow::path() +{ +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); + +#else + + return QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + +#endif // QT_VERSION +} + +} // qpdfview diff --git a/sources/settings.h b/sources/settings.h new file mode 100644 index 0000000..fa70986 --- /dev/null +++ b/sources/settings.h @@ -0,0 +1,706 @@ +/* + +Copyright 2015 S. Razi Alavizadeh +Copyright 2012-2015, 2018 Adam Reichold +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include +#include +#include + +class QSettings; + +#include "global.h" +#include "printoptions.h" + +namespace qpdfview +{ + +class Settings : public QObject +{ + Q_OBJECT + +public: + static Settings* instance(); + ~Settings(); + + // page item + + class PageItem + { + public: + void sync(); + + int cacheSize() const { return m_cacheSize; } + void setCacheSize(int cacheSize); + + bool useTiling() const { return m_useTiling; } + void setUseTiling(bool useTiling); + + int tileSize() const { return m_tileSize; } + + const QIcon& progressIcon() const { return m_progressIcon; } + void setProgressIcon(const QIcon& progressIcon) { m_progressIcon = progressIcon; } + + const QIcon& errorIcon() const { return m_errorIcon; } + void setErrorIcon(const QIcon& errorIcon) { m_errorIcon = errorIcon; } + + bool keepObsoletePixmaps() const { return m_keepObsoletePixmaps; } + void setKeepObsoletePixmaps(bool keepObsoletePixmaps); + + bool useDevicePixelRatio() const { return m_useDevicePixelRatio; } + void setUseDevicePixelRatio(bool useDevicePixelRatio); + + bool decoratePages() const { return m_decoratePages; } + void setDecoratePages(bool decoratePages); + + bool decorateLinks() const { return m_decorateLinks; } + void setDecorateLinks(bool decorateLinks); + + bool decorateFormFields() const { return m_decorateFormFields; } + void setDecorateFormFields(bool decorateFormFields); + + const QColor& backgroundColor() const { return m_backgroundColor; } + void setBackgroundColor(const QColor& backgroundColor); + + const QColor& paperColor() const { return m_paperColor; } + void setPaperColor(const QColor& paperColor); + + const QColor& highlightColor() const { return m_highlightColor; } + void setHighlightColor(const QColor& highlightColor); + + QColor annotationColor() const; + void setAnnotationColor(const QColor& annotationColor); + + Qt::KeyboardModifiers copyToClipboardModifiers() const; + void setCopyToClipboardModifiers(Qt::KeyboardModifiers modifiers); + + Qt::KeyboardModifiers addAnnotationModifiers() const; + void setAddAnnotationModifiers(Qt::KeyboardModifiers modifiers); + + Qt::KeyboardModifiers zoomToSelectionModifiers() const; + void setZoomToSelectionModifiers(Qt::KeyboardModifiers modifiers); + + Qt::KeyboardModifiers openInSourceEditorModifiers() const; + void setOpenInSourceEditorModifiers(Qt::KeyboardModifiers modifiers); + + bool annotationOverlay() const; + void setAnnotationOverlay(bool overlay); + + bool formFieldOverlay() const; + void setFormFieldOverlay(bool overlay); + + private: + PageItem(QSettings* settings); + friend class Settings; + + QSettings* m_settings; + + int m_cacheSize; + + bool m_useTiling; + int m_tileSize; + + QIcon m_progressIcon; + QIcon m_errorIcon; + + bool m_keepObsoletePixmaps; + bool m_useDevicePixelRatio; + + bool m_decoratePages; + bool m_decorateLinks; + bool m_decorateFormFields; + + QColor m_backgroundColor; + QColor m_paperColor; + + QColor m_highlightColor; + + }; + + // presentation view + + class PresentationView + { + public: + bool synchronize() const; + void setSynchronize(bool synchronize); + + int screen() const; + void setScreen(int screen); + + QColor backgroundColor() const; + void setBackgroundColor(const QColor& backgroundColor); + + private: + PresentationView(QSettings* settings); + friend class Settings; + + QSettings* m_settings; + + }; + + // document view + + class DocumentView + { + public: + void sync(); + + bool openUrl() const; + void setOpenUrl(bool openUrl); + + bool autoRefresh() const; + void setAutoRefresh(bool autoRefresh); + + int autoRefreshTimeout() const; + + bool prefetch() const { return m_prefetch; } + void setPrefetch(bool prefetch); + + int prefetchDistance() const { return m_prefetchDistance; } + void setPrefetchDistance(int prefetchDistance); + + int prefetchTimeout() const; + + int pagesPerRow() const { return m_pagesPerRow; } + void setPagesPerRow(int pagesPerRow); + + bool minimalScrolling() const { return m_minimalScrolling; } + void setMinimalScrolling(bool minimalScrolling); + + bool highlightCurrentThumbnail() const { return m_highlightCurrentThumbnail; } + void setHighlightCurrentThumbnail(bool highlightCurrentThumbnail); + + bool limitThumbnailsToResults() const { return m_limitThumbnailsToResults; } + void setLimitThumbnailsToResults(bool limitThumbnailsToResults); + + qreal minimumScaleFactor() const; + qreal maximumScaleFactor() const; + + qreal zoomFactor() const; + void setZoomFactor(qreal zoomFactor); + + qreal pageSpacing() const { return m_pageSpacing; } + void setPageSpacing(qreal pageSpacing); + + qreal thumbnailSpacing() const { return m_thumbnailSpacing; } + void setThumbnailSpacing(qreal thumbnailSpacing); + + qreal thumbnailSize() const { return m_thumbnailSize; } + void setThumbnailSize(qreal thumbnailSize); + + bool matchCase() const; + void setMatchCase(bool matchCase); + + bool wholeWords() const; + void setWholeWords(bool wholeWords); + + bool parallelSearchExecution() const; + void setParallelSearchExecution(bool parallelSearchExecution); + + int highlightDuration() const; + void setHighlightDuration(int highlightDuration); + + QString sourceEditor() const; + void setSourceEditor(const QString& sourceEditor); + + Qt::KeyboardModifiers zoomModifiers() const; + void setZoomModifiers(Qt::KeyboardModifiers zoomModifiers); + + Qt::KeyboardModifiers rotateModifiers() const; + void setRotateModifiers(Qt::KeyboardModifiers rotateModifiers); + + Qt::KeyboardModifiers scrollModifiers() const; + void setScrollModifiers(Qt::KeyboardModifiers scrollModifiers); + + // per-tab settings + + bool continuousMode() const; + void setContinuousMode(bool continuousMode); + + LayoutMode layoutMode() const; + void setLayoutMode(LayoutMode layoutMode); + + bool rightToLeftMode() const; + void setRightToLeftMode(bool rightToLeftMode); + + ScaleMode scaleMode() const; + void setScaleMode(ScaleMode scaleMode); + + qreal scaleFactor() const; + void setScaleFactor(qreal scaleFactor); + + Rotation rotation() const; + void setRotation(Rotation rotation); + + bool invertColors() const; + void setInvertColors(bool invertColors); + + bool convertToGrayscale() const; + void setConvertToGrayscale(bool convertToGrayscale); + + bool trimMargins() const; + void setTrimMargins(bool trimMargins); + + CompositionMode compositionMode() const; + void setCompositionMode(CompositionMode compositionMode); + + bool highlightAll() const; + void setHighlightAll(bool highlightAll); + + private: + DocumentView(QSettings* settings); + friend class Settings; + + QSettings* m_settings; + + bool m_prefetch; + int m_prefetchDistance; + + int m_pagesPerRow; + + bool m_minimalScrolling; + + bool m_highlightCurrentThumbnail; + bool m_limitThumbnailsToResults; + + qreal m_pageSpacing; + qreal m_thumbnailSpacing; + + qreal m_thumbnailSize; + + }; + + // main window + + class MainWindow + { + public: + bool trackRecentlyUsed() const; + void setTrackRecentlyUsed(bool trackRecentlyUsed); + + int recentlyUsedCount() const; + void setRecentlyUsedCount(int recentlyUsedCount); + + QStringList recentlyUsed() const; + void setRecentlyUsed(const QStringList& recentlyUsed); + + bool keepRecentlyClosed() const; + void setKeepRecentlyClosed(bool keepRecentlyClosed); + + int recentlyClosedCount() const; + void setRecentlyClosedCount(int recentlyClosedCount); + + bool restoreTabs() const; + void setRestoreTabs(bool restoreTabs); + + bool restoreBookmarks() const; + void setRestoreBookmarks(bool restoreBookmarks); + + bool restorePerFileSettings() const; + void setRestorePerFileSettings(bool restorePerFileSettings); + + int perFileSettingsLimit() const; + + int saveDatabaseInterval() const; + void setSaveDatabaseInterval(int saveDatabaseInterval); + + int currentTabIndex() const; + void setCurrentTabIndex(int currentTabIndex); + + int tabPosition() const; + void setTabPosition(int tabPosition); + + int tabVisibility() const; + void setTabVisibility(int tabVisibility); + + bool spreadTabs() const; + void setSpreadTabs(bool spreadTabs); + + bool newTabNextToCurrentTab() const; + void setNewTabNextToCurrentTab(bool newTabNextToCurrentTab); + + bool exitAfterLastTab() const; + void setExitAfterLastTab(bool exitAfterLastTab); + + bool documentTitleAsTabTitle() const; + void setDocumentTitleAsTabTitle(bool documentTitleAsTabTitle); + + bool currentPageInWindowTitle() const; + void setCurrentPageInWindowTitle(bool currentPageInWindowTitle); + + bool instanceNameInWindowTitle() const; + void setInstanceNameInWindowTitle(bool instanceNameInWindowTitle); + + bool extendedSearchDock() const; + void setExtendedSearchDock(bool extendedSearchDock); + + bool usePageLabel() const; + void setUsePageLabel(bool usePageLabel); + + bool synchronizeOutlineView() const; + void setSynchronizeOutlineView(bool synchronizeOutlineView); + + bool synchronizeSplitViews() const; + void setSynchronizeSplitViews(bool synchronizeSplitViews); + + QStringList fileToolBar() const; + void setFileToolBar(const QStringList& fileToolBar); + + QStringList editToolBar() const; + void setEditToolBar(const QStringList& editToolBar); + + QStringList viewToolBar() const; + void setViewToolBar(const QStringList& viewToolBar); + + QStringList documentContextMenu() const; + void setDocumentContextMenu(const QStringList& documentContextMenu); + + QStringList tabContextMenu() const; + void setTabContextMenu(const QStringList& tabContextMenu); + + bool scrollableMenus() const; + void setScrollableMenus(bool scrollableMenus); + + bool searchableMenus() const; + void setSearchableMenus(bool searchableMenus); + + bool toggleToolAndMenuBarsWithFullscreen() const; + void setToggleToolAndMenuBarsWithFullscreen(bool toggleToolAndMenuBarsWithFullscreen) const; + + bool hasIconTheme() const; + QString iconTheme() const; + + bool hasStyleSheet() const; + QString styleSheet() const; + + QByteArray geometry() const; + void setGeometry(const QByteArray& geometry); + + QByteArray state() const; + void setState(const QByteArray& state); + + QString openPath() const; + void setOpenPath(const QString& openPath); + + QString savePath() const; + void setSavePath(const QString& savePath); + + QSize settingsDialogSize(QSize sizeHint) const; + void setSettingsDialogSize(QSize settingsDialogSize); + + QSize fontsDialogSize(QSize sizeHint) const; + void setFontsDialogSize(QSize fontsDialogSize); + + QSize contentsDialogSize(QSize sizeHint) const; + void setContentsDialogSize(QSize contentsDialogSize); + + private: + MainWindow(QSettings* settings); + friend class Settings; + + QSettings* m_settings; + + }; + + // print dialog + + class PrintDialog + { + public: + bool collateCopies() const; + void setCollateCopies(bool collateCopies); + + QPrinter::PageOrder pageOrder() const; + void setPageOrder(QPrinter::PageOrder pageOrder); + + QPrinter::Orientation orientation() const; + void setOrientation(QPrinter::Orientation orientation); + + QPrinter::ColorMode colorMode() const; + void setColorMode(QPrinter::ColorMode colorMode); + + QPrinter::DuplexMode duplex() const; + void setDuplex(QPrinter::DuplexMode duplex); + + bool fitToPage() const; + void setFitToPage(bool fitToPage); + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + PrintOptions::PageSet pageSet() const; + void setPageSet(PrintOptions::PageSet pageSet); + + PrintOptions::NumberUp numberUp() const; + void setNumberUp(PrintOptions::NumberUp numberUp); + + PrintOptions::NumberUpLayout numberUpLayout() const; + void setNumberUpLayout(PrintOptions::NumberUpLayout numberUpLayout); + +#endif // QT_VERSION + + private: + PrintDialog(QSettings* settings); + friend class Settings; + + QSettings* m_settings; + + }; + + void sync(); + + PageItem& pageItem() { return m_pageItem; } + PresentationView& presentationView() { return m_presentationView; } + DocumentView& documentView() { return m_documentView; } + MainWindow& mainWindow() { return m_mainWindow; } + PrintDialog& printDialog() { return m_printDialog; } + +private: + Q_DISABLE_COPY(Settings) + + static Settings* s_instance; + Settings(QObject* parent = 0); + + QSettings* m_settings; + + PageItem m_pageItem; + PresentationView m_presentationView; + DocumentView m_documentView; + MainWindow m_mainWindow; + PrintDialog m_printDialog; + +}; + +// defaults + +class Defaults +{ +public: + class PageItem + { + public: + static int cacheSize() { return 32 * 1024; } + + static bool useTiling() { return false; } + static int tileSize() { return 1024; } + + static bool keepObsoletePixmaps() { return false; } + static bool useDevicePixelRatio() { return false; } + + static bool decoratePages() { return true; } + static bool decorateLinks() { return true; } + static bool decorateFormFields() { return true; } + + static QColor backgroundColor() { return Qt::darkGray; } + static QColor paperColor() { return Qt::white; } + + static QColor highlightColor() { return Qt::yellow; } + static QColor annotationColor() { return Qt::yellow; } + + static Qt::KeyboardModifiers copyToClipboardModifiers() { return Qt::ShiftModifier; } + static Qt::KeyboardModifiers addAnnotationModifiers() { return Qt::ControlModifier; } + static Qt::KeyboardModifiers zoomToSelectionModifiers() { return Qt::ShiftModifier | Qt::ControlModifier; } + static Qt::KeyboardModifiers openInSourceEditorModifiers() { return Qt::NoModifier; } + + static bool annotationOverlay() { return false; } + static bool formFieldOverlay() { return true; } + + private: + PageItem() {} + + }; + + class PresentationView + { + public: + static bool synchronize() { return false; } + static int screen() { return -1; } + + static QColor backgroundColor() { return QColor(); } + + private: + PresentationView() {} + + }; + + class DocumentView + { + public: + static bool openUrl() { return false; } + + static bool autoRefresh() { return false; } + + static int autoRefreshTimeout() { return 750; } + + static bool prefetch() { return false; } + static int prefetchDistance() { return 1; } + + static int prefetchTimeout() { return 250; } + + static int pagesPerRow() { return 3; } + + static bool minimalScrolling() { return false; } + + static bool highlightCurrentThumbnail() { return false; } + static bool limitThumbnailsToResults() { return false; } + + static qreal minimumScaleFactor() { return 0.1; } + static qreal maximumScaleFactor() { return 50.0; } + + static qreal zoomFactor() { return 1.1; } + + static qreal pageSpacing() { return 5.0; } + static qreal thumbnailSpacing() { return 3.0; } + + static qreal thumbnailSize() { return 150.0; } + + static CompositionMode compositionMode() { return DefaultCompositionMode; } + + static bool matchCase() { return false; } + static bool wholeWords() { return false; } + static bool parallelSearchExecution() { return false; } + + static int highlightDuration() { return 5 * 1000; } + static QString sourceEditor() { return QString(); } + + static Qt::KeyboardModifiers zoomModifiers() { return Qt::ControlModifier; } + static Qt::KeyboardModifiers rotateModifiers() { return Qt::ShiftModifier; } + static Qt::KeyboardModifiers scrollModifiers() { return Qt::AltModifier; } + + // per-tab defaults + + static bool continuousMode() { return false; } + static LayoutMode layoutMode() { return SinglePageMode; } + static bool rightToLeftMode(); + + static ScaleMode scaleMode() { return ScaleFactorMode; } + static qreal scaleFactor() { return 1.0; } + static Rotation rotation() { return RotateBy0; } + + static bool invertColors() { return false; } + static bool convertToGrayscale() { return false; } + static bool trimMargins() { return false; } + + static bool highlightAll() { return false; } + + private: + DocumentView() {} + + }; + + class MainWindow + { + public: + static bool trackRecentlyUsed() { return false; } + static int recentlyUsedCount() { return 10; } + + static bool keepRecentlyClosed() { return false; } + static int recentlyClosedCount() { return 5; } + + static bool restoreTabs() { return false; } + static bool restoreBookmarks() { return false; } + static bool restorePerFileSettings() { return false; } + + static int perFileSettingsLimit() { return 1000; } + + static int saveDatabaseInterval() { return 5 * 60 * 1000; } + + static int tabPosition() { return 0; } + static int tabVisibility() { return 0; } + + static bool spreadTabs() { return false; } + + static bool newTabNextToCurrentTab() { return true; } + static bool exitAfterLastTab() { return false; } + + static bool documentTitleAsTabTitle() { return true; } + + static bool currentPageInWindowTitle() { return false; } + static bool instanceNameInWindowTitle() { return false; } + + static bool extendedSearchDock() { return false; } + + static bool usePageLabel() { return true; } + + static bool synchronizeOutlineView() { return false; } + static bool synchronizeSplitViews() { return true; } + + static QStringList fileToolBar() { return QStringList() << "openInNewTab" << "refresh"; } + static QStringList editToolBar() { return QStringList() << "currentPage" << "previousPage" << "nextPage"; } + static QStringList viewToolBar() { return QStringList() << "scaleFactor" << "zoomIn" << "zoomOut"; } + + static QStringList documentContextMenu() { return QStringList() << "previousPage" << "nextPage" << "firstPage" << "lastPage" << "separator" << "jumpToPage" << "jumpBackward" << "jumpForward" << "separator" << "setFirstPage" << "separator" << "findPrevious" << "findNext" << "cancelSearch"; } + static QStringList tabContexntMenu() { return QStringList() << "openCopyInNewTab" << "openCopyInNewWindow" << "openContainingFolder" << "separator" << "splitViewHorizontally" << "splitViewVertically" << "closeCurrentView" << "separator" << "closeAllTabs" << "closeAllTabsButThisOne" << "closeAllTabsToTheLeft" << "closeAllTabsToTheRight"; } + + static bool scrollableMenus() { return false; } + static bool searchableMenus() { return false; } + + static bool toggleToolAndMenuBarsWithFullscreen() { return false; } + + static QString path(); + + private: + MainWindow() {} + + }; + + class PrintDialog + { + public: + static bool collateCopies() { return false; } + + static QPrinter::PageOrder pageOrder() { return QPrinter::FirstPageFirst; } + + static QPrinter::Orientation orientation() { return QPrinter::Portrait; } + + static QPrinter::ColorMode colorMode() { return QPrinter::Color; } + + static QPrinter::DuplexMode duplex() { return QPrinter::DuplexNone; } + + static bool fitToPage() { return false; } + +#if QT_VERSION < QT_VERSION_CHECK(5,2,0) + + static PrintOptions::PageSet pageSet() { return PrintOptions::AllPages; } + + static PrintOptions::NumberUp numberUp() { return PrintOptions::SinglePage; } + static PrintOptions::NumberUpLayout numberUpLayout() { return PrintOptions::LeftRightTopBottom; } + +#endif // QT_VERSION + + private: + PrintDialog() {} + + }; + +private: + Defaults() {} + +}; + +} // qpdfview + +#endif // SETTINGS_H diff --git a/sources/settingsdialog.cpp b/sources/settingsdialog.cpp new file mode 100644 index 0000000..6d75796 --- /dev/null +++ b/sources/settingsdialog.cpp @@ -0,0 +1,878 @@ +/* + +Copyright 2015 S. Razi Alavizadeh +Copyright 2012-2015 Adam Reichold +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "settingsdialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" +#include "model.h" +#include "pluginhandler.h" +#include "shortcuthandler.h" +#include "documentview.h" +#include "miscellaneous.h" + +namespace +{ + +using namespace qpdfview; + +void addSettingsWidget(QTabWidget* tabWidget, SettingsWidget*& settingsWidget, PluginHandler::FileType fileType) +{ + settingsWidget = PluginHandler::instance()->createSettingsWidget(fileType, tabWidget); + + if(settingsWidget != 0) + { + tabWidget->addTab(settingsWidget, PluginHandler::fileTypeName(fileType)); + } +} + +void setCurrentIndexFromData(QComboBox* comboBox, int data) +{ + comboBox->setCurrentIndex(comboBox->findData(data)); +} + +int dataFromCurrentIndex(const QComboBox* comboBox) +{ + return comboBox->itemData(comboBox->currentIndex()).toInt(); +} + +void setCurrentTextToColorName(QComboBox* comboBox, const QColor& color) +{ + comboBox->lineEdit()->setText(color.isValid() ? color.name() : QString()); +} + +QColor validColorFromCurrentText(const QComboBox* comboBox, const QColor& defaultColor) +{ + const QColor color(comboBox->currentText()); + + return color.isValid() ? color : defaultColor; +} + +void setCurrentIndexFromKeyboardModifiers(QComboBox* comboBox, Qt::KeyboardModifiers modifiers) +{ + comboBox->setCurrentIndex(comboBox->findData(static_cast< int >(modifiers))); +} + +Qt::KeyboardModifier keyboardModifierFromCurrentIndex(const QComboBox* comboBox) +{ + return static_cast< Qt::KeyboardModifier >(comboBox->itemData(comboBox->currentIndex()).toInt()); +} + +} // anonymous + +namespace qpdfview +{ + +Settings* SettingsDialog::s_settings = 0; + +SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + setWindowTitle(tr("Settings") + QLatin1String(" - qpdfview")); + + m_graphicsTabWidget = new QTabWidget(this); + m_graphicsTabWidget->addTab(new QWidget(this), tr("General")); + + addSettingsWidget(m_graphicsTabWidget, m_pdfSettingsWidget, PluginHandler::PDF); + addSettingsWidget(m_graphicsTabWidget, m_psSettingsWidget, PluginHandler::PS); + addSettingsWidget(m_graphicsTabWidget, m_djvuSettingsWidget, PluginHandler::DjVu); + + m_graphicsLayout = new QFormLayout(m_graphicsTabWidget->widget(0)); + + m_shortcutsTableView = new QTableView(this); + + m_shortcutsTableView->setModel(ShortcutHandler::instance()); + + connect(this, SIGNAL(accepted()), ShortcutHandler::instance(), SLOT(submit())); + connect(this, SIGNAL(rejected()), ShortcutHandler::instance(), SLOT(revert())); + + m_shortcutsTableView->setFrameShape(QFrame::NoFrame); + m_shortcutsTableView->setAlternatingRowColors(true); + +#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) + + m_shortcutsTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + m_shortcutsTableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); + +#else + + m_shortcutsTableView->horizontalHeader()->setResizeMode(0, QHeaderView::ResizeToContents); + m_shortcutsTableView->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); + +#endif // QT_VERSION + + m_shortcutsTableView->verticalHeader()->setVisible(false); + + m_tabWidget = new QTabWidget(this); + m_tabWidget->addTab(new QWidget(this), tr("&Behavior")); + m_tabWidget->addTab(m_graphicsTabWidget, tr("&Graphics")); + m_tabWidget->addTab(new QWidget(this), tr("&Interface")); + m_tabWidget->addTab(m_shortcutsTableView, tr("&Shortcuts")); + m_tabWidget->addTab(new QWidget(this), tr("&Modifiers")); + + m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); + connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept())); + connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject())); + + m_defaultsButton = m_dialogButtonBox->addButton(tr("Defaults"), QDialogButtonBox::ResetRole); + connect(m_defaultsButton, SIGNAL(clicked()), SLOT(reset())); + + m_defaultsOnCurrentTabButton = m_dialogButtonBox->addButton(tr("Defaults on current tab"), QDialogButtonBox::ResetRole); + connect(m_defaultsOnCurrentTabButton, SIGNAL(clicked()), SLOT(resetCurrentTab())); + + m_behaviorLayout = new QFormLayout(m_tabWidget->widget(0)); + m_interfaceLayout = new QFormLayout(m_tabWidget->widget(2)); + + m_wheelModifiersGroupBox = new QGroupBox(tr("Mouse wheel modifiers")); + m_wheelModifiersLayout = new QFormLayout(m_wheelModifiersGroupBox); + + m_buttonModifiersGroupBox = new QGroupBox(tr("Mouse button modifiers")); + m_buttonModifiersLayout = new QFormLayout(m_buttonModifiersGroupBox); + + QWidget* modifiersTab = m_tabWidget->widget(4); + QVBoxLayout* modifiersLayout = new QVBoxLayout(modifiersTab); + modifiersTab->setLayout(modifiersLayout); + modifiersLayout->addWidget(m_wheelModifiersGroupBox); + modifiersLayout->addWidget(m_buttonModifiersGroupBox); + modifiersLayout->addStretch(); + + QVBoxLayout* layout = new QVBoxLayout(this); + setLayout(layout); + layout->addWidget(m_tabWidget); + layout->addWidget(m_dialogButtonBox); + + resize(s_settings->mainWindow().settingsDialogSize(sizeHint())); + + createBehaviorTab(); + createGraphicsTab(); + createInterfaceTab(); + createModifiersTab(); +} + +SettingsDialog::~SettingsDialog() +{ + s_settings->mainWindow().setSettingsDialogSize(size()); +} + +void SettingsDialog::accept() +{ + QDialog::accept(); + + acceptBehaivorTab(); + + acceptGraphicsTab(); + + acceptInterfaceTab(); + + acceptModifiersTab(); +} + +void SettingsDialog::reset() +{ + resetBehaviorTab(); + + resetGraphicsTab(); + + resetInterfaceTab(); + + ShortcutHandler::instance()->reset(); + + resetModifiersTab(); +} + +void SettingsDialog::resetCurrentTab() +{ + switch(m_tabWidget->currentIndex()) + { + default: + reset(); + break; + case 0: + resetBehaviorTab(); + break; + case 1: + resetGraphicsTab(); + break; + case 2: + resetInterfaceTab(); + break; + case 3: + ShortcutHandler::instance()->reset(); + break; + case 4: + resetModifiersTab(); + break; + } +} + +void SettingsDialog::createBehaviorTab() +{ + m_openUrlCheckBox = addCheckBox(m_behaviorLayout, tr("Open URL:"), QString(), + s_settings->documentView().openUrl()); + + + m_autoRefreshCheckBox = addCheckBox(m_behaviorLayout, tr("Auto-refresh:"), QString(), + s_settings->documentView().autoRefresh()); + + + m_trackRecentlyUsedCheckBox = addCheckBox(m_behaviorLayout, tr("Track recently used:"), tr("Effective after restart."), + s_settings->mainWindow().trackRecentlyUsed()); + + m_keepRecentlyClosedCheckBox = addCheckBox(m_behaviorLayout, tr("Keep recently closed:"), tr("Effective after restart."), + s_settings->mainWindow().keepRecentlyClosed()); + + + m_restoreTabsCheckBox = addCheckBox(m_behaviorLayout, tr("Restore tabs:"), QString(), + s_settings->mainWindow().restoreTabs()); + + m_restoreBookmarksCheckBox = addCheckBox(m_behaviorLayout, tr("Restore bookmarks:"), QString(), + s_settings->mainWindow().restoreBookmarks()); + + m_restorePerFileSettingsCheckBox = addCheckBox(m_behaviorLayout, tr("Restore per-file settings:"), QString(), + s_settings->mainWindow().restorePerFileSettings()); + + m_saveDatabaseInterval = addSpinBox(m_behaviorLayout, tr("Save database interval:"), QString(), tr(" min"), tr("Never"), + -1, 60, 1, s_settings->mainWindow().saveDatabaseInterval() / 1000 / 60); + +#ifndef WITH_SQL + + m_restoreTabsCheckBox->setEnabled(false); + m_restoreBookmarksCheckBox->setEnabled(false); + m_restorePerFileSettingsCheckBox->setEnabled(false); + m_saveDatabaseInterval->setEnabled(false); + +#endif // WITH_SQL + + + m_synchronizePresentationCheckBox = addCheckBox(m_behaviorLayout, tr("Synchronize presentation:"), QString(), + s_settings->presentationView().synchronize()); + + m_presentationScreenSpinBox = addSpinBox(m_behaviorLayout, tr("Presentation screen:"), QString(), QString(), tr("Default"), + -1, QApplication::desktop()->screenCount() - 1, 1, s_settings->presentationView().screen()); + + + m_synchronizeOutlineViewCheckBox = addCheckBox(m_behaviorLayout, tr("Synchronize outline view:"), QString(), + s_settings->mainWindow().synchronizeOutlineView()); + + m_synchronizeSplitViewsCheckBox = addCheckBox(m_behaviorLayout, tr("Synchronize split views:"), QString(), + s_settings->mainWindow().synchronizeSplitViews()); + + + m_minimalScrollingCheckBox = addCheckBox(m_behaviorLayout, tr("Minimal scrolling:"), QString(), + s_settings->documentView().minimalScrolling()); + + m_zoomFactorSpinBox = addDoubleSpinBox(m_behaviorLayout, tr("Zoom factor:"), QString(), QString(), QString(), + 1.0, 2.0, 0.05, s_settings->documentView().zoomFactor()); + + m_parallelSearchExecutionCheckBox = addCheckBox(m_behaviorLayout, tr("Parallel search execution:"), QString(), + s_settings->documentView().parallelSearchExecution()); + + + m_highlightDurationSpinBox = addSpinBox(m_behaviorLayout, tr("Highlight duration:"), QString(), tr(" ms"), tr("None"), + 0, 60000, 500, s_settings->documentView().highlightDuration()); + + m_highlightColorComboBox = addColorComboBox(m_behaviorLayout, tr("Highlight color:"), QString(), + s_settings->pageItem().highlightColor()); + + m_annotationColorComboBox = addColorComboBox(m_behaviorLayout, tr("Annotation color:"), QString(), + s_settings->pageItem().annotationColor()); + + + m_sourceEditorLineEdit = addLineEdit(m_behaviorLayout, tr("Source editor:"), tr("'%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number."), + s_settings->documentView().sourceEditor()); +} + +void SettingsDialog::acceptBehaivorTab() +{ + s_settings->documentView().setOpenUrl(m_openUrlCheckBox->isChecked()); + + s_settings->documentView().setAutoRefresh(m_autoRefreshCheckBox->isChecked()); + + s_settings->mainWindow().setTrackRecentlyUsed(m_trackRecentlyUsedCheckBox->isChecked()); + s_settings->mainWindow().setKeepRecentlyClosed(m_keepRecentlyClosedCheckBox->isChecked()); + + s_settings->mainWindow().setRestoreTabs(m_restoreTabsCheckBox->isChecked()); + s_settings->mainWindow().setRestoreBookmarks(m_restoreBookmarksCheckBox->isChecked()); + s_settings->mainWindow().setRestorePerFileSettings(m_restorePerFileSettingsCheckBox->isChecked()); + s_settings->mainWindow().setSaveDatabaseInterval(m_saveDatabaseInterval->value() * 60 * 1000); + + s_settings->presentationView().setSynchronize(m_synchronizePresentationCheckBox->isChecked()); + s_settings->presentationView().setScreen(m_presentationScreenSpinBox->value()); + + s_settings->mainWindow().setSynchronizeOutlineView(m_synchronizeOutlineViewCheckBox->isChecked()); + s_settings->mainWindow().setSynchronizeSplitViews(m_synchronizeSplitViewsCheckBox->isChecked()); + + s_settings->documentView().setMinimalScrolling(m_minimalScrollingCheckBox->isChecked()); + s_settings->documentView().setZoomFactor(m_zoomFactorSpinBox->value()); + s_settings->documentView().setParallelSearchExecution(m_parallelSearchExecutionCheckBox->isChecked()); + + s_settings->documentView().setHighlightDuration(m_highlightDurationSpinBox->value()); + s_settings->pageItem().setHighlightColor(validColorFromCurrentText(m_highlightColorComboBox, Defaults::PageItem::highlightColor())); + s_settings->pageItem().setAnnotationColor(validColorFromCurrentText(m_annotationColorComboBox, Defaults::PageItem::annotationColor())); + + s_settings->documentView().setSourceEditor(m_sourceEditorLineEdit->text()); +} + +void SettingsDialog::resetBehaviorTab() +{ + m_openUrlCheckBox->setChecked(Defaults::DocumentView::openUrl()); + + m_autoRefreshCheckBox->setChecked(Defaults::DocumentView::autoRefresh()); + + m_trackRecentlyUsedCheckBox->setChecked(Defaults::MainWindow::trackRecentlyUsed()); + m_keepRecentlyClosedCheckBox->setChecked(Defaults::MainWindow::keepRecentlyClosed()); + + m_restoreTabsCheckBox->setChecked(Defaults::MainWindow::restoreTabs()); + m_restoreBookmarksCheckBox->setChecked(Defaults::MainWindow::restoreBookmarks()); + m_restorePerFileSettingsCheckBox->setChecked(Defaults::MainWindow::restorePerFileSettings()); + m_saveDatabaseInterval->setValue(Defaults::MainWindow::saveDatabaseInterval()); + + m_synchronizePresentationCheckBox->setChecked(Defaults::PresentationView::synchronize()); + m_presentationScreenSpinBox->setValue(Defaults::PresentationView::screen()); + + m_synchronizeOutlineViewCheckBox->setChecked(Defaults::MainWindow::synchronizeOutlineView()); + m_synchronizeSplitViewsCheckBox->setChecked(Defaults::MainWindow::synchronizeSplitViews()); + + m_minimalScrollingCheckBox->setChecked(Defaults::DocumentView::minimalScrolling()); + m_zoomFactorSpinBox->setValue(Defaults::DocumentView::zoomFactor()); + m_parallelSearchExecutionCheckBox->setChecked(Defaults::DocumentView::parallelSearchExecution()); + + m_highlightDurationSpinBox->setValue(Defaults::DocumentView::highlightDuration()); + setCurrentTextToColorName(m_highlightColorComboBox, Defaults::PageItem::highlightColor()); + setCurrentTextToColorName(m_annotationColorComboBox, Defaults::PageItem::annotationColor()); + + m_sourceEditorLineEdit->clear(); +} + +void SettingsDialog::createGraphicsTab() +{ + m_useTilingCheckBox = addCheckBox(m_graphicsLayout, tr("Use tiling:"), QString(), + s_settings->pageItem().useTiling()); + + m_keepObsoletePixmapsCheckBox = addCheckBox(m_graphicsLayout, tr("Keep obsolete pixmaps:"), QString(), + s_settings->pageItem().keepObsoletePixmaps()); + + m_useDevicePixelRatioCheckBox = addCheckBox(m_graphicsLayout, tr("Use device pixel ratio:"), QString(), + s_settings->pageItem().useDevicePixelRatio()); + +#if QT_VERSION < QT_VERSION_CHECK(5,1,0) + + m_useDevicePixelRatioCheckBox->setEnabled(false); + +#endif // QT_VERSION + + + m_decoratePagesCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate pages:"), QString(), + s_settings->pageItem().decoratePages()); + + m_decorateLinksCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate links:"), QString(), + s_settings->pageItem().decorateLinks()); + + m_decorateFormFieldsCheckBox = addCheckBox(m_graphicsLayout, tr("Decorate form fields:"), QString(), + s_settings->pageItem().decorateFormFields()); + + + m_backgroundColorComboBox = addColorComboBox(m_graphicsLayout, tr("Background color:"), QString(), + s_settings->pageItem().backgroundColor()); + + m_paperColorComboBox = addColorComboBox(m_graphicsLayout, tr("Paper color:"), QString(), + s_settings->pageItem().paperColor()); + + m_presentationBackgroundColorComboBox = addColorComboBox(m_graphicsLayout, tr("Presentation background color:"), QString(), + s_settings->presentationView().backgroundColor()); + + + m_pagesPerRowSpinBox = addSpinBox(m_graphicsLayout, tr("Pages per row:"), QString(), QString(), QString(), + 1, 10, 1, s_settings->documentView().pagesPerRow()); + + + m_pageSpacingSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Page spacing:"), QString(), tr(" px"), QString(), + 0.0, 25.0, 0.25, s_settings->documentView().pageSpacing()); + + m_thumbnailSpacingSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Thumbnail spacing:"), QString(), tr(" px"), QString(), + 0.0, 25.0, 0.25, s_settings->documentView().thumbnailSpacing()); + + + m_thumbnailSizeSpinBox = addDoubleSpinBox(m_graphicsLayout, tr("Thumbnail size:"), QString(), tr(" px"), tr("Fit to viewport"), + 0.0, 1800.0, 25.0, s_settings->documentView().thumbnailSize()); + + + m_cacheSizeComboBox = addDataSizeComboBox(m_graphicsLayout, tr("Cache size:"), QString(), + s_settings->pageItem().cacheSize()); + + m_prefetchCheckBox = addCheckBox(m_graphicsLayout, tr("Prefetch:"), QString(), + s_settings->documentView().prefetch()); + + m_prefetchDistanceSpinBox = addSpinBox(m_graphicsLayout, tr("Prefetch distance:"), QString(), QString(), QString(), + 1, 10, 1, s_settings->documentView().prefetchDistance()); +} + +void SettingsDialog::acceptGraphicsTab() +{ + s_settings->pageItem().setUseTiling(m_useTilingCheckBox->isChecked()); + s_settings->pageItem().setKeepObsoletePixmaps(m_keepObsoletePixmapsCheckBox->isChecked()); + s_settings->pageItem().setUseDevicePixelRatio(m_useDevicePixelRatioCheckBox->isChecked()); + + s_settings->pageItem().setDecoratePages(m_decoratePagesCheckBox->isChecked()); + s_settings->pageItem().setDecorateLinks(m_decorateLinksCheckBox->isChecked()); + s_settings->pageItem().setDecorateFormFields(m_decorateFormFieldsCheckBox->isChecked()); + + s_settings->pageItem().setBackgroundColor(validColorFromCurrentText(m_backgroundColorComboBox, Defaults::PageItem::backgroundColor())); + s_settings->pageItem().setPaperColor(validColorFromCurrentText(m_paperColorComboBox, Defaults::PageItem::paperColor())); + s_settings->presentationView().setBackgroundColor(validColorFromCurrentText(m_presentationBackgroundColorComboBox, Defaults::PresentationView::backgroundColor())); + + s_settings->documentView().setPagesPerRow(m_pagesPerRowSpinBox->value()); + + s_settings->documentView().setPageSpacing(m_pageSpacingSpinBox->value()); + s_settings->documentView().setThumbnailSpacing(m_thumbnailSpacingSpinBox->value()); + + s_settings->documentView().setThumbnailSize(m_thumbnailSizeSpinBox->value()); + + s_settings->pageItem().setCacheSize(dataFromCurrentIndex(m_cacheSizeComboBox)); + s_settings->documentView().setPrefetch(m_prefetchCheckBox->isChecked()); + s_settings->documentView().setPrefetchDistance(m_prefetchDistanceSpinBox->value()); + + if(m_pdfSettingsWidget != 0) + { + m_pdfSettingsWidget->accept(); + } + + if(m_psSettingsWidget != 0) + { + m_psSettingsWidget->accept(); + } + + if(m_djvuSettingsWidget != 0) + { + m_djvuSettingsWidget->accept(); + } +} + +void SettingsDialog::resetGraphicsTab() +{ + m_useTilingCheckBox->setChecked(Defaults::PageItem::useTiling()); + m_keepObsoletePixmapsCheckBox->setChecked(Defaults::PageItem::keepObsoletePixmaps()); + m_useDevicePixelRatioCheckBox->setChecked(Defaults::PageItem::useDevicePixelRatio()); + + m_decoratePagesCheckBox->setChecked(Defaults::PageItem::decoratePages()); + m_decorateLinksCheckBox->setChecked(Defaults::PageItem::decorateLinks()); + m_decorateFormFieldsCheckBox->setChecked(Defaults::PageItem::decorateFormFields()); + + setCurrentTextToColorName(m_backgroundColorComboBox, Defaults::PageItem::backgroundColor()); + setCurrentTextToColorName(m_paperColorComboBox, Defaults::PageItem::paperColor()); + setCurrentTextToColorName(m_presentationBackgroundColorComboBox, Defaults::PresentationView::backgroundColor()); + + m_pagesPerRowSpinBox->setValue(Defaults::DocumentView::pagesPerRow()); + + m_pageSpacingSpinBox->setValue(Defaults::DocumentView::pageSpacing()); + m_thumbnailSpacingSpinBox->setValue(Defaults::DocumentView::thumbnailSpacing()); + + m_thumbnailSizeSpinBox->setValue(Defaults::DocumentView::thumbnailSize()); + + setCurrentIndexFromData(m_cacheSizeComboBox, Defaults::PageItem::cacheSize()); + m_prefetchCheckBox->setChecked(Defaults::DocumentView::prefetch()); + m_prefetchDistanceSpinBox->setValue(Defaults::DocumentView::prefetchDistance()); + + if(m_pdfSettingsWidget != 0) + { + m_pdfSettingsWidget->reset(); + } + + if(m_psSettingsWidget != 0) + { + m_psSettingsWidget->reset(); + } + + if(m_djvuSettingsWidget != 0) + { + m_djvuSettingsWidget->reset(); + } +} + +void SettingsDialog::createInterfaceTab() +{ + m_extendedSearchDock = addCheckBox(m_interfaceLayout, tr("Extended search dock:"), tr("Effective after restart."), + s_settings->mainWindow().extendedSearchDock()); + + m_annotationOverlayCheckBox = addCheckBox(m_interfaceLayout, tr("Annotation overlay:"), QString(), + s_settings->pageItem().annotationOverlay()); + + m_formFieldOverlayCheckBox = addCheckBox(m_interfaceLayout, tr("Form field overlay:"), QString(), + s_settings->pageItem().formFieldOverlay()); + + + m_tabPositionComboBox = addComboBox(m_interfaceLayout, tr("Tab position:"), QString(), + QStringList() << tr("Top") << tr("Bottom") << tr("Left") << tr("Right"), + QList< int >() << QTabWidget::North << QTabWidget::South << QTabWidget::West << QTabWidget::East, + s_settings->mainWindow().tabPosition()); + + m_tabVisibilityComboBox = addComboBox(m_interfaceLayout, tr("Tab visibility:"), QString(), + QStringList() << tr("As needed") << tr("Always") << tr("Never"), + QList< int >() << TabWidget::TabBarAsNeeded << TabWidget::TabBarAlwaysOn << TabWidget::TabBarAlwaysOff, + s_settings->mainWindow().tabVisibility()); + + m_spreadTabsCheckBox = addCheckBox(m_interfaceLayout, tr("Spread tabs:"), QString(), + s_settings->mainWindow().spreadTabs()); + + + m_newTabNextToCurrentTabCheckBox = addCheckBox(m_interfaceLayout, tr("New tab next to current tab:"), QString(), + s_settings->mainWindow().newTabNextToCurrentTab()); + + m_exitAfterLastTabCheckBox = addCheckBox(m_interfaceLayout, tr("Exit after last tab:"), QString(), + s_settings->mainWindow().exitAfterLastTab()); + + + m_recentlyUsedCountSpinBox = addSpinBox(m_interfaceLayout, tr("Recently used count:"), tr("Effective after restart."), QString(), QString(), + 1, 50, 1, s_settings->mainWindow().recentlyUsedCount()); + + m_recentlyClosedCountSpinBox = addSpinBox(m_interfaceLayout, tr("Recently closed count:"), tr("Effective after restart."), QString(), QString(), + 1, 25, 1, s_settings->mainWindow().recentlyClosedCount()); + + + m_fileToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("File tool bar:"), tr("Effective after restart."), + s_settings->mainWindow().fileToolBar().join(",")); + + m_editToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("Edit tool bar:"), tr("Effective after restart."), + s_settings->mainWindow().editToolBar().join(",")); + + m_viewToolBarLineEdit = addLineEdit(m_interfaceLayout, tr("View tool bar:"), tr("Effective after restart."), + s_settings->mainWindow().viewToolBar().join(",")); + + m_documentContextMenuLineEdit = addLineEdit(m_interfaceLayout, tr("Document context menu:"), QString(), + s_settings->mainWindow().documentContextMenu().join(",")); + + m_tabContextMenuLineEdit = addLineEdit(m_interfaceLayout, tr("Tab context menu:"), QString(), + s_settings->mainWindow().tabContextMenu().join(",")); + + m_scrollableMenusCheckBox = addCheckBox(m_interfaceLayout, tr("Scrollable menus:"), tr("Effective after restart."), + s_settings->mainWindow().scrollableMenus()); + + m_searchableMenusCheckBox = addCheckBox(m_interfaceLayout, tr("Searchable menus:"), QString(), + s_settings->mainWindow().searchableMenus()); + + + m_toggleToolAndMenuBarsWithFullscreenCheckBox = addCheckBox(m_interfaceLayout, tr("Toggle tool and menu bars with fullscreen:"), QString(), + s_settings->mainWindow().toggleToolAndMenuBarsWithFullscreen()); + + + m_usePageLabelCheckBox = addCheckBox(m_interfaceLayout, tr("Use page label:"), QString(), + s_settings->mainWindow().usePageLabel()); + + m_documentTitleAsTabTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Document title as tab title:"), QString(), + s_settings->mainWindow().documentTitleAsTabTitle()); + + + m_currentPageInWindowTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Current page in window title:"), QString(), + s_settings->mainWindow().currentPageInWindowTitle()); + + m_instanceNameInWindowTitleCheckBox = addCheckBox(m_interfaceLayout, tr("Instance name in window title:"), QString(), + s_settings->mainWindow().instanceNameInWindowTitle()); + + + m_highlightCurrentThumbnailCheckBox = addCheckBox(m_interfaceLayout, tr("Highlight current thumbnail:"), QString(), + s_settings->documentView().highlightCurrentThumbnail()); + + m_limitThumbnailsToResultsCheckBox = addCheckBox(m_interfaceLayout, tr("Limit thumbnails to results:"), QString(), + s_settings->documentView().limitThumbnailsToResults()); +} + +void SettingsDialog::acceptInterfaceTab() +{ + s_settings->mainWindow().setExtendedSearchDock(m_extendedSearchDock->isChecked()); + + s_settings->pageItem().setAnnotationOverlay(m_annotationOverlayCheckBox->isChecked()); + s_settings->pageItem().setFormFieldOverlay(m_formFieldOverlayCheckBox); + + s_settings->mainWindow().setTabPosition(dataFromCurrentIndex(m_tabPositionComboBox)); + s_settings->mainWindow().setTabVisibility(dataFromCurrentIndex(m_tabVisibilityComboBox)); + s_settings->mainWindow().setSpreadTabs(m_spreadTabsCheckBox->isChecked()); + + s_settings->mainWindow().setNewTabNextToCurrentTab(m_newTabNextToCurrentTabCheckBox->isChecked()); + s_settings->mainWindow().setExitAfterLastTab(m_exitAfterLastTabCheckBox->isChecked()); + + s_settings->mainWindow().setRecentlyUsedCount(m_recentlyUsedCountSpinBox->value()); + s_settings->mainWindow().setRecentlyClosedCount(m_recentlyClosedCountSpinBox->value()); + + s_settings->mainWindow().setFileToolBar(m_fileToolBarLineEdit->text().split(",", QString::SkipEmptyParts)); + s_settings->mainWindow().setEditToolBar(m_editToolBarLineEdit->text().split(",", QString::SkipEmptyParts)); + s_settings->mainWindow().setViewToolBar(m_viewToolBarLineEdit->text().split(",", QString::SkipEmptyParts)); + + s_settings->mainWindow().setDocumentContextMenu(m_documentContextMenuLineEdit->text().split(",", QString::SkipEmptyParts)); + s_settings->mainWindow().setTabContextMenu(m_tabContextMenuLineEdit->text().split(",", QString::SkipEmptyParts)); + + s_settings->mainWindow().setScrollableMenus(m_scrollableMenusCheckBox->isChecked()); + s_settings->mainWindow().setSearchableMenus(m_searchableMenusCheckBox->isChecked()); + + s_settings->mainWindow().setToggleToolAndMenuBarsWithFullscreen(m_toggleToolAndMenuBarsWithFullscreenCheckBox->isChecked()); + + s_settings->mainWindow().setUsePageLabel(m_usePageLabelCheckBox->isChecked()); + s_settings->mainWindow().setDocumentTitleAsTabTitle(m_documentTitleAsTabTitleCheckBox->isChecked()); + + s_settings->mainWindow().setCurrentPageInWindowTitle(m_currentPageInWindowTitleCheckBox->isChecked()); + s_settings->mainWindow().setInstanceNameInWindowTitle(m_instanceNameInWindowTitleCheckBox->isChecked()); + + s_settings->documentView().setHighlightCurrentThumbnail(m_highlightCurrentThumbnailCheckBox->isChecked()); + s_settings->documentView().setLimitThumbnailsToResults(m_limitThumbnailsToResultsCheckBox->isChecked()); +} + +void SettingsDialog::resetInterfaceTab() +{ + m_extendedSearchDock->setChecked(Defaults::MainWindow::extendedSearchDock()); + + m_annotationOverlayCheckBox->setChecked(Defaults::PageItem::annotationOverlay()); + m_formFieldOverlayCheckBox->setChecked(Defaults::PageItem::formFieldOverlay()); + + setCurrentIndexFromData(m_tabPositionComboBox, Defaults::MainWindow::tabPosition()); + setCurrentIndexFromData(m_tabVisibilityComboBox, Defaults::MainWindow::tabVisibility()); + m_spreadTabsCheckBox->setChecked(Defaults::MainWindow::spreadTabs()); + + m_newTabNextToCurrentTabCheckBox->setChecked(Defaults::MainWindow::newTabNextToCurrentTab()); + m_exitAfterLastTabCheckBox->setChecked(Defaults::MainWindow::exitAfterLastTab()); + + m_recentlyUsedCountSpinBox->setValue(Defaults::MainWindow::recentlyUsedCount()); + m_recentlyClosedCountSpinBox->setValue(Defaults::MainWindow::recentlyClosedCount()); + + m_fileToolBarLineEdit->setText(Defaults::MainWindow::fileToolBar().join(",")); + m_editToolBarLineEdit->setText(Defaults::MainWindow::editToolBar().join(",")); + m_viewToolBarLineEdit->setText(Defaults::MainWindow::viewToolBar().join(",")); + + m_documentContextMenuLineEdit->setText(Defaults::MainWindow::documentContextMenu().join(",")); + m_tabContextMenuLineEdit->setText(Defaults::MainWindow::tabContexntMenu().join(",")); + + m_scrollableMenusCheckBox->setChecked(Defaults::MainWindow::scrollableMenus()); + m_searchableMenusCheckBox->setChecked(Defaults::MainWindow::searchableMenus()); + + m_toggleToolAndMenuBarsWithFullscreenCheckBox->setChecked(Defaults::MainWindow::toggleToolAndMenuBarsWithFullscreen()); + + m_usePageLabelCheckBox->setChecked(Defaults::MainWindow::usePageLabel()); + m_documentTitleAsTabTitleCheckBox->setChecked(Defaults::MainWindow::documentTitleAsTabTitle()); + + m_currentPageInWindowTitleCheckBox->setChecked(Defaults::MainWindow::currentPageInWindowTitle()); + m_instanceNameInWindowTitleCheckBox->setChecked(Defaults::MainWindow::instanceNameInWindowTitle()); + + m_highlightCurrentThumbnailCheckBox->setChecked(Defaults::DocumentView::highlightCurrentThumbnail()); + m_limitThumbnailsToResultsCheckBox->setChecked(Defaults::DocumentView::limitThumbnailsToResults()); +} + +void SettingsDialog::createModifiersTab() +{ + m_zoomModifiersComboBox = addModifiersComboBox(m_wheelModifiersLayout, tr("Zoom:"), QString(), + s_settings->documentView().zoomModifiers()); + + m_rotateModifiersComboBox = addModifiersComboBox(m_wheelModifiersLayout, tr("Rotate:"), QString(), + s_settings->documentView().rotateModifiers()); + + m_scrollModifiersComboBox = addModifiersComboBox(m_wheelModifiersLayout, tr("Scroll:"), QString(), + s_settings->documentView().scrollModifiers()); + + m_copyToClipboardModifiersComboBox = addModifiersComboBox(m_buttonModifiersLayout, tr("Copy to clipboard:"), QString(), + s_settings->pageItem().copyToClipboardModifiers()); + + m_addAnnotationModifiersComboBox = addModifiersComboBox(m_buttonModifiersLayout, tr("Add annotation:"), QString(), + s_settings->pageItem().addAnnotationModifiers()); + + m_zoomToSelectionModifiersComboBox = addModifiersComboBox(m_buttonModifiersLayout, tr("Zoom to selection:"), QString(), + s_settings->pageItem().zoomToSelectionModifiers()); + + m_openInSourceEditorModifiersComboBox = addModifiersComboBox(m_buttonModifiersLayout, tr("Open in source editor:"), QString(), + s_settings->pageItem().openInSourceEditorModifiers()); + +#ifndef WITH_SYNCTEX + + m_openInSourceEditorModifiersComboBox->setEnabled(false); + +#endif // WITH_SYNCTEX +} + +void SettingsDialog::acceptModifiersTab() +{ + s_settings->documentView().setZoomModifiers(keyboardModifierFromCurrentIndex(m_zoomModifiersComboBox)); + s_settings->documentView().setRotateModifiers(keyboardModifierFromCurrentIndex(m_rotateModifiersComboBox)); + s_settings->documentView().setScrollModifiers(keyboardModifierFromCurrentIndex(m_scrollModifiersComboBox)); + + s_settings->pageItem().setCopyToClipboardModifiers(keyboardModifierFromCurrentIndex(m_copyToClipboardModifiersComboBox)); + s_settings->pageItem().setAddAnnotationModifiers(keyboardModifierFromCurrentIndex(m_addAnnotationModifiersComboBox)); + s_settings->pageItem().setZoomToSelectionModifiers(keyboardModifierFromCurrentIndex(m_zoomToSelectionModifiersComboBox)); + s_settings->pageItem().setOpenInSourceEditorModifiers(keyboardModifierFromCurrentIndex(m_openInSourceEditorModifiersComboBox)); +} + +void SettingsDialog::resetModifiersTab() +{ + setCurrentIndexFromKeyboardModifiers(m_zoomModifiersComboBox, Defaults::DocumentView::zoomModifiers()); + setCurrentIndexFromKeyboardModifiers(m_rotateModifiersComboBox, Defaults::DocumentView::rotateModifiers()); + setCurrentIndexFromKeyboardModifiers(m_scrollModifiersComboBox, Defaults::DocumentView::scrollModifiers()); + + setCurrentIndexFromKeyboardModifiers(m_copyToClipboardModifiersComboBox, Defaults::PageItem::copyToClipboardModifiers()); + setCurrentIndexFromKeyboardModifiers(m_addAnnotationModifiersComboBox, Defaults::PageItem::addAnnotationModifiers()); + setCurrentIndexFromKeyboardModifiers(m_zoomToSelectionModifiersComboBox, Defaults::PageItem::zoomToSelectionModifiers()); + setCurrentIndexFromKeyboardModifiers(m_openInSourceEditorModifiersComboBox, Defaults::PageItem::openInSourceEditorModifiers()); +} + +QCheckBox* SettingsDialog::addCheckBox(QFormLayout* layout, const QString& label, const QString& toolTip, bool checked) +{ + QCheckBox* checkBox = new QCheckBox(this); + checkBox->setChecked(checked); + + checkBox->setToolTip(toolTip); + layout->addRow(label, checkBox); + + return checkBox; +} + +QLineEdit* SettingsDialog::addLineEdit(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& text) +{ + QLineEdit* lineEdit = new QLineEdit(this); + lineEdit->setText(text); + + lineEdit->setToolTip(toolTip); + layout->addRow(label, lineEdit); + + return lineEdit; +} + +QSpinBox* SettingsDialog::addSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, int min, int max, int step, int val) +{ + QSpinBox* spinBox = new QSpinBox(this); + spinBox->setRange(min, max); + spinBox->setSingleStep(step); + spinBox->setValue(val); + + spinBox->setSuffix(suffix); + spinBox->setSpecialValueText(special); + + spinBox->setToolTip(toolTip); + layout->addRow(label, spinBox); + + return spinBox; +} + +QDoubleSpinBox* SettingsDialog::addDoubleSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, double min, double max, double step, double val) +{ + QDoubleSpinBox* spinBox = new QDoubleSpinBox(this); + spinBox->setRange(min, max); + spinBox->setSingleStep(step); + spinBox->setValue(val); + + spinBox->setSuffix(suffix); + spinBox->setSpecialValueText(special); + + spinBox->setToolTip(toolTip); + layout->addRow(label, spinBox); + + return spinBox; +} + +QComboBox* SettingsDialog::addComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QStringList& text, const QList< int >& data, int value) +{ + QComboBox* comboBox = new QComboBox(this); + + for(int index = 0, count = text.count(); index < count; ++index) + { + comboBox->addItem(text.at(index), data.at(index)); + } + + setCurrentIndexFromData(comboBox, value); + + comboBox->setToolTip(toolTip); + layout->addRow(label, comboBox); + + return comboBox; +} + +QComboBox* SettingsDialog::addDataSizeComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, int initialDataSize) +{ + QComboBox* comboBox = new QComboBox(this); + + for(int dataSize = 8; dataSize <= 8192; dataSize *= 2) + { + comboBox->addItem(tr("%1 MB").arg(dataSize), dataSize * 1024); + } + + int currentIndex = comboBox->findData(initialDataSize); + + if(currentIndex == -1) + { + currentIndex = comboBox->count(); + + comboBox->addItem(tr("%1 MB").arg(initialDataSize / 1024), initialDataSize); + } + + comboBox->setCurrentIndex(currentIndex); + + comboBox->setToolTip(toolTip); + layout->addRow(label, comboBox); + + return comboBox; +} + +QComboBox* SettingsDialog::addColorComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QColor& color) +{ + QComboBox* comboBox = new QComboBox(this); + comboBox->setEditable(true); + comboBox->setInsertPolicy(QComboBox::NoInsert); + comboBox->addItems(QColor::colorNames()); + + setCurrentTextToColorName(comboBox, color); + + comboBox->setToolTip(toolTip); + layout->addRow(label, comboBox); + + return comboBox; +} + +QComboBox* SettingsDialog::addModifiersComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, Qt::KeyboardModifiers modifiers) +{ + QComboBox* comboBox = new QComboBox(this); + comboBox->addItem(QShortcut::tr("Shift"), static_cast< int >(Qt::ShiftModifier)); + comboBox->addItem(QShortcut::tr("Ctrl"), static_cast< int >(Qt::ControlModifier)); + comboBox->addItem(QShortcut::tr("Alt"), static_cast< int >(Qt::AltModifier)); + comboBox->addItem(QShortcut::tr("Shift and Ctrl"), static_cast< int >(Qt::ShiftModifier | Qt::ControlModifier)); + comboBox->addItem(QShortcut::tr("Shift and Alt"), static_cast< int >(Qt::ShiftModifier | Qt::AltModifier)); + comboBox->addItem(QShortcut::tr("Ctrl and Alt"), static_cast< int >(Qt::ControlModifier | Qt::AltModifier)); + comboBox->addItem(QShortcut::tr("Right mouse button"), static_cast< int >(Qt::RightButton)); + comboBox->addItem(QShortcut::tr("Middle mouse button"), static_cast< int >(Qt::MidButton)); + comboBox->addItem(QShortcut::tr("None"), static_cast< int >(Qt::NoModifier)); + + setCurrentIndexFromKeyboardModifiers(comboBox, modifiers); + + comboBox->setToolTip(toolTip); + layout->addRow(label, comboBox); + + return comboBox; +} + +} // qpdfview diff --git a/sources/settingsdialog.h b/sources/settingsdialog.h new file mode 100644 index 0000000..49c7255 --- /dev/null +++ b/sources/settingsdialog.h @@ -0,0 +1,222 @@ +/* + +Copyright 2015 S. Razi Alavizadeh +Copyright 2012-2015 Adam Reichold +Copyright 2012 Alexander Volkov + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include + +class QCheckBox; +class QComboBox; +class QDialogButtonBox; +class QDoubleSpinBox; +class QFormLayout; +class QGroupBox; +class QLineEdit; +class QSpinBox; +class QTableView; +class QTabWidget; + +namespace qpdfview +{ + +class Settings; +class SettingsWidget; + +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + SettingsDialog(QWidget* parent = 0); + ~SettingsDialog(); + +public slots: + void accept(); + void reset(); + void resetCurrentTab(); + +private: + Q_DISABLE_COPY(SettingsDialog) + + static Settings* s_settings; + + QTabWidget* m_graphicsTabWidget; + QFormLayout* m_graphicsLayout; + + SettingsWidget* m_pdfSettingsWidget; + SettingsWidget* m_psSettingsWidget; + SettingsWidget* m_djvuSettingsWidget; + + QTableView* m_shortcutsTableView; + + QTabWidget* m_tabWidget; + QDialogButtonBox* m_dialogButtonBox; + QPushButton* m_defaultsButton; + QPushButton* m_defaultsOnCurrentTabButton; + + QFormLayout* m_behaviorLayout; + QFormLayout* m_interfaceLayout; + + QGroupBox* m_wheelModifiersGroupBox; + QFormLayout* m_wheelModifiersLayout; + + QGroupBox* m_buttonModifiersGroupBox; + QFormLayout* m_buttonModifiersLayout; + + // behavior + + QCheckBox* m_openUrlCheckBox; + + QCheckBox* m_autoRefreshCheckBox; + + QCheckBox* m_trackRecentlyUsedCheckBox; + QCheckBox* m_keepRecentlyClosedCheckBox; + + QCheckBox* m_restoreTabsCheckBox; + QCheckBox* m_restoreBookmarksCheckBox; + QCheckBox* m_restorePerFileSettingsCheckBox; + QSpinBox* m_saveDatabaseInterval; + + QCheckBox* m_synchronizePresentationCheckBox; + QSpinBox* m_presentationScreenSpinBox; + + QCheckBox* m_synchronizeOutlineViewCheckBox; + QCheckBox* m_synchronizeSplitViewsCheckBox; + + QCheckBox* m_minimalScrollingCheckBox; + QDoubleSpinBox* m_zoomFactorSpinBox; + QCheckBox* m_parallelSearchExecutionCheckBox; + + QSpinBox* m_highlightDurationSpinBox; + QComboBox* m_highlightColorComboBox; + QComboBox* m_annotationColorComboBox; + + QLineEdit* m_sourceEditorLineEdit; + + void createBehaviorTab(); + void acceptBehaivorTab(); + void resetBehaviorTab(); + + // graphics + + QCheckBox* m_useTilingCheckBox; + QCheckBox* m_keepObsoletePixmapsCheckBox; + QCheckBox* m_useDevicePixelRatioCheckBox; + + QCheckBox* m_decoratePagesCheckBox; + QCheckBox* m_decorateLinksCheckBox; + QCheckBox* m_decorateFormFieldsCheckBox; + + QComboBox* m_backgroundColorComboBox; + QComboBox* m_paperColorComboBox; + QComboBox* m_presentationBackgroundColorComboBox; + + QSpinBox* m_pagesPerRowSpinBox; + + QDoubleSpinBox* m_pageSpacingSpinBox; + QDoubleSpinBox* m_thumbnailSpacingSpinBox; + + QDoubleSpinBox* m_thumbnailSizeSpinBox; + + QComboBox* m_cacheSizeComboBox; + QCheckBox* m_prefetchCheckBox; + QSpinBox* m_prefetchDistanceSpinBox; + + void createGraphicsTab(); + void acceptGraphicsTab(); + void resetGraphicsTab(); + + // interface + + QCheckBox* m_extendedSearchDock; + + QCheckBox* m_annotationOverlayCheckBox; + QCheckBox* m_formFieldOverlayCheckBox; + + QComboBox* m_tabPositionComboBox; + QComboBox* m_tabVisibilityComboBox; + QCheckBox* m_spreadTabsCheckBox; + + QCheckBox* m_newTabNextToCurrentTabCheckBox; + QCheckBox* m_exitAfterLastTabCheckBox; + + QSpinBox* m_recentlyUsedCountSpinBox; + QSpinBox* m_recentlyClosedCountSpinBox; + + QLineEdit* m_fileToolBarLineEdit; + QLineEdit* m_editToolBarLineEdit; + QLineEdit* m_viewToolBarLineEdit; + + QLineEdit* m_documentContextMenuLineEdit; + QLineEdit* m_tabContextMenuLineEdit; + + QCheckBox* m_scrollableMenusCheckBox; + QCheckBox* m_searchableMenusCheckBox; + + QCheckBox* m_toggleToolAndMenuBarsWithFullscreenCheckBox; + + QCheckBox* m_usePageLabelCheckBox; + QCheckBox* m_documentTitleAsTabTitleCheckBox; + + QCheckBox* m_currentPageInWindowTitleCheckBox; + QCheckBox* m_instanceNameInWindowTitleCheckBox; + + QCheckBox* m_highlightCurrentThumbnailCheckBox; + QCheckBox* m_limitThumbnailsToResultsCheckBox; + + void createInterfaceTab(); + void acceptInterfaceTab(); + void resetInterfaceTab(); + + // modifiers + + QComboBox* m_zoomModifiersComboBox; + QComboBox* m_rotateModifiersComboBox; + QComboBox* m_scrollModifiersComboBox; + + QComboBox* m_copyToClipboardModifiersComboBox; + QComboBox* m_addAnnotationModifiersComboBox; + QComboBox* m_zoomToSelectionModifiersComboBox; + QComboBox* m_openInSourceEditorModifiersComboBox; + + void createModifiersTab(); + void acceptModifiersTab(); + void resetModifiersTab(); + + // helper methods + + QCheckBox* addCheckBox(QFormLayout* layout, const QString& label, const QString& toolTip, bool checked); + QLineEdit* addLineEdit(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& text); + QSpinBox* addSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, int min, int max, int step, int val); + QDoubleSpinBox* addDoubleSpinBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QString& suffix, const QString& special, double min, double max, double step, double val); + QComboBox* addComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QStringList& text, const QList< int >& data, int value); + QComboBox* addDataSizeComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, int initialDataSize); + QComboBox* addColorComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, const QColor& color); + QComboBox* addModifiersComboBox(QFormLayout* layout, const QString& label, const QString& toolTip, Qt::KeyboardModifiers modifiers); + +}; + +} // qpdfview + +#endif // SETTINGSDIALOG_H diff --git a/sources/shortcuthandler.cpp b/sources/shortcuthandler.cpp new file mode 100644 index 0000000..e2c9f3b --- /dev/null +++ b/sources/shortcuthandler.cpp @@ -0,0 +1,297 @@ +/* + +Copyright 2013, 2016 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "shortcuthandler.h" + +#include +#include + +#include "documentview.h" + +namespace +{ + +QList< QKeySequence > toShortcuts(const QStringList& stringList) +{ + QList< QKeySequence > shortcuts; + + foreach(const QString& string, stringList) + { + QKeySequence shortcut(string.trimmed()); + + if(!shortcut.isEmpty()) + { + shortcuts.append(shortcut); + } + } + + return shortcuts; +} + +QStringList toStringList(const QList< QKeySequence >& shortcuts, QKeySequence::SequenceFormat format = QKeySequence::PortableText) +{ + QStringList stringList; + + foreach(const QKeySequence& shortcut, shortcuts) + { + stringList.append(shortcut.toString(format)); + } + + return stringList; +} + +inline bool matches(const QKeySequence& keySequence, const QList< QKeySequence >& shortcuts) +{ + foreach(const QKeySequence& shortcut, shortcuts) + { + if(keySequence.matches(shortcut) == QKeySequence::ExactMatch) + { + return true; + } + } + + return false; +} + +} // anonymous + +namespace qpdfview +{ + +ShortcutHandler* ShortcutHandler::s_instance = 0; + +ShortcutHandler* ShortcutHandler::instance() +{ + if(s_instance == 0) + { + s_instance = new ShortcutHandler(qApp); + } + + return s_instance; +} + +ShortcutHandler::~ShortcutHandler() +{ + s_instance = 0; +} + +void ShortcutHandler::registerAction(QAction* action) +{ + Q_ASSERT(!action->objectName().isEmpty()); + + const QList< QKeySequence > defaultShortcuts = action->shortcuts(); + const QList< QKeySequence > shortcuts = toShortcuts(m_settings->value(action->objectName(), toStringList(defaultShortcuts)).toStringList()); + + action->setShortcuts(shortcuts); + + m_actions.append(action); + m_shortcuts.insert(action, shortcuts); + m_defaultShortcuts.insert(action, defaultShortcuts); +} + +int ShortcutHandler::columnCount(const QModelIndex& parent) const +{ + Q_UNUSED(parent); + + return 2; +} + +int ShortcutHandler::rowCount(const QModelIndex& parent) const +{ + Q_UNUSED(parent); + + return m_actions.count(); +} + +Qt::ItemFlags ShortcutHandler::flags(const QModelIndex& index) const +{ + switch(index.column()) + { + case 0: + return Qt::ItemIsEnabled; + case 1: + return Qt::ItemIsEnabled | Qt::ItemIsEditable; + } + + return Qt::NoItemFlags; +} + +QVariant ShortcutHandler::headerData(int section, Qt::Orientation orientation, int role) const +{ + Q_UNUSED(orientation); + + if(role == Qt::DisplayRole) + { + switch(section) + { + case 0: + return tr("Action"); + case 1: + return tr("Key sequence"); + } + } + + return QVariant(); +} + +QVariant ShortcutHandler::data(const QModelIndex& index, int role) const +{ + if((role == Qt::DisplayRole || role == Qt::EditRole) && index.row() >= 0 && index.row() < m_actions.count()) + { + QAction* action = m_actions.at(index.row()); + + switch(index.column()) + { + case 0: + return action->text().remove(QLatin1Char('&')); + case 1: + return toStringList(m_shortcuts.value(action), QKeySequence::NativeText).join(";"); + } + } + + return QVariant(); +} + +bool ShortcutHandler::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if(role == Qt::EditRole && index.column() == 1 && index.row() >= 0 && index.row() < m_actions.count()) + { + QList< QKeySequence > shortcuts = toShortcuts(value.toString().split(";", QString::SkipEmptyParts)); + + if(!shortcuts.isEmpty() || value.toString().isEmpty()) + { + m_shortcuts.insert(m_actions.at(index.row()), shortcuts); + + emit dataChanged(index, index); + + return true; + } + } + + return false; +} + +bool ShortcutHandler::matchesSkipBackward(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_skipBackwardAction->shortcuts()); +} + +bool ShortcutHandler::matchesSkipForward(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_skipForwardAction->shortcuts()); +} + +bool ShortcutHandler::matchesMoveUp(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_moveUpAction->shortcuts()); +} + +bool ShortcutHandler::matchesMoveDown(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_moveDownAction->shortcuts()); +} + +bool ShortcutHandler::matchesMoveLeft(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_moveLeftAction->shortcuts()); +} + +bool ShortcutHandler::matchesMoveRight(const QKeySequence& keySequence) const +{ + return matches(keySequence, m_moveRightAction->shortcuts()); +} + +bool ShortcutHandler::submit() +{ + for(Shortcuts::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator) + { + iterator.key()->setShortcuts(iterator.value()); + } + + foreach(const QAction* action, m_actions) + { + m_settings->setValue(action->objectName(), toStringList(action->shortcuts())); + } + + return true; +} + +void ShortcutHandler::revert() +{ + for(Shortcuts::iterator iterator = m_shortcuts.begin(); iterator != m_shortcuts.end(); ++iterator) + { + iterator.value() = iterator.key()->shortcuts(); + } +} + +void ShortcutHandler::reset() +{ + for(Shortcuts::iterator iterator = m_defaultShortcuts.begin(); iterator != m_defaultShortcuts.end(); ++iterator) + { + m_shortcuts.insert(iterator.key(), iterator.value()); + } + + emit dataChanged(createIndex(0, 1), createIndex(m_actions.count(), 1)); +} + +ShortcutHandler::ShortcutHandler(QObject* parent) : QAbstractTableModel(parent), + m_settings(new QSettings("qpdfview", "shortcuts", this)), + m_actions(), + m_shortcuts(), + m_defaultShortcuts() +{ + m_skipBackwardAction = createAction( + tr("Skip backward"), QLatin1String("skipBackward"), + QList< QKeySequence >() << QKeySequence(Qt::Key_PageUp) << QKeySequence(Qt::KeypadModifier + Qt::Key_PageUp)); + + m_skipForwardAction = createAction( + tr("Skip forward"), QLatin1String("skipForward"), + QList< QKeySequence >() << QKeySequence(Qt::Key_PageDown) << QKeySequence(Qt::KeypadModifier + Qt::Key_PageDown)); + + m_moveUpAction = createAction( + tr("Move up"), QLatin1String("moveUp"), + QList< QKeySequence >() << QKeySequence(Qt::Key_Up) << QKeySequence(Qt::KeypadModifier + Qt::Key_Up)); + + m_moveDownAction = createAction( + tr("Move down"), QLatin1String("moveDown"), + QList< QKeySequence >() << QKeySequence(Qt::Key_Down) << QKeySequence(Qt::KeypadModifier + Qt::Key_Down)); + + m_moveLeftAction = createAction( + tr("Move left"), QLatin1String("moveLeft"), + QList< QKeySequence >() << QKeySequence(Qt::Key_Left) << QKeySequence(Qt::KeypadModifier + Qt::Key_Left)); + + m_moveRightAction = createAction( + tr("Move right"), QLatin1String("moveRight"), + QList< QKeySequence >() << QKeySequence(Qt::Key_Right) << QKeySequence(Qt::KeypadModifier + Qt::Key_Right)); +} + +QAction* ShortcutHandler::createAction(const QString& text, const QString& objectName, const QList& shortcuts) +{ + QAction* action = new QAction(text, this); + action->setObjectName(objectName); + action->setShortcuts(shortcuts); + + registerAction(action); + + return action; +} + +} // qpdfview diff --git a/sources/shortcuthandler.h b/sources/shortcuthandler.h new file mode 100644 index 0000000..d87475c --- /dev/null +++ b/sources/shortcuthandler.h @@ -0,0 +1,96 @@ +/* + +Copyright 2013, 2016 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SHORTCUTHANDLER_H +#define SHORTCUTHANDLER_H + +#include +#include +#include + +class QSettings; + +namespace qpdfview +{ + +class ShortcutHandler : public QAbstractTableModel +{ + Q_OBJECT + +public: + static ShortcutHandler* instance(); + ~ShortcutHandler(); + + void registerAction(QAction* action); + + int columnCount(const QModelIndex& parent) const; + int rowCount(const QModelIndex& parent) const; + + Qt::ItemFlags flags(const QModelIndex& index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + + QVariant data(const QModelIndex& index, int role) const; + bool setData(const QModelIndex& index, const QVariant& value, int role); + + bool matchesSkipBackward(const QKeySequence& keySequence) const; + bool matchesSkipForward(const QKeySequence& keySequence) const; + + bool matchesMoveUp(const QKeySequence& keySequence) const; + bool matchesMoveDown(const QKeySequence& keySequence) const; + bool matchesMoveLeft(const QKeySequence& keySequence) const; + bool matchesMoveRight(const QKeySequence& keySequence) const; + +public slots: + bool submit(); + void revert(); + + void reset(); + +private: + Q_DISABLE_COPY(ShortcutHandler) + + static ShortcutHandler* s_instance; + ShortcutHandler(QObject* parent = 0); + + QSettings* m_settings; + + QList< QAction* > m_actions; + + typedef QHash< QAction*, QList< QKeySequence > > Shortcuts; + Shortcuts m_shortcuts; + Shortcuts m_defaultShortcuts; + + QAction* m_skipBackwardAction; + QAction* m_skipForwardAction; + + QAction* m_moveUpAction; + QAction* m_moveDownAction; + QAction* m_moveLeftAction; + QAction* m_moveRightAction; + + QAction* createAction(const QString& text, const QString& objectName, const QList< QKeySequence >& shortcuts); + +}; + +} // qpdfview + +#endif // SHORTCUTHANDLER_H diff --git a/sources/signalhandler.cpp b/sources/signalhandler.cpp new file mode 100644 index 0000000..7a191c9 --- /dev/null +++ b/sources/signalhandler.cpp @@ -0,0 +1,99 @@ +/* + +Copyright 2013, 2015 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "signalhandler.h" + +#include +#include +#include + +#include + +namespace qpdfview +{ + +int SignalHandler::s_sockets[2]; + +bool SignalHandler::prepareSignals() +{ + if(socketpair(AF_UNIX, SOCK_STREAM, 0, s_sockets) != 0) + { + return false; + } + + struct sigaction sigAction; + + sigAction.sa_handler = SignalHandler::handleSignals; + sigemptyset(&sigAction.sa_mask); + sigAction.sa_flags = SA_RESTART; + + if(sigaction(SIGINT, &sigAction, 0) != 0) + { + close(s_sockets[0]); + close(s_sockets[1]); + + return false; + } + + if(sigaction(SIGTERM, &sigAction, 0) != 0) + { + close(s_sockets[0]); + close(s_sockets[1]); + + return false; + } + + return true; +} + +SignalHandler::SignalHandler(QObject* parent) : QObject(parent), + m_socketNotifier(0) +{ + m_socketNotifier = new QSocketNotifier(s_sockets[1], QSocketNotifier::Read, this); + connect(m_socketNotifier, SIGNAL(activated(int)), SLOT(on_socketNotifier_activated())); +} + +void SignalHandler::on_socketNotifier_activated() +{ + m_socketNotifier->setEnabled(false); + + int sigNumber = 0; + Q_UNUSED(read(s_sockets[1], &sigNumber, sizeof(int))); + + switch(sigNumber) + { + case SIGINT: + emit sigIntReceived(); + break; + case SIGTERM: + emit sigTermReceived(); + break; + } + + m_socketNotifier->setEnabled(true); +} + +void SignalHandler::handleSignals(int sigNumber) +{ + Q_UNUSED(write(s_sockets[0], &sigNumber, sizeof(int))); +} + +} // qpdfview diff --git a/sources/signalhandler.h b/sources/signalhandler.h new file mode 100644 index 0000000..b5685bd --- /dev/null +++ b/sources/signalhandler.h @@ -0,0 +1,61 @@ +/* + +Copyright 2013 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef SIGNALHANDLER_H +#define SIGNALHANDLER_H + +#include + +class QSocketNotifier; + +namespace qpdfview +{ + +class SignalHandler : public QObject +{ + Q_OBJECT + +public: + static bool prepareSignals(); + + explicit SignalHandler(QObject* parent = 0); + +signals: + void sigIntReceived(); + void sigTermReceived(); + +private slots: + void on_socketNotifier_activated(); + +private: + Q_DISABLE_COPY(SignalHandler) + + static int s_sockets[2]; + + static void handleSignals(int sigNumber); + + QSocketNotifier* m_socketNotifier; + +}; + +} // qpdfview + +#endif // SIGNALHANDLER_H diff --git a/sources/thumbnailitem.cpp b/sources/thumbnailitem.cpp new file mode 100644 index 0000000..e1fd348 --- /dev/null +++ b/sources/thumbnailitem.cpp @@ -0,0 +1,193 @@ +/* + +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "thumbnailitem.h" + +#include +#include +#include +#include + +namespace qpdfview +{ + +ThumbnailItem::ThumbnailItem(Model::Page* page, const QString& text, int index, QGraphicsItem* parent) : PageItem(page, index, PageItem::ThumbnailMode, parent), + m_text(text), + m_isHighlighted(false) +{ + setAcceptHoverEvents(false); + + prepareToolTip(); +} + +QRectF ThumbnailItem::boundingRect() const +{ + return PageItem::boundingRect().adjusted(0.0, 0.0, 0.0, textHeight()); +} + +void ThumbnailItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + const QRectF boundingRect = PageItem::boundingRect(); + + + painter->save(); + + painter->setClipping(true); + painter->setClipRect(boundingRect); + + PageItem::paint(painter, option, widget); + + painter->restore(); + + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + const QSizeF textSize = m_text.size(); + + QPointF pos = boundingRect.bottomLeft(); + pos.rx() += 0.5 * (boundingRect.width() - textSize.width()); + pos.ry() += 0.5 * textSize.height(); + + painter->drawStaticText(pos, m_text); + +#else + + const QFontMetrics fontMetrics = QFontMetrics(QFont()); + + QPointF pos = boundingRect.bottomLeft(); + pos.rx() += 0.5 * (boundingRect.width() - fontMetrics.width(m_text)); + pos.ry() += fontMetrics.height(); + + painter->drawText(pos, m_text); + +#endif // QT_VERSION + + if(m_isHighlighted) + { + painter->save(); + + painter->setCompositionMode(QPainter::CompositionMode_Multiply); + painter->fillRect(boundingRect, widget->palette().highlight()); + + painter->restore(); + } +} + +qreal ThumbnailItem::textHeight() const +{ +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + return 2.0 * m_text.size().height(); + +#else + + return 2.0 * QFontMetrics(QFont()).height(); + +#endif // QT_VERSION +} + +void ThumbnailItem::setHighlighted(bool highlighted) +{ + if(m_isHighlighted != highlighted) + { + m_isHighlighted = highlighted; + + update(); + } +} + +void ThumbnailItem::mousePressEvent(QGraphicsSceneMouseEvent* event) +{ + if(event->modifiers() == Qt::NoModifier + && (event->button() == Qt::LeftButton || event->button() == Qt::MidButton)) + { + emit linkClicked(event->button() == Qt::MidButton, index() + 1); + + event->accept(); + return; + } + + event->ignore(); +} + +void ThumbnailItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) +{ +} + +void ThumbnailItem::mouseMoveEvent(QGraphicsSceneMouseEvent*) +{ +} + +void ThumbnailItem::mouseReleaseEvent(QGraphicsSceneMouseEvent*) +{ +} + +void ThumbnailItem::contextMenuEvent(QGraphicsSceneContextMenuEvent*) +{ +} + +void ThumbnailItem::prepareToolTip() +{ + const qreal width = size().width() / 72.0 * 25.4; + const qreal height = size().height() / 72.0 * 25.4; + + const qreal longEdge = qMax(width, height); + const qreal shortEdge = qMin(width, height); + + QString paperSize; + + if(qAbs(longEdge - 279.4) <= 1.0 && qAbs(shortEdge - 215.9) <= 1.0) + { + paperSize = QLatin1String(" (Letter)"); + } + else + { + qreal longEdgeA = 1189.0; + qreal shortEdgeA = 841.0; + + qreal longEdgeB = 1414.0; + qreal shortEdgeB = 1000.0; + + for(int size = 0; size <= 10; ++size) + { + if(qAbs(longEdge - longEdgeA) <= 1.0 && qAbs(shortEdge - shortEdgeA) <= 1.0) + { + paperSize = QString(" (A%1)").arg(size); + break; + } + else if(qAbs(longEdge - longEdgeB) <= 1.0 && qAbs(shortEdge - shortEdgeB) <= 1.0) + { + paperSize = QString(" (B%1)").arg(size); + break; + } + + longEdgeA = shortEdgeA; + shortEdgeA /= qSqrt(2.0); + + longEdgeB = shortEdgeB; + shortEdgeB /= qSqrt(2.0); + } + } + + setToolTip(QString("%1 mm x %2 mm%3").arg(width, 0, 'f', 1).arg(height, 0, 'f', 1).arg(paperSize)); +} + +} // qpdfview diff --git a/sources/thumbnailitem.h b/sources/thumbnailitem.h new file mode 100644 index 0000000..ee1c617 --- /dev/null +++ b/sources/thumbnailitem.h @@ -0,0 +1,99 @@ +/* + +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef THUMBNAILITEM_H +#define THUMBNAILITEM_H + +#include + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + +#include + +#endif // QT_VERSION + +#include "pageitem.h" + +namespace qpdfview +{ + +namespace Model +{ +class Page; +} + +class ThumbnailItem : public PageItem +{ + Q_OBJECT + +public: + ThumbnailItem(Model::Page* page, const QString& text, int index, QGraphicsItem* parent = 0); + + QRectF boundingRect() const; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget); + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + QString text() const { return m_text.text(); } + void setText(const QString& text) { m_text.setText(text); } + +#else + + const QString& text() const { return m_text; } + void setText(const QString& text) { m_text = text; } + +#endif // QT_VERSION + + qreal textHeight() const; + + bool isHighlighted() const { return m_isHighlighted; } + void setHighlighted(bool highlighted); + +protected: + void mousePressEvent(QGraphicsSceneMouseEvent* event); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*); + void mouseMoveEvent(QGraphicsSceneMouseEvent*); + void mouseReleaseEvent(QGraphicsSceneMouseEvent*); + + void contextMenuEvent(QGraphicsSceneContextMenuEvent*); + +private: + Q_DISABLE_COPY(ThumbnailItem) + +#if QT_VERSION >= QT_VERSION_CHECK(4,7,0) + + QStaticText m_text; + +#else + + QString m_text; + +#endif // QT_VERSION + + bool m_isHighlighted; + + void prepareToolTip(); + +}; + +} // qpdfview + +#endif // THUMBNAILITEM_H diff --git a/sources/tileitem.cpp b/sources/tileitem.cpp new file mode 100644 index 0000000..cbedc5e --- /dev/null +++ b/sources/tileitem.cpp @@ -0,0 +1,296 @@ +/* + +Copyright 2012-2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#include "tileitem.h" + +#include + +#include "settings.h" +#include "pageitem.h" + +namespace qpdfview +{ + +namespace +{ + +inline int cacheCost(const QPixmap& pixmap) +{ + return qMax(1, pixmap.width() * pixmap.height() * pixmap.depth() / 8 / 1024); +} + +} // anonymous + +Settings* TileItem::s_settings = 0; + +QCache< TileItem::CacheKey, TileItem::CacheObject > TileItem::s_cache; + +TileItem::TileItem(PageItem* page) : RenderTaskParent(), + m_page(page), + m_rect(), + m_cropRect(), + m_pixmapError(false), + m_pixmap(), + m_obsoletePixmap(), + m_deleteAfterRender(false), + m_renderTask(m_page->m_page, this) +{ + if(s_settings == 0) + { + s_settings = Settings::instance(); + } + + s_cache.setMaxCost(s_settings->pageItem().cacheSize()); +} + +TileItem::~TileItem() +{ + m_renderTask.cancel(true); + m_renderTask.wait(); +} + +void TileItem::setCropRect(const QRectF& cropRect) +{ + if(!m_page->m_renderParam.trimMargins()) + { + return; + } + + if(m_cropRect.isNull() && !cropRect.isNull()) + { + m_cropRect = cropRect; + + m_page->updateCropRect(); + } +} + +void TileItem::dropCachedPixmaps(PageItem* page) +{ + foreach(const CacheKey& key, s_cache.keys()) + { + if(key.first == page) + { + s_cache.remove(key); + } + } +} + +bool TileItem::paint(QPainter* painter, QPointF topLeft) +{ + const QPixmap& pixmap = takePixmap(); + + if(!pixmap.isNull()) + { + // pixmap + + painter->drawPixmap(m_rect.topLeft() + topLeft, pixmap); + + return true; + } + else if(!m_obsoletePixmap.isNull()) + { + // obsolete pixmap + + painter->drawPixmap(QRectF(m_rect).translated(topLeft), m_obsoletePixmap, QRectF()); + + return false; + } + else + { + const qreal iconExtent = qMin(0.1 * m_rect.width(), 0.1 * m_rect.height()); + const QRect iconRect(topLeft.x() + m_rect.left() + 0.01 * m_rect.width(), + topLeft.y() + m_rect.top() + 0.01 * m_rect.height(), + iconExtent, iconExtent); + + if(!m_pixmapError) + { + // progress icon + + s_settings->pageItem().progressIcon().paint(painter, iconRect); + + return false; + } + else + { + // error icon + + s_settings->pageItem().errorIcon().paint(painter, iconRect); + + return true; + } + } +} + +void TileItem::refresh(bool keepObsoletePixmaps) +{ + if(keepObsoletePixmaps && s_settings->pageItem().keepObsoletePixmaps()) + { + if(const CacheObject* object = s_cache.object(cacheKey())) + { + m_obsoletePixmap = object->first; + } + } + else + { + m_obsoletePixmap = QPixmap(); + } + + if(!keepObsoletePixmaps) + { + m_cropRect = QRectF(); + } + + m_renderTask.cancel(true); + + m_pixmapError = false; + m_pixmap = QPixmap(); +} + +int TileItem::startRender(bool prefetch) +{ + m_page->startLoadInteractiveElements(); + + if(m_pixmapError || m_renderTask.isRunning() || (prefetch && s_cache.contains(cacheKey()))) + { + return 0; + } + + m_renderTask.start(m_page->m_renderParam, m_rect, prefetch); + + return 1; +} + +void TileItem::cancelRender() +{ + m_renderTask.cancel(); + + m_pixmap = QPixmap(); + m_obsoletePixmap = QPixmap(); +} + +void TileItem::deleteAfterRender() +{ + if(!m_renderTask.isRunning()) + { + m_renderTask.deleteParentLater(); + } + else + { + m_renderTask.cancel(true); + + m_deleteAfterRender = true; + } +} + +void TileItem::on_finished(const RenderParam& renderParam, + const QRect& rect, bool prefetch, + const QImage& image, const QRectF& cropRect) +{ + if(m_page->m_renderParam != renderParam || m_rect != rect) + { + on_finishedOrCanceled(); + return; + } + + m_obsoletePixmap = QPixmap(); + + if(image.isNull()) + { + m_pixmapError = true; + + on_finishedOrCanceled(); + return; + } + + if(prefetch && !m_renderTask.wasCanceledForcibly()) + { + const QPixmap pixmap = QPixmap::fromImage(image); + + s_cache.insert(cacheKey(), new CacheObject(pixmap, cropRect), cacheCost(pixmap)); + + setCropRect(cropRect); + } + else if(!m_renderTask.wasCanceled()) + { + m_pixmap = QPixmap::fromImage(image); + + setCropRect(cropRect); + } + + on_finishedOrCanceled(); +} + +void TileItem::on_canceled() +{ + on_finishedOrCanceled(); +} + +void TileItem::on_finishedOrCanceled() +{ + if(m_deleteAfterRender) + { + m_renderTask.deleteParentLater(); + } + else if(!m_page->useTiling() || m_page->m_exposedTileItems.contains(this)) + { + m_page->update(); + } +} + +inline TileItem::CacheKey TileItem::cacheKey() const +{ + QByteArray key; + QDataStream stream(&key, QIODevice::WriteOnly); + + stream << m_page->m_renderParam << m_rect; + + return qMakePair(m_page, key); +} + +QPixmap TileItem::takePixmap() +{ + const CacheKey key = cacheKey(); + + if(const CacheObject* object = s_cache.object(key)) + { + m_obsoletePixmap = QPixmap(); + + setCropRect(object->second); + return object->first; + } + + QPixmap pixmap; + + if(!m_pixmap.isNull()) + { + s_cache.insert(key, new CacheObject(m_pixmap, m_cropRect), cacheCost(m_pixmap)); + + pixmap = m_pixmap; + } + else + { + startRender(); + } + + return pixmap; +} + +} // qpdfview diff --git a/sources/tileitem.h b/sources/tileitem.h new file mode 100644 index 0000000..16ad17c --- /dev/null +++ b/sources/tileitem.h @@ -0,0 +1,101 @@ +/* + +Copyright 2014 Adam Reichold + +This file is part of qpdfview. + +qpdfview is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +qpdfview 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 qpdfview. If not, see . + +*/ + +#ifndef TILEITEM_H +#define TILEITEM_H + +#include +#include +#include + +#include "rendertask.h" + +namespace qpdfview +{ + +class PageItem; + +class TileItem : public RenderTaskParent +{ +public: + TileItem(PageItem* page); + ~TileItem(); + + const QRect& rect() const { return m_rect; } + void setRect(QRect rect) { m_rect = rect; } + + const QRectF& cropRect() const { return m_cropRect; } + void resetCropRect() { m_cropRect = QRectF(); } + void setCropRect(const QRectF& cropRect); + + void dropPixmap() { m_pixmap = QPixmap(); } + void dropObsoletePixmap() { m_obsoletePixmap = QPixmap(); } + + static void dropCachedPixmaps(PageItem* page); + + bool paint(QPainter* painter, QPointF topLeft); + +public: + void refresh(bool keepObsoletePixmaps = false); + + int startRender(bool prefetch = false); + void cancelRender(); + + void deleteAfterRender(); + +private: + void on_finished(const RenderParam& renderParam, + const QRect& rect, bool prefetch, + const QImage& image, const QRectF& cropRect); + void on_canceled(); + void on_finishedOrCanceled(); + +private: + Q_DISABLE_COPY(TileItem) + + static Settings* s_settings; + + typedef QPair< PageItem*, QByteArray > CacheKey; + typedef QPair< QPixmap, QRectF > CacheObject; + + static QCache< CacheKey, CacheObject > s_cache; + + CacheKey cacheKey() const; + + PageItem* m_page; + + QRect m_rect; + QRectF m_cropRect; + + bool m_pixmapError; + QPixmap m_pixmap; + QPixmap m_obsoletePixmap; + + QPixmap takePixmap(); + + bool m_deleteAfterRender; + RenderTask m_renderTask; + +}; + +} // qpdfview + +#endif // PAGEITEM_H diff --git a/synctex/synctex_parser.c b/synctex/synctex_parser.c new file mode 100644 index 0000000..5b28ace --- /dev/null +++ b/synctex/synctex_parser.c @@ -0,0 +1,4412 @@ +/* +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr + +This file is part of the SyncTeX package. + +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.18 + +See synctex_parser_readme.txt for more details + +License: +-------- +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE + +Except as contained in this notice, the name of the copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the copyright holder. + +Acknowledgments: +---------------- +The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh, +and significant help from XeTeX developer Jonathan Kew + +Nota Bene: +---------- +If you include or use a significant part of the synctex package into a software, +I would appreciate to be listed as contributor and see "SyncTeX" highlighted. + +Version 1 +Thu Jun 19 09:39:21 UTC 2008 + +*/ + +/* We assume that high level application like pdf viewers will want + * to embed this code as is. We assume that they also have locale.h and setlocale. + * For other tools such as TeXLive tools, you must define SYNCTEX_USE_LOCAL_HEADER, + * when building. You also have to create and customize synctex_parser_local.h to fit your system. + * In particular, the HAVE_LOCALE_H and HAVE_SETLOCALE macros should be properly defined. + * With this design, you should not need to edit this file. */ + +# if defined(SYNCTEX_USE_LOCAL_HEADER) +# include "synctex_parser_local.h" +# else +# define HAVE_LOCALE_H 1 +# define HAVE_SETLOCALE 1 +# if defined(_MSC_VER) +# define SYNCTEX_INLINE __inline +# else +# define SYNCTEX_INLINE inline +# endif +# endif + +#include +#include +#include +#include +#include + +#if defined(HAVE_LOCALE_H) +#include +#endif + +/* The data is organized in a graph with multiple entries. + * The root object is a scanner, it is created with the contents on a synctex file. + * Each leaf of the tree is a synctex_node_t object. + * There are 3 subtrees, two of them sharing the same leaves. + * The first tree is the list of input records, where input file names are associated with tags. + * The second tree is the box tree as given by TeX when shipping pages out. + * First level objects are sheets, containing boxes, glues, kerns... + * The third tree allows to browse leaves according to tag and line. + */ + +#include "synctex_parser.h" +#include "synctex_parser_utils.h" + +/* These are the possible extensions of the synctex file */ +const char * synctex_suffix = ".synctex"; +const char * synctex_suffix_gz = ".gz"; + +/* each synctex node has a class */ +typedef struct __synctex_class_t _synctex_class_t; +typedef _synctex_class_t * synctex_class_t; + + +/* synctex_node_t is a pointer to a node + * _synctex_node is the target of the synctex_node_t pointer + * It is a pseudo object oriented program. + * class is a pointer to the class object the node belongs to. + * implementation is meant to contain the private data of the node + * basically, there are 2 kinds of information: navigation information and + * synctex information. Both will depend on the type of the node, + * thus different nodes will have different private data. + * There is no inheritancy overhead. + */ +typedef union _synctex_info_t { + int INT; + char * PTR; +} synctex_info_t; + +# if defined(SYNCTEX_USE_CHARINDEX) +# define SYNCTEX_DECLARE_CHARINDEX synctex_charindex_t char_index; +# define SYNCTEX_CHARINDEX(NODE) (NODE->char_index) +# define SYNCTEX_PRINT_CHARINDEX printf("#%i\n",SYNCTEX_CHARINDEX(node)) +# define SYNCTEX_DECLARE_CHAR_OFFSET synctex_charindex_t charindex_offset +# define SYNCTEX_IMPLEMENT_CHARINDEX(NODE,CORRECTION) NODE->char_index = (synctex_charindex_t)(scanner->charindex_offset+SYNCTEX_CUR-SYNCTEX_START+(CORRECTION)); +# else +# define SYNCTEX_DECLARE_CHARINDEX +# define SYNCTEX_CHARINDEX(NODE) 0 +# define SYNCTEX_PRINT_CHARINDEX printf("\n") +# define SYNCTEX_DECLARE_CHAR_OFFSET synctex_charindex_t charindex_offset +# define SYNCTEX_IMPLEMENT_CHARINDEX(NODE,CORRECTION) +# endif + +struct _synctex_node { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t * implementation; +}; + +/* Each node of the tree, except the scanner itself belongs to a class. + * The class object is just a struct declaring the owning scanner + * This is a pointer to the scanner as root of the tree. + * The type is used to identify the kind of node. + * The class declares pointers to a creator and a destructor method. + * The log and display fields are used to log and display the node. + * display will also display the child, sibling and parent sibling. + * parent, child and sibling are used to navigate the tree, + * from TeX box hierarchy point of view. + * The friend field points to a method which allows to navigate from friend to friend. + * A friend is a node with very close tag and line numbers. + * Finally, the info field point to a method giving the private node info offset. + */ + +typedef synctex_node_t *(*_synctex_node_getter_t)(synctex_node_t); +typedef synctex_info_t *(*_synctex_info_getter_t)(synctex_node_t); + +struct __synctex_class_t { + synctex_scanner_t scanner; + int type; + synctex_node_t (*new)(synctex_scanner_t scanner); + void (*free)(synctex_node_t); + void (*log)(synctex_node_t); + void (*display)(synctex_node_t); + _synctex_node_getter_t parent; + _synctex_node_getter_t child; + _synctex_node_getter_t sibling; + _synctex_node_getter_t friend; + _synctex_node_getter_t next_hbox; + _synctex_info_getter_t info; +}; + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Abstract OBJECTS and METHODS +# endif + +/* These macros are shortcuts + * This macro checks if a message can be sent. + */ +# define SYNCTEX_CAN_PERFORM(NODE,SELECTOR)\ + (NULL!=((((NODE)->class))->SELECTOR)) + +/* This macro is some kind of objc_msg_send. + * It takes care of sending the proper message if possible. + */ +# define SYNCTEX_MSG_SEND(NODE,SELECTOR) if (NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\ + (*((((NODE)->class))->SELECTOR))(NODE);\ + } + +/* read only safe getter + */ +# define SYNCTEX_GET(NODE,SELECTOR)((NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR))?SYNCTEX_GETTER(NODE,SELECTOR)[0]:(NULL)) + +/* read/write getter + */ +# define SYNCTEX_GETTER(NODE,SELECTOR)\ + ((synctex_node_t *)((*((((NODE)->class))->SELECTOR))(NODE))) + +# define SYNCTEX_FREE(NODE) SYNCTEX_MSG_SEND(NODE,free); + +/* Parent getter and setter + */ +# define SYNCTEX_PARENT(NODE) SYNCTEX_GET(NODE,parent) +# define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if (NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\ + SYNCTEX_GETTER(NODE,parent)[0]=NEW_PARENT;\ + } + +/* Child getter and setter + */ +# define SYNCTEX_CHILD(NODE) SYNCTEX_GET(NODE,child) +# define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if (NODE && NEW_CHILD){\ + SYNCTEX_GETTER(NODE,child)[0]=NEW_CHILD;\ + SYNCTEX_GETTER(NEW_CHILD,parent)[0]=NODE;\ + } + +/* Sibling getter and setter + */ +# define SYNCTEX_SIBLING(NODE) SYNCTEX_GET(NODE,sibling) +# define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if (NODE && NEW_SIBLING) {\ + SYNCTEX_GETTER(NODE,sibling)[0]=NEW_SIBLING;\ + if (SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\ + SYNCTEX_GETTER(NEW_SIBLING,parent)[0]=SYNCTEX_GETTER(NODE,parent)[0];\ + }\ + } +/* Friend getter and setter. A friend is a kern, math, glue or void box node which tag and line numbers are similar. + * This is a first filter on the nodes that avoids testing all of them. + * Friends are used mainly in forward synchronization aka from source to output. + */ +# define SYNCTEX_FRIEND(NODE) SYNCTEX_GET(NODE,friend) +# define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if (NODE && NEW_FRIEND){\ + SYNCTEX_GETTER(NODE,friend)[0]=NEW_FRIEND;\ + } + +/* Next box getter and setter. The box tree can be traversed from one horizontal box to the other. + * Navigation starts with the deeper boxes. + */ +# define SYNCTEX_NEXT_hbox(NODE) SYNCTEX_GET(NODE,next_hbox) +# define SYNCTEX_SET_NEXT_hbox(NODE,NEXT_HBOX) if (NODE && NEXT_HBOX){\ + SYNCTEX_GETTER(NODE,next_hbox)[0]=NEXT_HBOX;\ + } + +/* A node is meant to own its child and sibling. + * It is not owned by its parent, unless it is its first child. + * This destructor is for all nodes with children. + */ +static void _synctex_free_node(synctex_node_t node) { + if (node) { + (*((node->class)->sibling))(node); + SYNCTEX_FREE(SYNCTEX_SIBLING(node)); + SYNCTEX_FREE(SYNCTEX_CHILD(node)); + free(node); + } + return; +} + +/* A node is meant to own its child and sibling. + * It is not owned by its parent, unless it is its first child. + * This destructor is for nodes with no child. + * The first sheet is onwned by the scanner. + */ +static void _synctex_free_leaf(synctex_node_t node) { + if (node) { + SYNCTEX_FREE(SYNCTEX_SIBLING(node)); + free(node); + } + return; +} +# ifdef __SYNCTEX_WORK__ +# include "/usr/include/zlib.h" +# else +# include +# endif + +/* The synctex scanner is the root object. + * Is is initialized with the contents of a text file or a gzipped file. + * The buffer_? are first used to parse the text. + */ +struct __synctex_scanner_t { + gzFile file; /* The (possibly compressed) file */ + SYNCTEX_DECLARE_CHAR_OFFSET; + char * buffer_cur; /* current location in the buffer */ + char * buffer_start; /* start of the buffer */ + char * buffer_end; /* end of the buffer */ + char * output_fmt; /* dvi or pdf, not yet used */ + char * output; /* the output name used to create the scanner */ + char * synctex; /* the .synctex or .synctex.gz name used to create the scanner */ + int version; /* 1, not yet used */ + struct { + unsigned has_parsed:1; /* Whether the scanner has parsed its underlying synctex file. */ + unsigned reserved:sizeof(unsigned)-1; /* alignment */ + } flags; + int pre_magnification; /* magnification from the synctex preamble */ + int pre_unit; /* unit from the synctex preamble */ + int pre_x_offset; /* X offste from the synctex preamble */ + int pre_y_offset; /* Y offset from the synctex preamble */ + int count; /* Number of records, from the synctex postamble */ + float unit; /* real unit, from synctex preamble or post scriptum */ + float x_offset; /* X offset, from synctex preamble or post scriptum */ + float y_offset; /* Y Offset, from synctex preamble or post scriptum */ + synctex_node_t sheet; /* The first sheet node, its siblings are the other sheet nodes */ + synctex_node_t input; /* The first input node, its siblings are the other input nodes */ + int number_of_lists; /* The number of friend lists */ + synctex_node_t * lists_of_friends;/* The friend lists */ + _synctex_class_t class[synctex_node_number_of_types]; /* The classes of the nodes of the scanner */ +}; + +/* SYNCTEX_CUR, SYNCTEX_START and SYNCTEX_END are convenient shortcuts + */ +# define SYNCTEX_CUR (scanner->buffer_cur) +# define SYNCTEX_START (scanner->buffer_start) +# define SYNCTEX_END (scanner->buffer_end) + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark OBJECTS, their creators and destructors. +# endif + +/* Here, we define the indices for the different informations. + * They are used to declare the size of the implementation. + * For example, if one object uses SYNCTEX_HORIZ_IDX is its size, + * then its info will contain a tag, line, column, horiz but no width nor height nor depth + */ + +/* The sheet is a first level node. + * It has no parent (the parent is the scanner itself) + * Its sibling points to another sheet. + * Its child points to its first child, in general a box. + * A sheet node contains only one synctex information: the page. + * This is the 1 based page index as given by TeX. + */ +/* The next macros are used to access the node info + * SYNCTEX_INFO(node) points to the first synctex integer or pointer data of node + * SYNCTEX_INFO(node)[index] is the information at index + * for example, the page of a sheet is stored in SYNCTEX_INFO(sheet)[SYNCTEX_PAGE_IDX] + */ +# define SYNCTEX_INFO(NODE) ((*((((NODE)->class))->info))(NODE)) +# define SYNCTEX_PAGE_IDX 0 +# define SYNCTEX_PAGE(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_PAGE_IDX].INT + +/* This macro defines implementation offsets + * It is only used for pointer values + */ +# define SYNCTEX_MAKE_GET(SYNCTEX_GETTER,OFFSET)\ +static synctex_node_t * SYNCTEX_GETTER (synctex_node_t node) {\ + return node?(synctex_node_t *)((&((node)->implementation))+OFFSET):NULL;\ +} +SYNCTEX_MAKE_GET(_synctex_implementation_0,0) +SYNCTEX_MAKE_GET(_synctex_implementation_1,1) +SYNCTEX_MAKE_GET(_synctex_implementation_2,2) +SYNCTEX_MAKE_GET(_synctex_implementation_3,3) +SYNCTEX_MAKE_GET(_synctex_implementation_4,4) +SYNCTEX_MAKE_GET(_synctex_implementation_5,5) + +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[3+SYNCTEX_PAGE_IDX+1];/* child, sibling, next box, + * SYNCTEX_PAGE_IDX */ +} synctex_node_sheet_t; + +/* sheet node creator */ + +#define DEFINE_synctex_new_NODE(NAME)\ +static synctex_node_t _synctex_new_##NAME(synctex_scanner_t scanner) {\ + if (scanner) {\ + synctex_node_t node = _synctex_malloc(sizeof(synctex_node_##NAME##_t));\ + if (node) {\ + SYNCTEX_IMPLEMENT_CHARINDEX(node,0);\ + ++SYNCTEX_CUR;\ + node->class = scanner->class+synctex_node_type_##NAME;\ + }\ + return node;\ + }\ + return NULL;\ +} +DEFINE_synctex_new_NODE(sheet) + +static void _synctex_display_sheet(synctex_node_t node); +static void _synctex_log_sheet(synctex_node_t node); + +static _synctex_class_t synctex_class_sheet = { + NULL, /* No scanner yet */ + synctex_node_type_sheet, /* Node type */ + &_synctex_new_sheet, /* creator */ + &_synctex_free_node, /* destructor */ + &_synctex_log_sheet, /* log */ + &_synctex_display_sheet, /* display */ + NULL, /* No parent */ + &_synctex_implementation_0, /* child */ + &_synctex_implementation_1, /* sibling */ + NULL, /* No friend */ + &_synctex_implementation_2, /* Next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 /* info */ +}; + +/* A box node contains navigation and synctex information + * There are different kind of boxes. + * Only horizontal boxes are treated differently because of their visible size. + */ +# define SYNCTEX_TAG_IDX 0 +# define SYNCTEX_LINE_IDX (SYNCTEX_TAG_IDX+1) +# define SYNCTEX_COLUMN_IDX (SYNCTEX_LINE_IDX+1) +# define SYNCTEX_HORIZ_IDX (SYNCTEX_COLUMN_IDX+1) +# define SYNCTEX_VERT_IDX (SYNCTEX_HORIZ_IDX+1) +# define SYNCTEX_WIDTH_IDX (SYNCTEX_VERT_IDX+1) +# define SYNCTEX_HEIGHT_IDX (SYNCTEX_WIDTH_IDX+1) +# define SYNCTEX_DEPTH_IDX (SYNCTEX_HEIGHT_IDX+1) +/* the corresponding info accessors */ +# define SYNCTEX_TAG(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_TAG_IDX].INT +# define SYNCTEX_LINE(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_LINE_IDX].INT +# define SYNCTEX_COLUMN(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_COLUMN_IDX].INT +# define SYNCTEX_HORIZ(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HORIZ_IDX].INT +# define SYNCTEX_VERT(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_VERT_IDX].INT +# define SYNCTEX_WIDTH(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_WIDTH_IDX].INT +# define SYNCTEX_HEIGHT(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HEIGHT_IDX].INT +# define SYNCTEX_DEPTH(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_DEPTH_IDX].INT +# define SYNCTEX_ABS_WIDTH(NODE) ((SYNCTEX_WIDTH(NODE)>0?SYNCTEX_WIDTH(NODE):-SYNCTEX_WIDTH(NODE))) +# define SYNCTEX_ABS_HEIGHT(NODE) ((SYNCTEX_HEIGHT(NODE)>0?SYNCTEX_HEIGHT(NODE):-SYNCTEX_HEIGHT(NODE))) +# define SYNCTEX_ABS_DEPTH(NODE) ((SYNCTEX_DEPTH(NODE)>0?SYNCTEX_DEPTH(NODE):-SYNCTEX_DEPTH(NODE))) + +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[5+SYNCTEX_DEPTH_IDX+1]; /* parent,child,sibling,friend,next box, + * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN, + * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH */ +} synctex_node_vbox_t; + +/* vertical box node creator */ +DEFINE_synctex_new_NODE(vbox) + +static void _synctex_log_vbox(synctex_node_t node); +static void _synctex_display_vbox(synctex_node_t node); + +/* These are static class objects, each scanner will make a copy of them and setup the scanner field. + */ +static _synctex_class_t synctex_class_vbox = { + NULL, /* No scanner yet */ + synctex_node_type_vbox, /* Node type */ + &_synctex_new_vbox, /* creator */ + &_synctex_free_node, /* destructor */ + &_synctex_log_vbox, /* log */ + &_synctex_display_vbox, /* display */ + &_synctex_implementation_0, /* parent */ + &_synctex_implementation_1, /* child */ + &_synctex_implementation_2, /* sibling */ + &_synctex_implementation_3, /* friend */ + &_synctex_implementation_4, /* next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_5 +}; + +/* Horizontal boxes must contain visible size, because 0 width does not mean emptiness. + * They also contain an average of the line numbers of the containing nodes. */ +# define SYNCTEX_MEAN_LINE_IDX (SYNCTEX_DEPTH_IDX+1) +# define SYNCTEX_NODE_WEIGHT_IDX (SYNCTEX_MEAN_LINE_IDX+1) +# define SYNCTEX_HORIZ_V_IDX (SYNCTEX_NODE_WEIGHT_IDX+1) +# define SYNCTEX_VERT_V_IDX (SYNCTEX_HORIZ_V_IDX+1) +# define SYNCTEX_WIDTH_V_IDX (SYNCTEX_VERT_V_IDX+1) +# define SYNCTEX_HEIGHT_V_IDX (SYNCTEX_WIDTH_V_IDX+1) +# define SYNCTEX_DEPTH_V_IDX (SYNCTEX_HEIGHT_V_IDX+1) +/* the corresponding info accessors */ +# define SYNCTEX_MEAN_LINE(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_MEAN_LINE_IDX].INT +# define SYNCTEX_NODE_WEIGHT(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_NODE_WEIGHT_IDX].INT +# define SYNCTEX_HORIZ_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HORIZ_V_IDX].INT +# define SYNCTEX_VERT_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_VERT_V_IDX].INT +# define SYNCTEX_WIDTH_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_WIDTH_V_IDX].INT +# define SYNCTEX_HEIGHT_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HEIGHT_V_IDX].INT +# define SYNCTEX_DEPTH_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_DEPTH_V_IDX].INT +# define SYNCTEX_ABS_WIDTH_V(NODE) ((SYNCTEX_WIDTH_V(NODE)>0?SYNCTEX_WIDTH_V(NODE):-SYNCTEX_WIDTH_V(NODE))) +# define SYNCTEX_ABS_HEIGHT_V(NODE) ((SYNCTEX_HEIGHT_V(NODE)>0?SYNCTEX_HEIGHT_V(NODE):-SYNCTEX_HEIGHT_V(NODE))) +# define SYNCTEX_ABS_DEPTH_V(NODE) ((SYNCTEX_DEPTH_V(NODE)>0?SYNCTEX_DEPTH_V(NODE):-SYNCTEX_DEPTH_V(NODE))) + +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[5+SYNCTEX_DEPTH_V_IDX+1]; /*parent,child,sibling,friend,next box, + * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN, + * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH, + * SYNCTEX_MEAN_LINE,SYNCTEX_NODE_WEIGHT, + * SYNCTEX_HORIZ_V,SYNCTEX_VERT_V,SYNCTEX_WIDTH_V,SYNCTEX_HEIGHT_V,SYNCTEX_DEPTH_V*/ +} synctex_node_hbox_t; + +/* horizontal box node creator */ +DEFINE_synctex_new_NODE(hbox) + +static void _synctex_display_hbox(synctex_node_t node); +static void _synctex_log_hbox(synctex_node_t node); + + +static _synctex_class_t synctex_class_hbox = { + NULL, /* No scanner yet */ + synctex_node_type_hbox, /* Node type */ + &_synctex_new_hbox, /* creator */ + &_synctex_free_node, /* destructor */ + &_synctex_log_hbox, /* log */ + &_synctex_display_hbox, /* display */ + &_synctex_implementation_0, /* parent */ + &_synctex_implementation_1, /* child */ + &_synctex_implementation_2, /* sibling */ + &_synctex_implementation_3, /* friend */ + &_synctex_implementation_4, /* next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_5 +}; + +/* This void box node implementation is either horizontal or vertical + * It does not contain a child field. + */ +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[3+SYNCTEX_DEPTH_IDX+1]; /* parent,sibling,friend, + * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN, + * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH*/ +} synctex_node_void_vbox_t; + +/* vertical void box node creator */ +DEFINE_synctex_new_NODE(void_vbox) + +static void _synctex_log_void_box(synctex_node_t node); +static void _synctex_display_void_vbox(synctex_node_t node); + +static _synctex_class_t synctex_class_void_vbox = { + NULL, /* No scanner yet */ + synctex_node_type_void_vbox,/* Node type */ + &_synctex_new_void_vbox, /* creator */ + &_synctex_free_node, /* destructor */ + &_synctex_log_void_box, /* log */ + &_synctex_display_void_vbox,/* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +typedef synctex_node_void_vbox_t synctex_node_void_hbox_t; + +/* horizontal void box node creator */ +DEFINE_synctex_new_NODE(void_hbox) + +static void _synctex_display_void_hbox(synctex_node_t node); + +static _synctex_class_t synctex_class_void_hbox = { + NULL, /* No scanner yet */ + synctex_node_type_void_hbox,/* Node type */ + &_synctex_new_void_hbox, /* creator */ + &_synctex_free_node, /* destructor */ + &_synctex_log_void_box, /* log */ + &_synctex_display_void_hbox,/* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +/* The medium nodes correspond to kern, glue, penalty and math nodes. + * In LuaTeX, the size of the nodes may have changed. */ +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[3+SYNCTEX_WIDTH_IDX+1]; /* parent,sibling,friend, + * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN, + * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH */ +} synctex_node_medium_t; + +#define SYNCTEX_IS_BOX(NODE)\ + ((NODE->class->type == synctex_node_type_vbox)\ + || (NODE->class->type == synctex_node_type_void_vbox)\ + || (NODE->class->type == synctex_node_type_hbox)\ + || (NODE->class->type == synctex_node_type_void_hbox)) + +#define SYNCTEX_HAS_CHILDREN(NODE) (NODE && SYNCTEX_CHILD(NODE)) + +static void _synctex_log_medium_node(synctex_node_t node); + +typedef synctex_node_medium_t synctex_node_math_t; + +/* math node creator */ +DEFINE_synctex_new_NODE(math) + +static void _synctex_display_math(synctex_node_t node); + +static _synctex_class_t synctex_class_math = { + NULL, /* No scanner yet */ + synctex_node_type_math, /* Node type */ + &_synctex_new_math, /* creator */ + &_synctex_free_leaf, /* destructor */ + &_synctex_log_medium_node, /* log */ + &_synctex_display_math, /* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +typedef synctex_node_medium_t synctex_node_kern_t; + +/* kern node creator */ +DEFINE_synctex_new_NODE(kern) + +static void _synctex_display_kern(synctex_node_t node); + +static _synctex_class_t synctex_class_kern = { + NULL, /* No scanner yet */ + synctex_node_type_kern, /* Node type */ + &_synctex_new_kern, /* creator */ + &_synctex_free_leaf, /* destructor */ + &_synctex_log_medium_node, /* log */ + &_synctex_display_kern, /* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +/* The small nodes correspond to glue and boundary nodes. */ +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[3+SYNCTEX_VERT_IDX+1]; /* parent,sibling,friend, + * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN, + * SYNCTEX_HORIZ,SYNCTEX_VERT */ +} synctex_node_small_t; + +static void _synctex_log_small_node(synctex_node_t node); + +/* glue node creator */ +typedef synctex_node_small_t synctex_node_glue_t; +DEFINE_synctex_new_NODE(glue) +static void _synctex_display_glue(synctex_node_t node); + +static _synctex_class_t synctex_class_glue = { + NULL, /* No scanner yet */ + synctex_node_type_glue, /* Node type */ + &_synctex_new_glue, /* creator */ + &_synctex_free_leaf, /* destructor */ + &_synctex_log_medium_node, /* log */ + &_synctex_display_glue, /* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +/* boundary node creator */ +typedef synctex_node_small_t synctex_node_boundary_t; +DEFINE_synctex_new_NODE(boundary) + +static void _synctex_display_boundary(synctex_node_t node); + +static _synctex_class_t synctex_class_boundary = { + NULL, /* No scanner yet */ + synctex_node_type_boundary, /* Node type */ + &_synctex_new_boundary, /* creator */ + &_synctex_free_leaf, /* destructor */ + &_synctex_log_small_node, /* log */ + &_synctex_display_boundary, /* display */ + &_synctex_implementation_0, /* parent */ + NULL, /* No child */ + &_synctex_implementation_1, /* sibling */ + &_synctex_implementation_2, /* friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_3 +}; + +# define SYNCTEX_NAME_IDX (SYNCTEX_TAG_IDX+1) +# define SYNCTEX_NAME(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_NAME_IDX].PTR + +/* Input nodes only know about their sibling, which is another input node. + * The synctex information is the SYNCTEX_TAG and SYNCTEX_NAME*/ +typedef struct { + SYNCTEX_DECLARE_CHARINDEX + synctex_class_t class; + synctex_info_t implementation[1+SYNCTEX_NAME_IDX+1]; /* sibling, + * SYNCTEX_TAG,SYNCTEX_NAME */ +} synctex_input_t; + +# define SYNCTEX_INPUT_MARK "Input:" +static synctex_node_t _synctex_new_input(synctex_scanner_t scanner) { + if (scanner) { + synctex_node_t node = _synctex_malloc(sizeof(synctex_input_t)); + if (node) { + SYNCTEX_IMPLEMENT_CHARINDEX(node,strlen(SYNCTEX_INPUT_MARK)); + node->class = scanner->class+synctex_node_type_input; + } + return node; + } + return NULL; +} + +static void _synctex_free_input(synctex_node_t node){ + if (node) { + SYNCTEX_FREE(SYNCTEX_SIBLING(node)); + free(SYNCTEX_NAME(node)); + free(node); + } +} + +static void _synctex_display_input(synctex_node_t node); +static void _synctex_log_input(synctex_node_t node); + +static _synctex_class_t synctex_class_input = { + NULL, /* No scanner yet */ + synctex_node_type_input, /* Node type */ + &_synctex_new_input, /* creator */ + &_synctex_free_input, /* destructor */ + &_synctex_log_input, /* log */ + &_synctex_display_input, /* display */ + NULL, /* No parent */ + NULL, /* No child */ + &_synctex_implementation_0, /* sibling */ + NULL, /* No friend */ + NULL, /* No next hbox */ + (_synctex_info_getter_t)&_synctex_implementation_1 +}; + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Navigation +# endif +synctex_node_t synctex_node_parent(synctex_node_t node) +{ + return SYNCTEX_PARENT(node); +} +synctex_node_t synctex_node_sheet(synctex_node_t node) +{ + while(node && node->class->type != synctex_node_type_sheet) { + node = SYNCTEX_PARENT(node); + } + /* exit the while loop either when node is NULL or node is a sheet */ + return node; +} +synctex_node_t synctex_node_child(synctex_node_t node) +{ + return SYNCTEX_CHILD(node); +} +synctex_node_t synctex_node_sibling(synctex_node_t node) +{ + return SYNCTEX_SIBLING(node); +} +synctex_node_t synctex_node_next(synctex_node_t node) { + if (SYNCTEX_CHILD(node)) { + return SYNCTEX_CHILD(node); + } +sibling: + if (SYNCTEX_SIBLING(node)) { + return SYNCTEX_SIBLING(node); + } + if ((node = SYNCTEX_PARENT(node))) { + if (node->class->type == synctex_node_type_sheet) {/* EXC_BAD_ACCESS? */ + return NULL; + } + goto sibling; + } + return NULL; +} +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark CLASS +# endif + +/* Public node accessor: the type */ +synctex_node_type_t synctex_node_type(synctex_node_t node) { + if (node) { + return (((node)->class))->type; + } + return synctex_node_type_error; +} + +/* Public node accessor: the human readable type */ +const char * synctex_node_isa(synctex_node_t node) { +static const char * isa[synctex_node_number_of_types] = + {"Not a node","input","sheet","vbox","void vbox","hbox","void hbox","kern","glue","math","boundary"}; + return isa[synctex_node_type(node)]; +} + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark SYNCTEX_LOG +# endif + +# define SYNCTEX_LOG(NODE) SYNCTEX_MSG_SEND(NODE,log) + +/* Public node logger */ +void synctex_node_log(synctex_node_t node) { + SYNCTEX_LOG(node); +} + +static void _synctex_log_input(synctex_node_t node) { + if (node) { + printf("%s:%i,%s",synctex_node_isa(node),SYNCTEX_TAG(node),SYNCTEX_NAME(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_log_sheet(synctex_node_t node) { + if (node) { + printf("%s:%i",synctex_node_isa(node),SYNCTEX_PAGE(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p",(void *)SYNCTEX_FRIEND(node)); + printf(" SYNCTEX_NEXT_hbox:%p\n",(void *)SYNCTEX_NEXT_hbox(node)); + } +} + +static void _synctex_log_small_node(synctex_node_t node) { + if (node) { + printf("%s:%i,%i:%i,%i", + synctex_node_isa(node), + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node)); + } +} + +static void _synctex_log_medium_node(synctex_node_t node) { + if (node) { + printf("%s:%i,%i:%i,%i:%i", + synctex_node_isa(node), + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node)); + } +} + +static void _synctex_log_void_box(synctex_node_t node) { + if (node) { + printf("%s",synctex_node_isa(node)); + printf(":%i",SYNCTEX_TAG(node)); + printf(",%i",SYNCTEX_LINE(node)); + printf(",%i",0); + printf(":%i",SYNCTEX_HORIZ(node)); + printf(",%i",SYNCTEX_VERT(node)); + printf(":%i",SYNCTEX_WIDTH(node)); + printf(",%i",SYNCTEX_HEIGHT(node)); + printf(",%i",SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node)); + } +} + +static void _synctex_log_vbox(synctex_node_t node) { + if (node) { + printf("%s",synctex_node_isa(node)); + printf(":%i",SYNCTEX_TAG(node)); + printf(",%i",SYNCTEX_LINE(node)); + printf(",%i",0); + printf(":%i",SYNCTEX_HORIZ(node)); + printf(",%i",SYNCTEX_VERT(node)); + printf(":%i",SYNCTEX_WIDTH(node)); + printf(",%i",SYNCTEX_HEIGHT(node)); + printf(",%i",SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p",(void *)SYNCTEX_FRIEND(node)); + printf(" SYNCTEX_NEXT_hbox:%p\n",(void *)SYNCTEX_NEXT_hbox(node)); + } +} + +static void _synctex_log_hbox(synctex_node_t node) { + if (node) { + printf("%s",synctex_node_isa(node)); + printf(":%i",SYNCTEX_TAG(node)); + printf(",%i~%i*%i",SYNCTEX_LINE(node),SYNCTEX_MEAN_LINE(node),SYNCTEX_NODE_WEIGHT(node)); + printf(",%i",0); + printf(":%i",SYNCTEX_HORIZ(node)); + printf(",%i",SYNCTEX_VERT(node)); + printf(":%i",SYNCTEX_WIDTH(node)); + printf(",%i",SYNCTEX_HEIGHT(node)); + printf(",%i",SYNCTEX_DEPTH(node)); + printf("/%i",SYNCTEX_HORIZ_V(node)); + printf(",%i",SYNCTEX_VERT_V(node)); + printf(":%i",SYNCTEX_WIDTH_V(node)); + printf(",%i",SYNCTEX_HEIGHT_V(node)); + printf(",%i",SYNCTEX_DEPTH_V(node)); + SYNCTEX_PRINT_CHARINDEX; + printf("SELF:%p",(void *)node); + printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node)); + printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node)); + printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node)); + printf(" SYNCTEX_FRIEND:%p",(void *)SYNCTEX_FRIEND(node)); + printf(" SYNCTEX_NEXT_hbox:%p\n",(void *)SYNCTEX_NEXT_hbox(node)); + } +} + +# define SYNCTEX_DISPLAY(NODE) SYNCTEX_MSG_SEND(NODE,display) + +void synctex_node_display(synctex_node_t node) { + SYNCTEX_DISPLAY(node); +} + +static void _synctex_display_input(synctex_node_t node) { + if (node) { + printf("....Input:%i:%s", + SYNCTEX_TAG(node), + SYNCTEX_NAME(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_sheet(synctex_node_t node) { + if (node) { + printf("....{%i",SYNCTEX_PAGE(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_CHILD(node)); + printf("....}\n"); + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_vbox(synctex_node_t node) { + if (node) { + printf("....[%i,%i:%i,%i:%i,%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node), + SYNCTEX_HEIGHT(node), + SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_CHILD(node)); + printf("....]\n"); + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_hbox(synctex_node_t node) { + if (node) { + printf("....(%i,%i~%i*%i:%i,%i:%i,%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_MEAN_LINE(node), + SYNCTEX_NODE_WEIGHT(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node), + SYNCTEX_HEIGHT(node), + SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_CHILD(node)); + printf("....)\n"); + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_void_vbox(synctex_node_t node) { + if (node) { + printf("....v%i,%i;%i,%i:%i,%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node), + SYNCTEX_HEIGHT(node), + SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_void_hbox(synctex_node_t node) { + if (node) { + printf("....h%i,%i:%i,%i:%i,%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node), + SYNCTEX_HEIGHT(node), + SYNCTEX_DEPTH(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_glue(synctex_node_t node) { + if (node) { + printf("....glue:%i,%i:%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_math(synctex_node_t node) { + if (node) { + printf("....math:%i,%i:%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_kern(synctex_node_t node) { + if (node) { + printf("....kern:%i,%i:%i,%i:%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node), + SYNCTEX_WIDTH(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +static void _synctex_display_boundary(synctex_node_t node) { + if (node) { + printf("....boundary:%i,%i:%i,%i", + SYNCTEX_TAG(node), + SYNCTEX_LINE(node), + SYNCTEX_HORIZ(node), + SYNCTEX_VERT(node)); + SYNCTEX_PRINT_CHARINDEX; + SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node)); + } +} + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark SCANNER +# endif + +/* Here are gathered all the possible status that the next scanning functions will return. + * All these functions return a status, and pass their result through pointers. + * Negative values correspond to errors. + * The management of the buffer is causing some significant overhead. + * Every function that may access the buffer returns a status related to the buffer and file state. + * status >= SYNCTEX_STATUS_OK means the function worked as expected + * status < SYNCTEX_STATUS_OK means the function did not work as expected + * status == SYNCTEX_STATUS_NOT_OK means the function did not work as expected but there is still some material to parse. + * status == SYNCTEX_STATUS_EOF means the function did not work as expected and there is no more material. + * statusfile) + +/* Actually, the minimum buffer size is driven by integer and float parsing. + * 0.123456789e123 + */ +# define SYNCTEX_BUFFER_MIN_SIZE 16 +# define SYNCTEX_BUFFER_SIZE 32768 + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Prototypes +# endif +synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr); +synctex_status_t _synctex_next_line(synctex_scanner_t scanner); +synctex_status_t _synctex_match_string(synctex_scanner_t scanner, const char * the_string); +synctex_status_t _synctex_decode_int(synctex_scanner_t scanner, int* value_ref); +synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value_ref); +synctex_status_t _synctex_scan_input(synctex_scanner_t scanner); +synctex_status_t _synctex_scan_preamble(synctex_scanner_t scanner); +synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, float * value_ref); +synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner); +synctex_status_t _synctex_scan_postamble(synctex_scanner_t scanner); +synctex_status_t _synctex_setup_visible_box(synctex_node_t box); +synctex_status_t _synctex_hbox_setup_visible(synctex_node_t node,int h, int v); +synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t parent); +synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner); +synctex_status_t _synctex_scan_content(synctex_scanner_t scanner); +int synctex_scanner_pre_x_offset(synctex_scanner_t scanner); +int synctex_scanner_pre_y_offset(synctex_scanner_t scanner); +const char * synctex_scanner_get_output_fmt(synctex_scanner_t scanner); +int _synctex_node_is_box(synctex_node_t node); + +/* Try to ensure that the buffer contains at least size bytes. + * Passing a huge size argument means the whole buffer length. + * Passing a null size argument means return the available buffer length, without reading the file. + * In that case, the return status is always SYNCTEX_STATUS_OK unless the given scanner is NULL, + * in which case, SYNCTEX_STATUS_BAD_ARGUMENT is returned. + * The value returned in size_ptr is the number of bytes now available in the buffer. + * This is a nonnegative integer, it may take the value 0. + * It is the responsibility of the caller to test whether this size is conforming to its needs. + * Negative values may return in case of error, actually + * when there was an error reading the synctex file. */ +synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr) { + size_t available = 0; + if (NULL == scanner || NULL == size_ptr) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } +# define size (* size_ptr) + if (size>SYNCTEX_BUFFER_SIZE){ + size = SYNCTEX_BUFFER_SIZE; + } + available = SYNCTEX_END - SYNCTEX_CUR; /* available is the number of unparsed chars in the buffer */ + if (size<=available) { + /* There are already sufficiently many characters in the buffer */ + size = available; + return SYNCTEX_STATUS_OK; + } + if (SYNCTEX_FILE) { + /* Copy the remaining part of the buffer to the beginning, + * then read the next part of the file */ + int already_read = 0; +# if defined(SYNCTEX_USE_CHARINDEX) + scanner->charindex_offset += SYNCTEX_CUR - SYNCTEX_START; +# endif + if (available) { + memmove(SYNCTEX_START, SYNCTEX_CUR, available); + } + SYNCTEX_CUR = SYNCTEX_START + available; /* the next character after the move, will change. */ + /* Fill the buffer up to its end */ + already_read = gzread(SYNCTEX_FILE,(void *)SYNCTEX_CUR,(int)(SYNCTEX_BUFFER_SIZE - available)); + if (already_read>0) { + /* We assume that 0already_read) { + /* There is a possible error in reading the file */ + int errnum = 0; + const char * error_string = gzerror(SYNCTEX_FILE, &errnum); + if (Z_ERRNO == errnum) { + /* There is an error in zlib caused by the file system */ + _synctex_error("gzread error from the file system (%i)",errno); + return SYNCTEX_STATUS_ERROR; + } else if (errnum) { + _synctex_error("gzread error (%i:%i,%s)",already_read,errnum,error_string); + return SYNCTEX_STATUS_ERROR; + } + } + /* Nothing was read, we are at the end of the file. */ + gzclose(SYNCTEX_FILE); + SYNCTEX_FILE = NULL; + SYNCTEX_END = SYNCTEX_CUR; + SYNCTEX_CUR = SYNCTEX_START; + * SYNCTEX_END = '\0';/* Terminate the string properly.*/ + size = SYNCTEX_END - SYNCTEX_CUR; + return SYNCTEX_STATUS_EOF; /* there might be a bit of text left */ + } + /* We cannot enlarge the buffer because the end of the file was reached. */ + size = available; + return SYNCTEX_STATUS_EOF; +# undef size +} + +/* Used when parsing the synctex file. + * Advance to the next character starting a line. + * Actually, only '\n' is recognized as end of line marker. + * On normal completion, the returned value is the number of unparsed characters available in the buffer. + * In general, it is a positive value, 0 meaning that the end of file was reached. + * -1 is returned in case of error, actually because there was an error while feeding the buffer. + * When the function returns with no error, SYNCTEX_CUR points to the first character of the next line, if any. + * J. Laurens: Sat May 10 07:52:31 UTC 2008 + */ +synctex_status_t _synctex_next_line(synctex_scanner_t scanner) { + synctex_status_t status = SYNCTEX_STATUS_OK; + size_t available = 0; + if (NULL == scanner) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } +infinite_loop: + while(SYNCTEX_CUR=remaining_len) { + /* The buffer is sufficiently big to hold the expected number of characters. */ + if (strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) { + return SYNCTEX_STATUS_NOT_OK; + } +return_OK: + /* Advance SYNCTEX_CUR to the next character after the_string. */ + SYNCTEX_CUR += remaining_len; + return SYNCTEX_STATUS_OK; + } else if (strncmp((char *)SYNCTEX_CUR,the_string,available)) { + /* No need to go further, this is not the expected string in the buffer. */ + return SYNCTEX_STATUS_NOT_OK; + } else if (SYNCTEX_FILE) { + /* The buffer was too small to contain remaining_len characters. + * We have to cut the string into pieces. */ + z_off_t offset = 0L; + /* the first part of the string is found, advance the_string to the next untested character. */ + the_string += available; + /* update the remaining length and the parsed length. */ + remaining_len -= available; + tested_len += available; + SYNCTEX_CUR += available; /* We validate the tested characters. */ + if (0 == remaining_len) { + /* Nothing left to test, we have found the given string, we return the length. */ + return tested_len; + } + /* We also have to record the current state of the file cursor because + * if the_string does not match, all this should be a totally blank operation, + * for which the file and buffer states should not be modified at all. + * In fact, the states of the buffer before and after this function are in general different + * but they are totally equivalent as long as the values of the buffer before SYNCTEX_CUR + * can be safely discarded. */ + offset = gztell(SYNCTEX_FILE); + /* offset now corresponds to the first character of the file that was not buffered. */ + available = SYNCTEX_CUR - SYNCTEX_START; /* available can be used as temporary placeholder. */ + /* available now corresponds to the number of chars that where already buffered and + * that match the head of the_string. If in fine the_string does not match, all these chars must be recovered + * because the buffer contents is completely replaced by _synctex_buffer_get_available_size. + * They were buffered from offset-len location in the file. */ + offset -= available; +more_characters: + /* There is still some work to be done, so read another bunch of file. + * This is the second call to _synctex_buffer_get_available_size, + * which means that the actual contents of the buffer will be discarded. + * We will definitely have to recover the previous state in case we do not find the expected string. */ + available = remaining_len; + status = _synctex_buffer_get_available_size(scanner,&available); + if (statusptr) { + SYNCTEX_CUR = end; + if (value_ref) { + * value_ref = result; + } + return SYNCTEX_STATUS_OK;/* Successfully scanned an int */ + } + return SYNCTEX_STATUS_NOT_OK;/* Could not scan an int */ +} + +/* The purpose of this function is to read a string. + * A string is an array of characters from the current parser location + * and before the next '\n' character. + * If a string was properly decoded, it is returned in value_ref and + * the cursor points to the new line marker. + * The returned string was alloced on the heap, the caller is the owner and + * is responsible to free it in due time. + * If no string is parsed, * value_ref is undefined. + * The maximum length of a string that a scanner can decode is platform dependent, namely UINT_MAX. + * If you just want to blindly parse the file up to the end of the current line, + * use _synctex_next_line instead. + * On return, the scanner cursor is unchanged if a string could not be scanned or + * points to the terminating '\n' character otherwise. As a consequence, + * _synctex_next_line is necessary after. + * If either scanner or value_ref is NULL, it is considered as an error and + * SYNCTEX_STATUS_BAD_ARGUMENT is returned. + */ +synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value_ref) { + char * end = NULL; + size_t current_size = 0; + size_t new_size = 0; + size_t len = 0;/* The number of bytes to copy */ + size_t available = 0; + synctex_status_t status = 0; + if (NULL == scanner || NULL == value_ref) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } + /* The buffer must at least contain one character: the '\n' end of line marker */ + if (SYNCTEX_CUR>=SYNCTEX_END) { + available = 1; + status = _synctex_buffer_get_available_size(scanner,&available); + if (status < 0) { + return status; + } + if (0 == available) { + return SYNCTEX_STATUS_EOF; + } + } + /* Now we are sure that there is at least one available character, either because + * SYNCTEX_CUR was already < SYNCTEX_END, or because the buffer has been properly filled. */ + /* end will point to the next unparsed '\n' character in the file, when mapped to the buffer. */ + end = SYNCTEX_CUR; + * value_ref = NULL;/* Initialize, it will be realloc'ed */ + /* We scan all the characters up to the next '\n' */ +next_character: + if (endUINT_MAX-len-1) { + /* But we have reached the limit: we do not have current_size+len+1>UINT_MAX. + * We return the missing amount of memory. + * This will never occur in practice. */ + return UINT_MAX-len-1 - current_size; + } + new_size = current_size+len; + /* We have current_size+len+1<=UINT_MAX + * or equivalently new_sizeUINT_MAX-len-1) { + /* We have reached the limit. */ + _synctex_error("limit reached (missing %i).",current_size-(UINT_MAX-len-1)); + return SYNCTEX_STATUS_ERROR; + } + new_size = current_size+len; + if ((* value_ref = realloc(* value_ref,new_size+1)) != NULL) { + if (memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) { + (* value_ref)[new_size]='\0'; /* Terminate the string */ + SYNCTEX_CUR = SYNCTEX_END;/* Advance the cursor to the end of the bufer */ + return SYNCTEX_STATUS_OK; + } + free(* value_ref); + * value_ref = NULL; + _synctex_error("could not copy memory (2)."); + return SYNCTEX_STATUS_ERROR; + } + /* Huge memory problem */ + _synctex_error("could not allocate memory (2)."); + return SYNCTEX_STATUS_ERROR; + } +} + +/* Used when parsing the synctex file. + * Read an Input record. + */ +synctex_status_t _synctex_scan_input(synctex_scanner_t scanner) { + synctex_status_t status = 0; + size_t available = 0; + synctex_node_t input = NULL; + if (NULL == scanner) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } + status = _synctex_match_string(scanner,SYNCTEX_INPUT_MARK); + if (statusinput); + scanner->input = input; +# if SYNCTEX_VERBOSE + synctex_node_log(input); +# endif + return _synctex_next_line(scanner);/* read the line termination character, if any */ + /* Now, set up the path */ +} + +typedef synctex_status_t (*synctex_decoder_t)(synctex_scanner_t,void *); + +synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder); + +/* Used when parsing the synctex file. + * Read one of the settings. + * On normal completion, returns SYNCTEX_STATUS_OK. + * On error, returns SYNCTEX_STATUS_ERROR. + * Both arguments must not be NULL. + * On return, the scanner points to the next character after the decoded object whatever it is. + * It is the responsibility of the caller to prepare the scanner for the next line. + */ +synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder) { + synctex_status_t status = 0; + if (NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } +not_found: + status = _synctex_match_string(scanner,name); + if (statusversion),(synctex_decoder_t)&_synctex_decode_int); + if (statusoutput_fmt),(synctex_decoder_t)&_synctex_decode_string); + if (statuspre_magnification),(synctex_decoder_t)&_synctex_decode_int); + if (statuspre_unit),(synctex_decoder_t)&_synctex_decode_int); + if (statuspre_x_offset),(synctex_decoder_t)&_synctex_decode_int); + if (statuspre_y_offset),(synctex_decoder_t)&_synctex_decode_int); + if (status= SYNCTEX_STATUS_OK) { + f *= 72.27f*65536; + } else if (status= SYNCTEX_STATUS_OK) { + f *= 72.27f*65536/2.54f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) { + f *= 72.27f*65536/25.4f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) { + f *= 65536.0f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) { + f *= 72.27f/72*65536.0f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) { + f *= 12.0*65536.0f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) { + f *= 1.0f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) { + f *= 1238.0f/1157*65536.0f; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) { + f *= 14856.0f/1157*65536; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) { + f *= 685.0f/642*65536; + } else if (status<0) { + goto report_unit_error; + } else if ((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) { + f *= 1370.0f/107*65536; + } else if (status<0) { + goto report_unit_error; + } + *value_ref = f; + return SYNCTEX_STATUS_OK; +} + +/* parse the post scriptum + * SYNCTEX_STATUS_OK is returned on completion + * a negative error is returned otherwise */ +synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner) { + synctex_status_t status = 0; + char * endptr = NULL; +#ifdef HAVE_SETLOCALE + char * loc = setlocale(LC_NUMERIC, NULL); +#endif + if (NULL == scanner) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } + /* Scan the file until a post scriptum line is found */ +post_scriptum_not_found: + status = _synctex_match_string(scanner,"Post scriptum:"); + if (statusunit = strtod(SYNCTEX_CUR,&endptr); +#ifdef HAVE_SETLOCALE + setlocale(LC_NUMERIC, loc); +#endif + if (endptr == SYNCTEX_CUR) { + _synctex_error("bad magnification in the post scriptum, a float was expected."); + return SYNCTEX_STATUS_ERROR; + } + if (scanner->unit<=0) { + _synctex_error("bad magnification in the post scriptum, a positive float was expected."); + return SYNCTEX_STATUS_ERROR; + } + SYNCTEX_CUR = endptr; + goto next_line; + } + if (statusx_offset)); + if (statusy_offset)); + if (statuscount),(synctex_decoder_t)&_synctex_decode_int); + if (status < SYNCTEX_STATUS_EOF) { + return status; /* forward the error */ + } else if (status < SYNCTEX_STATUS_OK) { /* No Count record found */ + status = _synctex_next_line(scanner); /* Advance one more line */ + if (statusclass->type) { + case synctex_node_type_hbox: + if (SYNCTEX_INFO(box) != NULL) { + SYNCTEX_HORIZ_V(box) = SYNCTEX_HORIZ(box); + SYNCTEX_VERT_V(box) = SYNCTEX_VERT(box); + SYNCTEX_WIDTH_V(box) = SYNCTEX_WIDTH(box); + SYNCTEX_HEIGHT_V(box) = SYNCTEX_HEIGHT(box); + SYNCTEX_DEPTH_V(box) = SYNCTEX_DEPTH(box); + return SYNCTEX_STATUS_OK; + } + return SYNCTEX_STATUS_ERROR; + } + } + return SYNCTEX_STATUS_BAD_ARGUMENT; +} + +/* This method is sent to an horizontal box to setup the visible size + * Some box have 0 width but do contain text material. + * With this method, one can enlarge the box to contain the given point (h,v). + */ +synctex_status_t _synctex_hbox_setup_visible(synctex_node_t node,int h, int v) { +# ifdef __DARWIN_UNIX03 +# pragma unused(v) +# endif + int itsBtm, itsTop; + if (NULL == node || node->class->type != synctex_node_type_hbox) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } + if (SYNCTEX_WIDTH_V(node)<0) { + itsBtm = SYNCTEX_HORIZ_V(node); + itsTop = SYNCTEX_HORIZ_V(node)-SYNCTEX_WIDTH_V(node); + if (hitsTop) { + SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - h; + } + } else { + itsBtm = SYNCTEX_HORIZ_V(node); + itsTop = SYNCTEX_HORIZ_V(node)+SYNCTEX_WIDTH_V(node); + if (hitsTop) { + SYNCTEX_WIDTH_V(node) = h - SYNCTEX_HORIZ_V(node); + } + } + return SYNCTEX_STATUS_OK; +} + +/* Here are the control characters that strat each line of the synctex output file. + * Their values define the meaning of the line. + */ +# define SYNCTEX_CHAR_BEGIN_SHEET '{' +# define SYNCTEX_CHAR_END_SHEET '}' +# define SYNCTEX_CHAR_BEGIN_VBOX '[' +# define SYNCTEX_CHAR_END_VBOX ']' +# define SYNCTEX_CHAR_BEGIN_HBOX '(' +# define SYNCTEX_CHAR_END_HBOX ')' +# define SYNCTEX_CHAR_ANCHOR '!' +# define SYNCTEX_CHAR_VOID_VBOX 'v' +# define SYNCTEX_CHAR_VOID_HBOX 'h' +# define SYNCTEX_CHAR_KERN 'k' +# define SYNCTEX_CHAR_GLUE 'g' +# define SYNCTEX_CHAR_MATH '$' +# define SYNCTEX_CHAR_BOUNDARY 'x' + +# define SYNCTEX_RETURN(STATUS) return STATUS; + +/* Used when parsing the synctex file. A '{' character has just been parsed. + * The purpose is to gobble everything until the closing '}'. + * Actually only one nesting depth has been observed when using the clip option + * of \includegraphics option. Here we use arbitrary level of depth. + */ +synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner) { + unsigned int depth = 0; +deeper: + ++depth; + if (_synctex_next_line(scanner)0) { + goto scan_next_line; + } else { + SYNCTEX_RETURN(SYNCTEX_STATUS_OK); + } + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) { + ++SYNCTEX_CUR; + goto deeper; + + } else if (_synctex_next_line(scanner)class->type != synctex_node_type_sheet + || _synctex_next_line(scanner)0){ + _synctex_error("Uncomplete sheet(0)"); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + goto prepare_loop; + } +/* The child loop means that we go down one level, when we just created a box node, + * the next node created is a child of this box. */ +child_loop: + if (SYNCTEX_CURclass->type == synctex_node_type_vbox) { + #define SYNCTEX_UPDATE_BOX_FRIEND(NODE)\ + friend_index = ((SYNCTEX_INFO(NODE))[SYNCTEX_TAG_IDX].INT+(SYNCTEX_INFO(NODE))[SYNCTEX_LINE_IDX].INT)%(scanner->number_of_lists);\ + SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\ + (scanner->lists_of_friends)[friend_index] = NODE; + if (NULL == SYNCTEX_CHILD(parent)) { + /* only void boxes are friends */ + SYNCTEX_UPDATE_BOX_FRIEND(parent); + } + child = parent; + parent = SYNCTEX_PARENT(child); + } else { + _synctex_error("Unexpected end of vbox, ignored."); + } + if (_synctex_next_line(scanner)class->type == synctex_node_type_hbox) { + /* Update the mean line number */ + synctex_node_t node = SYNCTEX_CHILD(parent); + if (node) { + unsigned int node_weight = 0; + unsigned int cumulated_line_numbers = 0; + do { + if (synctex_node_type(node)==synctex_node_type_hbox) { + if (SYNCTEX_NODE_WEIGHT(node)) { + node_weight += SYNCTEX_NODE_WEIGHT(node); + cumulated_line_numbers += SYNCTEX_MEAN_LINE(node)*SYNCTEX_NODE_WEIGHT(node); + } else { + ++node_weight; + cumulated_line_numbers += SYNCTEX_MEAN_LINE(node); + } + } else { + ++node_weight; + cumulated_line_numbers += SYNCTEX_LINE(node); + } + } while ((node = SYNCTEX_SIBLING(node))); + SYNCTEX_MEAN_LINE(parent)=(cumulated_line_numbers + node_weight/2)/node_weight; + SYNCTEX_NODE_WEIGHT(parent)=node_weight; + } else { + SYNCTEX_MEAN_LINE(parent)=SYNCTEX_LINE(parent); + SYNCTEX_NODE_WEIGHT(parent)=1; + } + if (NULL == child) { + /* Only boxes with no children are friends, + * boxes with children are indirectly friends through one of their contained nodes. */ + SYNCTEX_UPDATE_BOX_FRIEND(parent); + } + /* setting the next horizontal box at the end ensures that a child is recorded before any of its ancestors. */ + SYNCTEX_SET_NEXT_hbox(box,parent); + box = parent; + child = parent; + parent = SYNCTEX_PARENT(child); + } else { + _synctex_error("Unexpected end of hbox, ignored."); + } + if (_synctex_next_line(scanner)number_of_lists);\ + SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\ + (scanner->lists_of_friends)[friend_index] = NODE; + SYNCTEX_UPDATE_FRIEND(child); +# if SYNCTEX_VERBOSE + synctex_node_log(child); +# endif + goto sibling_loop; + } else { + _synctex_error("Can't create vbox record."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_HBOX) { + if (NULL != (child = _synctex_new_void_hbox(scanner)) + && NULL != (info = SYNCTEX_INFO(child))) { + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX) + || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX) + || _synctex_next_line(scanner)0){ + _synctex_error("Uncomplete sheet(0)"); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } else { + goto child_loop; + } + } +/* The vertical loop means that we are on the same level, for example when we just ended a box. + * If a node is created now, it will be a sibling of the current node, sharing the same parent. */ +sibling_loop: + if (SYNCTEX_CUR0){ + goto sibling_loop; + } else { + _synctex_error("Uncomplete sheet(2)"); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + } +# undef SYNCTEX_DECODE_FAILED +} + +# define SYNCTEX_APPEND_SHEET(SCANNER,SHEET) if (SCANNER->sheet) {\ + synctex_node_t last_sheet = SCANNER->sheet;\ + synctex_node_t next_sheet = NULL;\ + while ((next_sheet = SYNCTEX_SIBLING(last_sheet))) {\ + last_sheet = next_sheet;\ + }\ + SYNCTEX_SET_SIBLING(last_sheet,SHEET);\ + } else {\ + SCANNER->sheet = SHEET;\ + } + +/* Used when parsing the synctex file + */ +synctex_status_t _synctex_scan_content(synctex_scanner_t scanner) { + synctex_node_t sheet = NULL; + synctex_status_t status = 0; + if (NULL == scanner) { + return SYNCTEX_STATUS_BAD_ARGUMENT; + } + /* set up the lists of friends */ + if (NULL == scanner->lists_of_friends) { + scanner->number_of_lists = 1024; + scanner->lists_of_friends = (synctex_node_t *)_synctex_malloc(scanner->number_of_lists*sizeof(synctex_node_t)); + if (NULL == scanner->lists_of_friends) { + _synctex_error("malloc:2"); + return SYNCTEX_STATUS_ERROR; + } + } + /* Find where this section starts */ +content_not_found: + status = _synctex_match_string(scanner,"Content:"); + if (status= SYNCTEX_STATUS_OK); + goto next_sheet; +} + +int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef); + +/* Where the synctex scanner is created. */ +synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, const char * build_directory, int parse) { + gzFile file = NULL; + char * synctex = NULL; + synctex_scanner_t scanner = NULL; + synctex_io_mode_t io_mode = 0; + /* Here we assume that int are smaller than void * */ + if (sizeof(int)>sizeof(void*)) { + _synctex_error("INTERNAL INCONSISTENCY: int's are unexpectedly bigger than pointers, bailing out."); + return NULL; + } + /* We ensure that SYNCTEX_BUFFER_SIZE < UINT_MAX, I don't know if it makes sense... */ + if (SYNCTEX_BUFFER_SIZE >= UINT_MAX) { + _synctex_error("Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (1)"); + return NULL; + } + /* for integers: */ + if (SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) { + _synctex_error("Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (2)"); + return NULL; + } + /* now open the synctex file */ + if (_synctex_open(output,build_directory,&synctex,&file,synctex_ADD_QUOTES,&io_mode) || !file) { + if (_synctex_open(output,build_directory,&synctex,&file,synctex_DONT_ADD_QUOTES,&io_mode) || !file) { + return NULL; + } + } + scanner = (synctex_scanner_t)_synctex_malloc(sizeof(_synctex_scanner_t)); + if (NULL == scanner) { + _synctex_error("malloc problem"); + free(synctex); + gzclose(file); + return NULL; + } + /* make a private copy of output for the scanner */ + if (NULL == (scanner->output = (char *)malloc(strlen(output)+1))){ + _synctex_error("! synctex_scanner_new_with_output_file: Memory problem (2), scanner's output is not reliable."); + } else if (scanner->output != strcpy(scanner->output,output)) { + _synctex_error("! synctex_scanner_new_with_output_file: Copy problem, scanner's output is not reliable."); + } + scanner->synctex = synctex;/* Now the scanner owns synctex */ + SYNCTEX_FILE = file; + return parse? synctex_scanner_parse(scanner):scanner; +} + +/* This functions opens the file at the "output" given location. + * It manages the problem of quoted filenames that appear with pdftex and filenames containing the space character. + * In TeXLive 2008, the synctex file created with pdftex did contain unexpected quotes. + * This function will remove them if possible. + * All the reference arguments will take a value on return. They must be non NULL. + * 0 on success, non 0 on error. */ +static int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) { + if (synctex_name_ref && file_ref && io_mode_ref) { + /* 1 local variables that uses dynamic memory */ + char * synctex_name = NULL; + gzFile the_file = NULL; + char * quoteless_synctex_name = NULL; + size_t size = 0; + synctex_io_mode_t io_mode = *io_mode_ref; + const char * mode = _synctex_get_io_mode_name(io_mode); + /* now create the synctex file name */ + size = strlen(output)+strlen(synctex_suffix)+strlen(synctex_suffix_gz)+1; + synctex_name = (char *)malloc(size); + if (NULL == synctex_name) { + _synctex_error("! __synctex_open: Memory problem (1)\n"); + return 1; + } + /* we have reserved for synctex enough memory to copy output (including its 2 eventual quotes), both suffices, + * including the terminating character. size is free now. */ + if (synctex_name != strcpy(synctex_name,output)) { + _synctex_error("! __synctex_open: Copy problem\n"); +return_on_error: + free(synctex_name); + free(quoteless_synctex_name); + return 2; + } + /* remove the last path extension if any */ + _synctex_strip_last_path_extension(synctex_name); + if (!strlen(synctex_name)) { + goto return_on_error; + } + /* now insert quotes. */ + if (add_quotes) { + char * quoted = NULL; + if (_synctex_copy_with_quoting_last_path_component(synctex_name,"ed,size) || (NULL == quoted)) { + /* There was an error or quoting does not make sense: */ + goto return_on_error; + } + quoteless_synctex_name = synctex_name; + synctex_name = quoted; + } + /* Now add to synctex_name the first path extension. */ + if (synctex_name != strcat(synctex_name,synctex_suffix)){ + _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix); + goto return_on_error; + } + /* Add to quoteless_synctex_name as well, if relevant. */ + if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix))){ + free(quoteless_synctex_name); + quoteless_synctex_name = NULL; + } + if (NULL == (the_file = gzopen(synctex_name,mode))) { + /* Could not open this file */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ + _synctex_error("could not open %s, error %i\n",synctex_name,errno); + goto return_on_error; + } + /* Apparently, there is no uncompressed synctex file. Try the compressed version */ + if (synctex_name != strcat(synctex_name,synctex_suffix_gz)){ + _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix_gz); + goto return_on_error; + } + io_mode |= synctex_io_gz_mask; + mode = _synctex_get_io_mode_name(io_mode); /* the file is a compressed and is a binary file, this caused errors on Windows */ + /* Add the suffix to the quoteless_synctex_name as well. */ + if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix_gz))){ + free(quoteless_synctex_name); + quoteless_synctex_name = NULL; + } + if (NULL == (the_file = gzopen(synctex_name,mode))) { + /* Could not open this file */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ + _synctex_error("Could not open %s, error %i\n",synctex_name,errno); + } + goto return_on_error; + } + } + /* At this point, the file is properly open. + * If we are in the add_quotes mode, we change the file name by removing the quotes. */ + if (quoteless_synctex_name) { + gzclose(the_file); + if (rename(synctex_name,quoteless_synctex_name)) { + _synctex_error("Could not rename %s to %s, error %i\n",synctex_name,quoteless_synctex_name,errno); + /* We could not rename, reopen the file with the quoted name. */ + if (NULL == (the_file = gzopen(synctex_name,mode))) { + /* No luck, could not re open this file, something has happened meanwhile */ + if (errno != ENOENT) { + /* The file does not exist any more, it has certainly be removed somehow + * this is a lower level error, I can't do anything. */ + _synctex_error("Could not open again %s, error %i\n",synctex_name,errno); + } + goto return_on_error; + } + } else { + /* The file has been successfully renamed */ + if (NULL == (the_file = gzopen(quoteless_synctex_name,mode))) { + /* Could not open this file */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ + _synctex_error("Could not open renamed %s, error %i\n",quoteless_synctex_name,errno); + } + goto return_on_error; + } + /* The quote free file name should replace the old one:*/ + free(synctex_name); + synctex_name = quoteless_synctex_name; + quoteless_synctex_name = NULL; + } + } + /* The operation is successfull, return the arguments by value. */ + * file_ref = the_file; + * io_mode_ref = io_mode; + * synctex_name_ref = synctex_name; + return 0; + } + return 3; /* Bad parameter. */ +} + +/* Opens the ouput file, taking into account the eventual build_directory. + * 0 on success, non 0 on error. */ +int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) { +# define synctex_name (*synctex_name_ref) +# define the_file (*file_ref) + int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_mode_ref); + if ((result || !*file_ref) && build_directory && strlen(build_directory)) { + char * build_output; + const char *lpc; + size_t size; + synctex_bool_t is_absolute; + build_output = NULL; + lpc = _synctex_last_path_component(output); + size = strlen(build_directory)+strlen(lpc)+2; /* One for the '/' and one for the '\0'. */ + is_absolute = _synctex_path_is_absolute(build_directory); + if (!is_absolute) { + size += strlen(output); + } + if ((build_output = (char *)malloc(size))) { + if (is_absolute) { + build_output[0] = '\0'; + } else { + if (build_output != strcpy(build_output,output)) { + free(build_output); + return -4; + } + build_output[lpc-output]='\0'; + } + if (build_output == strcat(build_output,build_directory)) { + /* Append a path separator if necessary. */ + if (!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) { + if (build_output != strcat(build_output,"/")) { + free(build_output); + return -2; + } + } + /* Append the last path component of the output. */ + if (build_output != strcat(build_output,lpc)) { + free(build_output); + return -3; + } + result = __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_mode_ref); + free(build_output); + return result; + } + free(build_output); + } + return -1; + } + return result; +# undef synctex_name +# undef the_file +} + +/* The scanner destructor + */ +void synctex_scanner_free(synctex_scanner_t scanner) { + if (NULL == scanner) { + return; + } + if (SYNCTEX_FILE) { + gzclose(SYNCTEX_FILE); + SYNCTEX_FILE = NULL; + } + SYNCTEX_FREE(scanner->sheet); + SYNCTEX_FREE(scanner->input); + free(SYNCTEX_START); + free(scanner->output_fmt); + free(scanner->output); + free(scanner->synctex); + free(scanner->lists_of_friends); + free(scanner); +} + +/* Where the synctex scanner parses the contents of the file. */ +synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) { + synctex_status_t status = 0; + if (!scanner || scanner->flags.has_parsed) { + return scanner; + } + scanner->flags.has_parsed=1; + scanner->pre_magnification = 1000; + scanner->pre_unit = 8192; + scanner->pre_x_offset = scanner->pre_y_offset = 578; + /* initialize the offset with a fake unprobable value, + * If there is a post scriptum section, this value will be overriden by the real life value */ + scanner->x_offset = scanner->y_offset = 6.027e23f; +# define DEFINE_synctex_scanner_class(NAME)\ + scanner->class[synctex_node_type_##NAME] = synctex_class_##NAME;\ + (scanner->class[synctex_node_type_##NAME]).scanner = scanner + DEFINE_synctex_scanner_class(sheet); + DEFINE_synctex_scanner_class(input); + DEFINE_synctex_scanner_class(hbox); + DEFINE_synctex_scanner_class(void_hbox); + DEFINE_synctex_scanner_class(vbox); + DEFINE_synctex_scanner_class(void_vbox); + DEFINE_synctex_scanner_class(kern); + DEFINE_synctex_scanner_class(glue); + DEFINE_synctex_scanner_class(math); + DEFINE_synctex_scanner_class(boundary); + SYNCTEX_START = (char *)malloc(SYNCTEX_BUFFER_SIZE+1); /* one more character for null termination */ + if (NULL == SYNCTEX_START) { + _synctex_error("malloc error"); + synctex_scanner_free(scanner); + return NULL; + } + SYNCTEX_END = SYNCTEX_START+SYNCTEX_BUFFER_SIZE; + /* SYNCTEX_END always points to a null terminating character. + * Maybe there is another null terminating character between SYNCTEX_CUR and SYNCTEX_END-1. + * At least, we are sure that SYNCTEX_CUR points to a string covering a valid part of the memory. */ + *SYNCTEX_END = '\0'; + SYNCTEX_CUR = SYNCTEX_END; +# if defined(SYNCTEX_USE_CHARINDEX) + scanner->charindex_offset = -SYNCTEX_BUFFER_SIZE; +# endif + status = _synctex_scan_preamble(scanner); + if (statuspre_unit)/65536 pt = (scanner->pre_unit)/65781.76 bp + * 1 pt = 65536 sp */ + if (scanner->pre_unit<=0) { + scanner->pre_unit = 8192; + } + if (scanner->pre_magnification<=0) { + scanner->pre_magnification = 1000; + } + if (scanner->unit <= 0) { + /* no post magnification */ + scanner->unit = scanner->pre_unit / 65781.76;/* 65781.76 or 65536.0*/ + } else { + /* post magnification */ + scanner->unit *= scanner->pre_unit / 65781.76; + } + scanner->unit *= scanner->pre_magnification / 1000.0; + if (scanner->x_offset > 6e23) { + /* no post offset */ + scanner->x_offset = scanner->pre_x_offset * (scanner->pre_unit / 65781.76); + scanner->y_offset = scanner->pre_y_offset * (scanner->pre_unit / 65781.76); + } else { + /* post offset */ + scanner->x_offset /= 65781.76f; + scanner->y_offset /= 65781.76f; + } + return scanner; + #undef SYNCTEX_FILE +} + +/* Scanner accessors. + */ +int synctex_scanner_pre_x_offset(synctex_scanner_t scanner){ + return scanner?scanner->pre_x_offset:0; +} +int synctex_scanner_pre_y_offset(synctex_scanner_t scanner){ + return scanner?scanner->pre_y_offset:0; +} +int synctex_scanner_x_offset(synctex_scanner_t scanner){ + return scanner?scanner->x_offset:0; +} +int synctex_scanner_y_offset(synctex_scanner_t scanner){ + return scanner?scanner->y_offset:0; +} +float synctex_scanner_magnification(synctex_scanner_t scanner){ + return scanner?scanner->unit:1; +} +void synctex_scanner_display(synctex_scanner_t scanner) { + if (NULL == scanner) { + return; + } + printf("The scanner:\noutput:%s\noutput_fmt:%s\nversion:%i\n",scanner->output,scanner->output_fmt,scanner->version); + printf("pre_unit:%i\nx_offset:%i\ny_offset:%i\n",scanner->pre_unit,scanner->pre_x_offset,scanner->pre_y_offset); + printf("count:%i\npost_magnification:%f\npost_x_offset:%f\npost_y_offset:%f\n", + scanner->count,scanner->unit,scanner->x_offset,scanner->y_offset); + printf("The input:\n"); + SYNCTEX_DISPLAY(scanner->input); + if (scanner->count<1000) { + printf("The sheets:\n"); + SYNCTEX_DISPLAY(scanner->sheet); + printf("The friends:\n"); + if (scanner->lists_of_friends) { + int i = scanner->number_of_lists; + synctex_node_t node; + while(i--) { + printf("Friend index:%i\n",i); + node = (scanner->lists_of_friends)[i]; + while(node) { + printf("%s:%i,%i\n", + synctex_node_isa(node), + SYNCTEX_TAG(node), + SYNCTEX_LINE(node) + ); + node = SYNCTEX_FRIEND(node); + } + } + } + } else { + printf("SyncTeX Warning: Too many objects\n"); + } +} +/* Public*/ +const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag) { + synctex_node_t input = NULL; + if (NULL == scanner) { + return NULL; + } + input = scanner->input; + do { + if (tag == SYNCTEX_TAG(input)) { + return (SYNCTEX_NAME(input)); + } + } while((input = SYNCTEX_SIBLING(input)) != NULL); + return NULL; +} + +int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name); +int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) { + synctex_node_t input = NULL; + if (NULL == scanner) { + return 0; + } + input = scanner->input; + do { + if (_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) { + return SYNCTEX_TAG(input); + } + } while((input = SYNCTEX_SIBLING(input)) != NULL); + // 2011 version + name = _synctex_base_name(name); + input = scanner->input; + do { + if (_synctex_is_equivalent_file_name(name,_synctex_base_name(SYNCTEX_NAME(input)))) { + synctex_node_t other_input = input; + while((other_input = SYNCTEX_SIBLING(other_input)) != NULL) { + if (_synctex_is_equivalent_file_name(name,_synctex_base_name(SYNCTEX_NAME(other_input))) + && (strlen(SYNCTEX_NAME(input))!=strlen(SYNCTEX_NAME(other_input)) + || strncmp(SYNCTEX_NAME(other_input),SYNCTEX_NAME(input),strlen(SYNCTEX_NAME(input))))) { + // There is a second possible candidate + return 0; + } + } + return SYNCTEX_TAG(input); + } + } while((input = SYNCTEX_SIBLING(input)) != NULL); + return 0; +} + +int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) { + size_t char_index = strlen(name); + if ((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) { + /* the name is not void */ + char_index -= 1; + if (!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) { + /* the last character of name is not a path separator */ + int result = _synctex_scanner_get_tag(scanner,name); + if (result) { + return result; + } else { + /* the given name was not the one known by TeX + * try a name relative to the enclosing directory of the scanner->output file */ + const char * relative = name; + const char * ptr = scanner->output; + while((strlen(relative) > 0) && (strlen(ptr) > 0) && (*relative == *ptr)) + { + relative += 1; + ptr += 1; + } + /* Find the last path separator before relative */ + while(relative > name) { + if (SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) { + break; + } + relative -= 1; + } + if ((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) { + return result; + } + if (SYNCTEX_IS_PATH_SEPARATOR(name[0])) { + /* No tag found for the given absolute name, + * Try each relative path starting from the shortest one */ + while(0input:NULL; +} +const char * synctex_scanner_get_output_fmt(synctex_scanner_t scanner) { + return NULL != scanner && scanner->output_fmt?scanner->output_fmt:""; +} +const char * synctex_scanner_get_output(synctex_scanner_t scanner) { + return NULL != scanner && scanner->output?scanner->output:""; +} +const char * synctex_scanner_get_synctex(synctex_scanner_t scanner) { + return NULL != scanner && scanner->synctex?scanner->synctex:""; +} +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Public node attributes +# endif +int synctex_node_h(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_HORIZ(node); +} +int synctex_node_v(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_VERT(node); +} +int synctex_node_width(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_WIDTH(node); +} +int synctex_node_box_h(synctex_node_t node){ + if (!node) { + return 0; + } + if (SYNCTEX_IS_BOX(node)) { +result: + return SYNCTEX_HORIZ(node); + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +int synctex_node_box_v(synctex_node_t node){ + if (!node) { + return 0; + } + if (SYNCTEX_IS_BOX(node)) { +result: + return SYNCTEX_VERT(node); + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +int synctex_node_box_width(synctex_node_t node){ + if (!node) { + return 0; + } + if (SYNCTEX_IS_BOX(node)) { +result: + return SYNCTEX_WIDTH(node); + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +int synctex_node_box_height(synctex_node_t node){ + if (!node) { + return 0; + } + if (SYNCTEX_IS_BOX(node)) { +result: + return SYNCTEX_HEIGHT(node); + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +int synctex_node_box_depth(synctex_node_t node){ + if (!node) { + return 0; + } + if (SYNCTEX_IS_BOX(node)) { +result: + return SYNCTEX_DEPTH(node); + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Public node visible attributes +# endif +float synctex_node_visible_h(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset; +} +float synctex_node_visible_v(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset; +} +float synctex_node_visible_width(synctex_node_t node){ + if (!node) { + return 0; + } + return SYNCTEX_WIDTH(node)*node->class->scanner->unit; +} +float synctex_node_box_visible_h(synctex_node_t node){ + if (!node) { + return 0; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset; + case synctex_node_type_hbox: +result: + return SYNCTEX_HORIZ_V(node)*node->class->scanner->unit+node->class->scanner->x_offset; + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +float synctex_node_box_visible_v(synctex_node_t node){ + if (!node) { + return 0; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset; + case synctex_node_type_hbox: +result: + return SYNCTEX_VERT_V(node)*node->class->scanner->unit+node->class->scanner->y_offset; + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +float synctex_node_box_visible_width(synctex_node_t node){ + if (!node) { + return 0; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + return SYNCTEX_WIDTH(node)*node->class->scanner->unit; + case synctex_node_type_hbox: +result: + return SYNCTEX_WIDTH_V(node)*node->class->scanner->unit; + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +float synctex_node_box_visible_height(synctex_node_t node){ + if (!node) { + return 0; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + return SYNCTEX_HEIGHT(node)*node->class->scanner->unit; + case synctex_node_type_hbox: +result: + return SYNCTEX_HEIGHT_V(node)*node->class->scanner->unit; + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +float synctex_node_box_visible_depth(synctex_node_t node){ + if (!node) { + return 0; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + return SYNCTEX_DEPTH(node)*node->class->scanner->unit; + case synctex_node_type_hbox: +result: + return SYNCTEX_DEPTH_V(node)*node->class->scanner->unit; + } + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + goto result; + } + return 0; +} +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Other public node attributes +# endif + +int synctex_node_page(synctex_node_t node){ + synctex_node_t parent = NULL; + if (!node) { + return -1; + } + parent = SYNCTEX_PARENT(node); + while(parent) { + node = parent; + parent = SYNCTEX_PARENT(node); + } + if (node->class->type == synctex_node_type_sheet) { + return SYNCTEX_PAGE(node); + } + return -1; +} +synctex_charindex_t synctex_node_charindex(synctex_node_t node) { + return node?SYNCTEX_CHARINDEX(node):0; +} +int synctex_node_tag(synctex_node_t node) { + return node?SYNCTEX_TAG(node):-1; +} +int synctex_node_line(synctex_node_t node) { + return node?SYNCTEX_LINE(node):-1; +} +int synctex_node_mean_line(synctex_node_t node) { + return node?(node->class->type==synctex_node_type_hbox?SYNCTEX_MEAN_LINE(node):SYNCTEX_LINE(node)):-1; +} +int synctex_node_child_count(synctex_node_t node) { + return node?(node->class->type==synctex_node_type_hbox?SYNCTEX_NODE_WEIGHT(node):0):-1; +} +int synctex_node_column(synctex_node_t node) { +# ifdef __DARWIN_UNIX03 +# pragma unused(node) +# endif + return -1; +} +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Sheet +# endif + +synctex_node_t synctex_sheet(synctex_scanner_t scanner,int page) { + if (scanner) { + synctex_node_t sheet = scanner->sheet; + while(sheet) { + if (page == SYNCTEX_PAGE(sheet)) { + return sheet; + } + sheet = SYNCTEX_SIBLING(sheet); + } + } + return NULL; +} + +synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page) { + if (scanner) { + return SYNCTEX_CHILD(synctex_sheet(scanner,page)); + } + return NULL; +} + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Query +# endif + +synctex_status_t synctex_display_query(synctex_scanner_t scanner,const char * name,int line,int column) { +# ifdef __DARWIN_UNIX03 +# pragma unused(column) +# endif + int tag = synctex_scanner_get_tag(scanner,name); + size_t size = 0; + int friend_index = 0; + int max_line = 0; + synctex_node_t node = NULL; + if (tag == 0) { + printf("SyncTeX Warning: No tag for %s\n",name); + return -1; + } + free(SYNCTEX_START); + SYNCTEX_CUR = SYNCTEX_END = SYNCTEX_START = NULL; + max_line = line < INT_MAX-scanner->number_of_lists ? line+scanner->number_of_lists:INT_MAX; + while(linenumber_of_lists); + if ((node = (scanner->lists_of_friends)[friend_index])) { + do { + if ((synctex_node_type(node)>=synctex_node_type_boundary) + && (tag == SYNCTEX_TAG(node)) + && (line == SYNCTEX_LINE(node))) { + if (SYNCTEX_CUR == SYNCTEX_END) { + size += 16; + SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); + SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; + SYNCTEX_START = SYNCTEX_END; + SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *); + } + *(synctex_node_t *)SYNCTEX_CUR = node; + SYNCTEX_CUR += sizeof(synctex_node_t); + } + } while ((node = SYNCTEX_FRIEND(node))); + if (SYNCTEX_START == NULL) { + /* We did not find any matching boundary, retry with glue or kern */ + node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */ + do { + if ((synctex_node_type(node)>=synctex_node_type_kern) + && (tag == SYNCTEX_TAG(node)) + && (line == SYNCTEX_LINE(node))) { + if (SYNCTEX_CUR == SYNCTEX_END) { + size += 16; + SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); + SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; + SYNCTEX_START = SYNCTEX_END; + SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *); + } + *(synctex_node_t *)SYNCTEX_CUR = node; + SYNCTEX_CUR += sizeof(synctex_node_t); + } + } while ((node = SYNCTEX_FRIEND(node))); + if (SYNCTEX_START == NULL) { + /* We did not find any matching glue or kern, retry with boxes */ + node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */ + do { + if ((tag == SYNCTEX_TAG(node)) + && (line == SYNCTEX_LINE(node))) { + if (SYNCTEX_CUR == SYNCTEX_END) { + size += 16; + SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); + SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; + SYNCTEX_START = SYNCTEX_END; + SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *); + } + *(synctex_node_t *)SYNCTEX_CUR = node; + SYNCTEX_CUR += sizeof(synctex_node_t); + } + } while((node = SYNCTEX_FRIEND(node))); + } + } + SYNCTEX_END = SYNCTEX_CUR; + /* Now reverse the order to have nodes in display order, and then keep just a few nodes. + * Order first the best node. */ + if ((SYNCTEX_START) && (SYNCTEX_END)) { + unsigned int best_match = -1; + unsigned int next_match = -1; + unsigned int best_weight = 0; + synctex_node_t * best_ref = NULL; + synctex_node_t * start_ref = (synctex_node_t *)SYNCTEX_START; + synctex_node_t * end_ref = (synctex_node_t *)SYNCTEX_END; + --end_ref; + while (start_ref < end_ref) { + node = *start_ref; + *start_ref = *end_ref; + *end_ref = node; + ++start_ref; + --end_ref; + } + /* Now reorder the nodes to put first the one which fits best. + * The idea is to walk along the list of nodes and pick up the first one + * which line info is exactly the mean line of its parent, or at least very close. + * Then we choose among all such node the one with the maximum number of child nodes. + * Then we switch with the first node. + */ + best_ref = start_ref = (synctex_node_t *)SYNCTEX_START; + node = *start_ref; + best_match = abs(SYNCTEX_LINE(node)-SYNCTEX_MEAN_LINE(SYNCTEX_PARENT(node))); + end_ref = (synctex_node_t *)SYNCTEX_END; + while (++start_refbest_weight)) { + best_match = next_match; + best_ref = start_ref; + best_weight = SYNCTEX_NODE_WEIGHT(parent); + } + } + node = *best_ref; + *best_ref = *(synctex_node_t *)SYNCTEX_START; + *(synctex_node_t *)SYNCTEX_START = node; + /* Basically, we keep the first node for each parent. + * More precisely, we keep only nodes that are not children of + * their predecessor's parent. */ + start_ref = (synctex_node_t *)SYNCTEX_START; + end_ref = (synctex_node_t *)SYNCTEX_START; +next_end: + end_ref += 1; /* we allways have start_ref<= end_ref*/ + if (end_ref < (synctex_node_t *)SYNCTEX_END) { + node = *end_ref; + while ((node = SYNCTEX_PARENT(node))) { + if (SYNCTEX_PARENT(*start_ref) == node) { + goto next_end; + } + } + start_ref += 1; + *start_ref = *end_ref; + goto next_end; + } + start_ref += 1; + SYNCTEX_END = (char *)start_ref; + SYNCTEX_CUR = NULL;// added on behalf of Jose Alliste + return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);// added on behalf Jan Sundermeyer + } + SYNCTEX_CUR = NULL; + // return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); removed on behalf Jan Sundermeyer + } +# if defined(__SYNCTEX_STRONG_DISPLAY_QUERY__) + break; +# else + ++line; +# endif + } + return 0; +} + +synctex_node_t synctex_next_result(synctex_scanner_t scanner) { + if (NULL == SYNCTEX_CUR) { + SYNCTEX_CUR = SYNCTEX_START; + } else { + SYNCTEX_CUR+=sizeof(synctex_node_t); + } + if (SYNCTEX_CUR= scanner->unit) {/* scanner->unit must be >0 */ + return 0; + } + /* Convert the given point to scanner integer coordinates */ + hitPoint.h = (h-scanner->x_offset)/scanner->unit; + hitPoint.v = (v-scanner->y_offset)/scanner->unit; + /* We will store in the scanner's buffer the result of the query. */ + free(SYNCTEX_START); + SYNCTEX_START = SYNCTEX_END = SYNCTEX_CUR = NULL; + /* Find the proper sheet */ + sheet = scanner->sheet; + while((sheet) && SYNCTEX_PAGE(sheet) != page) { + sheet = SYNCTEX_SIBLING(sheet); + } + if (NULL == sheet) { + return -1; + } + /* Now sheet points to the sheet node with proper page number */ + /* Here is how we work: + * At first we do not consider the visible box dimensions. This will cover the most frequent cases. + * Then we try with the visible box dimensions. + * We try to find a non void box containing the hit point. + * We browse all the horizontal boxes until we find one containing the hit point. */ + if ((node = SYNCTEX_NEXT_hbox(sheet))) { + do { + if (_synctex_point_in_box(hitPoint,node,synctex_YES)) { + /* Maybe the hitPoint belongs to a contained vertical box. */ +end: + /* This trick is for catching overlapping boxes */ + if ((other_node = SYNCTEX_NEXT_hbox(node))) { + do { + if (_synctex_point_in_box(hitPoint,other_node,synctex_YES)) { + node = _synctex_smallest_container(other_node,node); + } + } while((other_node = SYNCTEX_NEXT_hbox(other_node))); + } + /* node is the smallest horizontal box that contains hitPoint. */ + if ((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) { + node = bestContainer; + } + _synctex_eq_get_closest_children_in_box(hitPoint,node,&bestNodes,&bestDistances,synctex_YES); + if (bestNodes.right && bestNodes.left) { + if ((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left)) + || (SYNCTEX_LINE(bestNodes.right)!=SYNCTEX_LINE(bestNodes.left)) + || (SYNCTEX_COLUMN(bestNodes.right)!=SYNCTEX_COLUMN(bestNodes.left))) { + if ((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) { + if (bestDistances.left>bestDistances.right) { + ((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.right; + ((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.left; + } else { + ((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.left; + ((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.right; + } + SYNCTEX_END = SYNCTEX_START + 2*sizeof(synctex_node_t); + SYNCTEX_CUR = NULL; + return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); + } + return SYNCTEX_STATUS_ERROR; + } + /* both nodes have the same input coordinates + * We choose the one closest to the hit point */ + if (bestDistances.left>bestDistances.right) { + bestNodes.left = bestNodes.right; + } + bestNodes.right = NULL; + } else if (bestNodes.right) { + bestNodes.left = bestNodes.right; + } else if (!bestNodes.left){ + bestNodes.left = node; + } + if ((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) { + * (synctex_node_t *)SYNCTEX_START = bestNodes.left; + SYNCTEX_END = SYNCTEX_START + sizeof(synctex_node_t); + SYNCTEX_CUR = NULL; + return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); + } + return SYNCTEX_STATUS_ERROR; + } + } while ((node = SYNCTEX_NEXT_hbox(node))); + /* All the horizontal boxes have been tested, + * None of them contains the hit point. + */ + } + /* We are not lucky */ + if ((node = SYNCTEX_CHILD(sheet))) { + goto end; + } + return 0; +} + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Utilities +# endif + +/* Rougly speaking, this is: + * node's h coordinate - hitPoint's h coordinate. + * If node is to the right of the hit point, then this distance is positive, + * if node is to the left of the hit point, this distance is negative.*/ +int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible); +int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) { + if (node) { + int min,med,max; + switch(node->class->type) { + /* The distance between a point and a box is special. + * It is not the euclidian distance, nor something similar. + * We have to take into account the particular layout, + * and the box hierarchy. + * Given a box, there are 9 regions delimited by the lines of the edges of the box. + * The origin being at the top left corner of the page, + * we also give names to the vertices of the box. + * + * 1 | 2 | 3 + * ---A---B---> + * 4 | 5 | 6 + * ---C---D---> + * 7 | 8 | 9 + * v v + */ + case synctex_node_type_hbox: + /* getting the box bounds, taking into account negative width, height and depth. */ + min = visible?SYNCTEX_HORIZ_V(node):SYNCTEX_HORIZ(node); + max = min + (visible?SYNCTEX_ABS_WIDTH_V(node):SYNCTEX_ABS_WIDTH(node)); + /* We allways have min <= max */ + if (hitPoint.h 0 */ + } else if (hitPoint.h>max) { + return max - hitPoint.h; /* regions 3+6+9, result is < 0 */ + } else { + return 0; /* regions 2+5+8, inside the box, except for vertical coordinates */ + } + break; + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + /* getting the box bounds, taking into account negative width, height and depth. + * For these boxes, no visible dimension available */ + min = SYNCTEX_HORIZ(node); + max = min + SYNCTEX_ABS_WIDTH(node); + /* We allways have min <= max */ + if (hitPoint.h 0 */ + } else if (hitPoint.h>max) { + return max - hitPoint.h; /* regions 3+6+9, result is < 0 */ + } else { + return 0; /* regions 2+5+8, inside the box, except for vertical coordinates */ + } + break; + case synctex_node_type_kern: + /* IMPORTANT NOTICE: the location of the kern is recorded AFTER the move. + * The distance to the kern is very special, + * in general, there is no text material in the kern, + * this is why we compute the offset relative to the closest edge of the kern.*/ + max = SYNCTEX_WIDTH(node); + if (max<0) { + min = SYNCTEX_HORIZ(node); + max = min - max; + } else { + min = -max; + max = SYNCTEX_HORIZ(node); + min += max; + } + med = (min+max)/2; + /* positive kern: '.' means text, '>' means kern offset + * ............. + * min>>>>med>>>>max + * ............... + * negative kern: '.' means text, '<' means kern offset + * ............................ + * min<<<max) { + return max - hitPoint.h - 1; /* same kind of penalty */ + } else if (hitPoint.h>med) { + /* do things like if the node had 0 width and was placed at the max edge + 1*/ + return max - hitPoint.h + 1; /* positive, the kern is to the right of the hitPoint */ + } else { + return min - hitPoint.h - 1; /* negative, the kern is to the left of the hitPoint */ + } + case synctex_node_type_glue: + case synctex_node_type_math: + return SYNCTEX_HORIZ(node) - hitPoint.h; + } + } + return INT_MAX;/* We always assume that the node is faraway to the right*/ +} +/* Rougly speaking, this is: + * node's v coordinate - hitPoint's v coordinate. + * If node is at the top of the hit point, then this distance is positive, + * if node is at the bottom of the hit point, this distance is negative.*/ +int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,synctex_bool_t visible); +int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,synctex_bool_t visible) { +# ifdef __DARWIN_UNIX03 +# pragma unused(visible) +# endif + if (node) { + int min,max; + switch(node->class->type) { + /* The distance between a point and a box is special. + * It is not the euclidian distance, nor something similar. + * We have to take into account the particular layout, + * and the box hierarchy. + * Given a box, there are 9 regions delimited by the lines of the edges of the box. + * The origin being at the top left corner of the page, + * we also give names to the vertices of the box. + * + * 1 | 2 | 3 + * ---A---B---> + * 4 | 5 | 6 + * ---C---D---> + * 7 | 8 | 9 + * v v + */ + case synctex_node_type_hbox: + /* getting the box bounds, taking into account negative width, height and depth. */ + min = SYNCTEX_VERT_V(node); + max = min + SYNCTEX_ABS_DEPTH_V(node); + min -= SYNCTEX_ABS_HEIGHT_V(node); + /* We allways have min <= max */ + if (hitPoint.v 0 */ + } else if (hitPoint.v>max) { + return max - hitPoint.v; /* regions 7+8+9, result is < 0 */ + } else { + return 0; /* regions 4.5.6, inside the box, except for horizontal coordinates */ + } + break; + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_void_hbox: + /* getting the box bounds, taking into account negative width, height and depth. */ + min = SYNCTEX_VERT(node); + max = min + SYNCTEX_ABS_DEPTH(node); + min -= SYNCTEX_ABS_HEIGHT(node); + /* We allways have min <= max */ + if (hitPoint.v 0 */ + } else if (hitPoint.v>max) { + return max - hitPoint.v; /* regions 7+8+9, result is < 0 */ + } else { + return 0; /* regions 4.5.6, inside the box, except for horizontal coordinates */ + } + break; + case synctex_node_type_kern: + case synctex_node_type_glue: + case synctex_node_type_math: + return SYNCTEX_VERT(node) - hitPoint.v; + } + } + return INT_MAX;/* We always assume that the node is faraway to the top*/ +} + +SYNCTEX_INLINE static synctex_node_t _synctex_smallest_container(synctex_node_t node, synctex_node_t other_node) { + float height, other_height; + if (SYNCTEX_ABS_WIDTH(node)SYNCTEX_ABS_WIDTH(other_node)) { + return other_node; + } + height = SYNCTEX_ABS_DEPTH(node) + SYNCTEX_ABS_HEIGHT(node); + other_height = SYNCTEX_ABS_DEPTH(other_node) + SYNCTEX_ABS_HEIGHT(other_node); + if (heightother_height) { + return other_node; + } + return node; +} + +synctex_bool_t _synctex_point_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) { + if (node) { + if (0 == _synctex_point_h_distance(hitPoint,node,visible) + && 0 == _synctex_point_v_distance(hitPoint,node,visible)) { + return synctex_YES; + } + } + return synctex_NO; +} + +int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) { +# ifdef __DARWIN_UNIX03 +# pragma unused(visible) +# endif + int result = INT_MAX; /* when the distance is meaning less (sheet, input...) */ + if (node) { + int minH,maxH,minV,maxV; + switch(node->class->type) { + /* The distance between a point and a box is special. + * It is not the euclidian distance, nor something similar. + * We have to take into account the particular layout, + * and the box hierarchy. + * Given a box, there are 9 regions delimited by the lines of the edges of the box. + * The origin being at the top left corner of the page, + * we also give names to the vertices of the box. + * + * 1 | 2 | 3 + * ---A---B---> + * 4 | 5 | 6 + * ---C---D---> + * 7 | 8 | 9 + * v v + * In each region, there is a different formula. + * In the end we have a continuous distance which may not be a mathematical distance but who cares. */ + case synctex_node_type_vbox: + case synctex_node_type_void_vbox: + case synctex_node_type_hbox: + case synctex_node_type_void_hbox: + /* getting the box bounds, taking into account negative widths. */ + minH = SYNCTEX_HORIZ(node); + maxH = minH + SYNCTEX_ABS_WIDTH(node); + minV = SYNCTEX_VERT(node); + maxV = minV + SYNCTEX_ABS_DEPTH(node); + minV -= SYNCTEX_ABS_HEIGHT(node); + /* In what region is the point hitPoint=(H,V) ? */ + if (hitPoint.vminV) { + result = hitPoint.v - minV + minH - hitPoint.h; + } else { + result = minV - hitPoint.v + minH - hitPoint.h; + } + } else if (hitPoint.h>maxH) { + if (hitPoint.v>minV) { + result = hitPoint.v - minV + hitPoint.h - maxH; + } else { + result = minV - hitPoint.v + hitPoint.h - maxH; + } + } else if (hitPoint.v>minV) { + result = hitPoint.v - minV; + } else { + result = minV - hitPoint.v; + } + break; + case synctex_node_type_glue: + case synctex_node_type_math: + minH = SYNCTEX_HORIZ(node); + minV = SYNCTEX_VERT(node); + if (hitPoint.hminV) { + result = hitPoint.v - minV + minH - hitPoint.h; + } else { + result = minV - hitPoint.v + minH - hitPoint.h; + } + } else if (hitPoint.v>minV) { + result = hitPoint.v - minV + hitPoint.h - minH; + } else { + result = minV - hitPoint.v + hitPoint.h - minH; + } + break; + } + } + return result; +} + +static synctex_node_t _synctex_eq_deepest_container(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) { + if (node) { + synctex_node_t result = NULL; + synctex_node_t child = NULL; + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_hbox: + /* test the deep nodes first */ + if ((child = SYNCTEX_CHILD(node))) { + do { + if ((result = _synctex_eq_deepest_container(hitPoint,child,visible))) { + return result; + } + } while((child = SYNCTEX_SIBLING(child))); + } + /* is the hit point inside the box? */ + if (_synctex_point_in_box(hitPoint,node,visible)) { + /* for vboxes we try to use some node inside. + * Walk through the list of siblings until we find the closest one. + * Only consider siblings with children. */ + if ((node->class->type == synctex_node_type_vbox) && (child = SYNCTEX_CHILD(node))) { + int bestDistance = INT_MAX; + do { + if (SYNCTEX_CHILD(child)) { + int distance = _synctex_node_distance_to_point(hitPoint,child,visible); + if (distance < bestDistance) { + bestDistance = distance; + node = child; + } + } + } while((child = SYNCTEX_SIBLING(child))); + } + return node; + } + } + } + return NULL; +} + +/* Compares the locations of the hitPoint with the locations of the various nodes contained in the box. + * As it is an horizontal box, we only compare horizontal coordinates. */ +SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef, synctex_bool_t visible); +SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef, synctex_bool_t visible) { + int result = 0; + if ((node = SYNCTEX_CHILD(node))) { + do { + int off7 = _synctex_point_h_distance(hitPoint,node,visible); + if (off7 > 0) { + /* node is to the right of the hit point. + * We compare node and the previously recorded one, through the recorded distance. + * If the nodes have the same tag, prefer the one with the smallest line number, + * if the nodes also have the same line number, prefer the one with the smallest column. */ + if (bestDistancesRef->right > off7) { + bestDistancesRef->right = off7; + bestNodesRef->right = node; + result |= SYNCTEX_MASK_RIGHT; + } else if (bestDistancesRef->right == off7 && bestNodesRef->right) { + if (SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node) + && (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node) + || (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node) + && SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) { + bestNodesRef->right = node; + result |= SYNCTEX_MASK_RIGHT; + } + } + } else if (off7 == 0) { + /* hitPoint is inside node. */ + bestDistancesRef->left = bestDistancesRef->right = 0; + bestNodesRef->left = node; + bestNodesRef->right = NULL; + result |= SYNCTEX_MASK_LEFT; + } else { /* here off7 < 0, hitPoint is to the right of node */ + off7 = -off7; + if (bestDistancesRef->left > off7) { + bestDistancesRef->left = off7; + bestNodesRef->left = node; + result |= SYNCTEX_MASK_LEFT; + } else if (bestDistancesRef->left == off7 && bestNodesRef->left) { + if (SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node) + && (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node) + || (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node) + && SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) { + bestNodesRef->left = node; + result |= SYNCTEX_MASK_LEFT; + } + } + } + } while((node = SYNCTEX_SIBLING(node))); + if (result & SYNCTEX_MASK_LEFT) { + /* the left node is new, try to narrow the result */ + if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) { + bestNodesRef->left = node; + } + if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) { + bestNodesRef->left = node; + } + } + if (result & SYNCTEX_MASK_RIGHT) { + /* the right node is new, try to narrow the result */ + if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) { + bestNodesRef->right = node; + } + if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) { + bestNodesRef->right = node; + } + } + } + return result; +} +SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible); +SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible) { + int result = 0; + if ((node = SYNCTEX_CHILD(node))) { + do { + int off7 = _synctex_point_v_distance(hitPoint,node,visible);/* this is what makes the difference with the h version above */ + if (off7 > 0) { + /* node is to the top of the hit point (below because TeX is oriented from top to bottom. + * We compare node and the previously recorded one, through the recorded distance. + * If the nodes have the same tag, prefer the one with the smallest line number, + * if the nodes also have the same line number, prefer the one with the smallest column. */ + if (bestDistancesRef->right > off7) { + bestDistancesRef->right = off7; + bestNodesRef->right = node; + result |= SYNCTEX_MASK_RIGHT; + } else if (bestDistancesRef->right == off7 && bestNodesRef->right) { + if (SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node) + && (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node) + || (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node) + && SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) { + bestNodesRef->right = node; + result |= SYNCTEX_MASK_RIGHT; + } + } + } else if (off7 == 0) { + bestDistancesRef->left = bestDistancesRef->right = 0; + bestNodesRef->left = node; + bestNodesRef->right = NULL; + result |= SYNCTEX_MASK_LEFT; + } else { /* here off7 < 0 */ + off7 = -off7; + if (bestDistancesRef->left > off7) { + bestDistancesRef->left = off7; + bestNodesRef->left = node; + result |= SYNCTEX_MASK_LEFT; + } else if (bestDistancesRef->left == off7 && bestNodesRef->left) { + if (SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node) + && (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node) + || (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node) + && SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) { + bestNodesRef->left = node; + result |= SYNCTEX_MASK_LEFT; + } + } + } + } while((node = SYNCTEX_SIBLING(node))); + if (result & SYNCTEX_MASK_LEFT) { + /* the left node is new, try to narrow the result */ + if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) { + bestNodesRef->left = node; + } + if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) { + bestNodesRef->left = node; + } + } + if (result & SYNCTEX_MASK_RIGHT) { + /* the right node is new, try to narrow the result */ + if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) { + bestNodesRef->right = node; + } + if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) { + bestNodesRef->right = node; + } + } + } + return result; +} +SYNCTEX_INLINE static int _synctex_eq_get_closest_children_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible) { + if (node) { + switch(node->class->type) { + case synctex_node_type_hbox: + return __synctex_eq_get_closest_children_in_hbox(hitPoint, node, bestNodesRef, bestDistancesRef,visible); + case synctex_node_type_vbox: + return __synctex_eq_get_closest_children_in_vbox(hitPoint, node, bestNodesRef, bestDistancesRef,visible); + } + } + return 0; +} + +SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int* distanceRef, synctex_bool_t visible); +SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int* distanceRef, synctex_bool_t visible) { + synctex_node_t best_node = NULL; + if ((node = SYNCTEX_CHILD(node))) { + do { + int distance = _synctex_node_distance_to_point(hitPoint,node,visible); + synctex_node_t candidate = NULL; + if (distance<=*distanceRef) { + *distanceRef = distance; + best_node = node; + } + switch(node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_hbox: + if ((candidate = __synctex_eq_closest_child(hitPoint,node,distanceRef,visible))) { + best_node = candidate; + } + } + } while((node = SYNCTEX_SIBLING(node))); + } + return best_node; +} +SYNCTEX_INLINE static synctex_node_t _synctex_eq_closest_child(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) { + if (node) { + switch(node->class->type) { + case synctex_node_type_hbox: + case synctex_node_type_vbox: + { + int best_distance = INT_MAX; + synctex_node_t best_node = __synctex_eq_closest_child(hitPoint,node,&best_distance,visible); + if ((best_node)) { + synctex_node_t child = NULL; + switch(best_node->class->type) { + case synctex_node_type_vbox: + case synctex_node_type_hbox: + if ((child = SYNCTEX_CHILD(best_node))) { + best_distance = _synctex_node_distance_to_point(hitPoint,child,visible); + while((child = SYNCTEX_SIBLING(child))) { + int distance = _synctex_node_distance_to_point(hitPoint,child,visible); + if (distance<=best_distance) { + best_distance = distance; + best_node = child; + } + } + } + } + } + return best_node; + } + } + } + return NULL; +} + +# ifdef SYNCTEX_NOTHING +# pragma mark - +# pragma mark Updater +# endif + +typedef int (*synctex_fprintf_t)(void *, const char * , ...); /* print formatted to either FILE * or gzFile */ + +# define SYNCTEX_BITS_PER_BYTE 8 + +struct __synctex_updater_t { + gzFile file; /* the foo.synctex or foo.synctex.gz I/O identifier */ + synctex_fprintf_t fprintf; /* either fprintf or gzprintf */ + int length; /* the number of chars appended */ + struct _flags { + unsigned int no_gz:1; /* Whether zlib is used or not */ + unsigned int reserved:SYNCTEX_BITS_PER_BYTE*sizeof(int)-1; /* Align */ + } flags; +}; +# define SYNCTEX_FILE updater->file +# define SYNCTEX_NO_GZ ((updater->flags).no_gz) +# define SYNCTEX_fprintf (*(updater->fprintf)) + +synctex_updater_t synctex_updater_new_with_output_file(const char * output, const char * build_directory) { + synctex_updater_t updater = NULL; + char * synctex = NULL; + synctex_io_mode_t io_mode = 0; + const char * mode = NULL; + /* prepare the updater, the memory is the only one dynamically allocated */ + updater = (synctex_updater_t)_synctex_malloc(sizeof(synctex_updater_t)); + if (NULL == updater) { + _synctex_error("! synctex_updater_new_with_file: malloc problem"); + return NULL; + } + if (_synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_ADD_QUOTES,&io_mode) + && _synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_DONT_ADD_QUOTES,&io_mode)) { +return_on_error: + free(updater); + updater = NULL; + return NULL; + } + /* OK, the file exists, we close it and reopen it with the correct mode. + * The receiver is now the owner of the "synctex" variable. */ + gzclose(SYNCTEX_FILE); + SYNCTEX_FILE = NULL; + SYNCTEX_NO_GZ = (io_mode&synctex_io_gz_mask)?synctex_NO:synctex_YES; + mode = _synctex_get_io_mode_name(io_mode|synctex_io_append_mask);/* either "a" or "ab", depending on the file extension */ + if (SYNCTEX_NO_GZ) { + if (NULL == (SYNCTEX_FILE = (void *)fopen(synctex,mode))) { +no_write_error: + _synctex_error("! synctex_updater_new_with_file: Can't append to %s",synctex); + free(synctex); + goto return_on_error; + } + updater->fprintf = (synctex_fprintf_t)(&fprintf); + } else { + if (NULL == (SYNCTEX_FILE = (void *)gzopen(synctex,mode))) { + goto no_write_error; + } + updater->fprintf = (synctex_fprintf_t)(&gzprintf); + } + printf("SyncTeX: updating %s...",synctex); + free(synctex); + return updater; +} + + +void synctex_updater_append_magnification(synctex_updater_t updater, char * magnification){ + if (NULL==updater) { + return; + } + if (magnification && strlen(magnification)) { + updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Magnification:%s\n",magnification); + } +} + +void synctex_updater_append_x_offset(synctex_updater_t updater, char * x_offset){ + if (NULL==updater) { + return; + } + if (x_offset && strlen(x_offset)) { + updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"X Offset:%s\n",x_offset); + } +} + +void synctex_updater_append_y_offset(synctex_updater_t updater, char * y_offset){ + if (NULL==updater) { + return; + } + if (y_offset && strlen(y_offset)) { + updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Y Offset:%s\n",y_offset); + } +} + +void synctex_updater_free(synctex_updater_t updater){ + if (NULL==updater) { + return; + } + if (updater->length>0) { + SYNCTEX_fprintf(SYNCTEX_FILE,"!%i\n",updater->length); + } + if (SYNCTEX_NO_GZ) { + fclose((FILE *)SYNCTEX_FILE); + } else { + gzclose((gzFile)SYNCTEX_FILE); + } + free(updater); + printf("... done.\n"); + return; +} diff --git a/synctex/synctex_parser.h b/synctex/synctex_parser.h new file mode 100644 index 0000000..2c1911e --- /dev/null +++ b/synctex/synctex_parser.h @@ -0,0 +1,363 @@ +/* +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr + +This file is part of the SyncTeX package. + +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.18 + +See synctex_parser_readme.txt for more details + +License: +-------- +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE + +Except as contained in this notice, the name of the copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the copyright holder. + +Acknowledgments: +---------------- +The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh, +and significant help from XeTeX developer Jonathan Kew + +Nota Bene: +---------- +If you include or use a significant part of the synctex package into a software, +I would appreciate to be listed as contributor and see "SyncTeX" highlighted. + +Version 1 +Thu Jun 19 09:39:21 UTC 2008 + +*/ + +#ifndef __SYNCTEX_PARSER__ +# define __SYNCTEX_PARSER__ + +#ifdef __cplusplus +extern "C" { +#endif + +# define SYNCTEX_VERSION_STRING "1.18" + +/* synctex_node_t is the type for all synctex nodes. + * The synctex file is parsed into a tree of nodes, either sheet, boxes, math nodes... */ +typedef struct _synctex_node * synctex_node_t; + +/* The main synctex object is a scanner + * Its implementation is considered private. + * The basic workflow is + * - create a "synctex scanner" with the contents of a file + * - perform actions on that scanner like display or edit queries + * - free the scanner when the work is done + */ +typedef struct __synctex_scanner_t _synctex_scanner_t; +typedef _synctex_scanner_t * synctex_scanner_t; + +/* This is the designated method to create a new synctex scanner object. + * output is the pdf/dvi/xdv file associated to the synctex file. + * If necessary, it can be the tex file that originated the synctex file + * but this might cause problems if the \jobname has a custom value. + * Despite this method can accept a relative path in practice, + * you should only pass a full path name. + * The path should be encoded by the underlying file system, + * assuming that it is based on 8 bits characters, including UTF8, + * not 16 bits nor 32 bits. + * The last file extension is removed and replaced by the proper extension. + * Then the private method _synctex_scanner_new_with_contents_of_file is called. + * NULL is returned in case of an error or non existent file. + * Once you have a scanner, use the synctex_display_query and synctex_edit_query below. + * The new "build_directory" argument is available since version 1.5. + * It is the directory where all the auxiliary stuff is created. + * Sometimes, the synctex output file and the pdf, dvi or xdv files are not created in the same directory. + * This is the case in MikTeX (I will include this into TeX Live). + * This directory path can be nil, it will be ignored then. + * It can be either absolute or relative to the directory of the output pdf (dvi or xdv) file. + * If no synctex file is found in the same directory as the output file, then we try to find one in the build directory. + * Please note that this new "build_directory" is provided as a convenient argument but should not be used. + * In fact, this is implempented as a work around of a bug in MikTeX where the synctex file does not follow the pdf file. + * The new "parse" argument is available since version 1.5. In general, use 1. + * Use 0 only if you do not want to parse the content but just check the existence. + */ +synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, const char * build_directory, int parse); + +/* This is the designated method to delete a synctex scanner object. + * Frees all the memory, you must call it when you are finished with the scanner. + */ +void synctex_scanner_free(synctex_scanner_t scanner); + +/* Send this message to force the scanner to parse the contents of the synctex output file. + * Nothing is performed if the file was already parsed. + * In each query below, this message is sent, but if you need to access information more directly, + * you must be sure that the parsing did occur. + * Usage: + * if((my_scanner = synctex_scanner_parse(my_scanner))) { + * continue with my_scanner... + * } else { + * there was a problem + * } + */ +synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner); + +/* The main entry points. + * Given the file name, a line and a column number, synctex_display_query returns the number of nodes + * satisfying the contrain. Use code like + * + * if(synctex_display_query(scanner,name,line,column)>0) { + * synctex_node_t node; + * while((node = synctex_next_result(scanner))) { + * // do something with node + * ... + * } + * } + * + * For example, one can + * - highlight each resulting node in the output, using synctex_node_h and synctex_node_v + * - highlight all the rectangles enclosing those nodes, using synctex_box_... functions + * - highlight just the character using that information + * + * Given the page and the position in the page, synctex_edit_query returns the number of nodes + * satisfying the contrain. Use code like + * + * if(synctex_edit_query(scanner,page,h,v)>0) { + * synctex_node_t node; + * while(node = synctex_next_result(scanner)) { + * // do something with node + * ... + * } + * } + * + * For example, one can + * - highlight each resulting line in the input, + * - highlight just the character using that information + * + * page is 1 based + * h and v are coordinates in 72 dpi unit, relative to the top left corner of the page. + * If you make a new query, the result of the previous one is discarded. + * If one of this function returns a non positive integer, + * it means that an error occurred. + * + * Both methods are conservative, in the sense that matching is weak. + * If the exact column number is not found, there will be an answer with the whole line. + * + * Sumatra-PDF, Skim, iTeXMac2 and Texworks are examples of open source software that use this library. + * You can browse their code for a concrete implementation. + */ +typedef long synctex_status_t; +synctex_status_t synctex_display_query(synctex_scanner_t scanner,const char * name,int line,int column); +synctex_status_t synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v); +synctex_node_t synctex_next_result(synctex_scanner_t scanner); + +/* Display all the information contained in the scanner object. + * If the records are too numerous, only the first ones are displayed. + * This is mainly for informatinal purpose to help developers. + */ +void synctex_scanner_display(synctex_scanner_t scanner); + +/* The x and y offset of the origin in TeX coordinates. The magnification + These are used by pdf viewers that want to display the real box size. + For example, getting the horizontal coordinates of a node would require + synctex_node_box_h(node)*synctex_scanner_magnification(scanner)+synctex_scanner_x_offset(scanner) + Getting its TeX width would simply require + synctex_node_box_width(node)*synctex_scanner_magnification(scanner) + but direct methods are available for that below. + */ +int synctex_scanner_x_offset(synctex_scanner_t scanner); +int synctex_scanner_y_offset(synctex_scanner_t scanner); +float synctex_scanner_magnification(synctex_scanner_t scanner); + +/* Managing the input file names. + * Given a tag, synctex_scanner_get_name will return the corresponding file name. + * Conversely, given a file name, synctex_scanner_get_tag will retur, the corresponding tag. + * The file name must be the very same as understood by TeX. + * For example, if you \input myDir/foo.tex, the file name is myDir/foo.tex. + * No automatic path expansion is performed. + * Finally, synctex_scanner_input is the first input node of the scanner. + * To browse all the input node, use a loop like + * + * if((input_node = synctex_scanner_input(scanner))){ + * do { + * blah + * } while((input_node=synctex_node_sibling(input_node))); + * } + * + * The output is the name that was used to create the scanner. + * The synctex is the real name of the synctex file, + * it was obtained from output by setting the proper file extension. + */ +const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag); +int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name); +synctex_node_t synctex_scanner_input(synctex_scanner_t scanner); +const char * synctex_scanner_get_output(synctex_scanner_t scanner); +const char * synctex_scanner_get_synctex(synctex_scanner_t scanner); + +/* Browsing the nodes + * parent, child and sibling are standard names for tree nodes. + * The parent is one level higher, the child is one level deeper, + * and the sibling is at the same level. + * The sheet of a node is the first ancestor, it is of type sheet. + * A node and its sibling have the same parent. + * A node is the parent of its child. + * A node is either the child of its parent, + * or belongs to the sibling chain of its parent's child. + * The next node is either the child, the sibling or the parent's sibling, + * unless the parent is a sheet. + * This allows to navigate through all the nodes of a given sheet node: + * + * synctex_node_t node = sheet; + * while((node = synctex_node_next(node))) { + * // do something with node + * } + * + * With synctex_sheet_content, you can retrieve the sheet node given the page. + * The page is 1 based, according to TeX standards. + * Conversely synctex_node_sheet allows to retrieve the sheet containing a given node. + */ +synctex_node_t synctex_node_parent(synctex_node_t node); +synctex_node_t synctex_node_sheet(synctex_node_t node); +synctex_node_t synctex_node_child(synctex_node_t node); +synctex_node_t synctex_node_sibling(synctex_node_t node); +synctex_node_t synctex_node_next(synctex_node_t node); +synctex_node_t synctex_sheet(synctex_scanner_t scanner,int page); +synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page); + +/* These are the types of the synctex nodes */ +typedef enum { + synctex_node_type_error = 0, + synctex_node_type_input, + synctex_node_type_sheet, + synctex_node_type_vbox, + synctex_node_type_void_vbox, + synctex_node_type_hbox, + synctex_node_type_void_hbox, + synctex_node_type_kern, + synctex_node_type_glue, + synctex_node_type_math, + synctex_node_type_boundary, + synctex_node_number_of_types +} synctex_node_type_t; + +/* synctex_node_type gives the type of a given node, + * synctex_node_isa gives the same information as a human readable text. */ +synctex_node_type_t synctex_node_type(synctex_node_t node); +const char * synctex_node_isa(synctex_node_t node); + +/* This is primarily used for debugging purpose. + * The second one logs information for the node and recursively displays information for its next node */ +void synctex_node_log(synctex_node_t node); +void synctex_node_display(synctex_node_t node); + +/* Given a node, access to the location in the synctex file where it is defined. + */ +typedef unsigned int synctex_charindex_t; +synctex_charindex_t synctex_node_charindex(synctex_node_t node); + +/* Given a node, access to its tag, line and column. + * The line and column numbers are 1 based. + * The latter is not yet fully supported in TeX, the default implementation returns 0 which means the whole line. + * When the tag is known, the scanner of the node will give the corresponding file name. + * When the tag is known, the scanner of the node will give the name. + */ +int synctex_node_tag(synctex_node_t node); +int synctex_node_line(synctex_node_t node); +int synctex_node_column(synctex_node_t node); + +/* In order to enhance forward synchronization, + * non void horizontal boxes have supplemental cached information. + * The mean line is the average of the line numbers of the included nodes. + * The child count is the number of chidren. + */ +int synctex_node_mean_line(synctex_node_t node); +int synctex_node_child_count(synctex_node_t node); + +/* This is the page where the node appears. + * This is a 1 based index as given by TeX. + */ +int synctex_node_page(synctex_node_t node); + +/* For quite all nodes, horizontal, vertical coordinates, and width. + * These are expressed in TeX small points coordinates, with origin at the top left corner. + */ +int synctex_node_h(synctex_node_t node); +int synctex_node_v(synctex_node_t node); +int synctex_node_width(synctex_node_t node); + +/* For all nodes, dimensions of the enclosing box. + * These are expressed in TeX small points coordinates, with origin at the top left corner. + * A box is enclosing itself. + */ +int synctex_node_box_h(synctex_node_t node); +int synctex_node_box_v(synctex_node_t node); +int synctex_node_box_width(synctex_node_t node); +int synctex_node_box_height(synctex_node_t node); +int synctex_node_box_depth(synctex_node_t node); + +/* For quite all nodes, horizontal, vertical coordinates, and width. + * The visible dimensions are bigger than real ones to compensate 0 width boxes + * that do contain nodes. + * These are expressed in page coordinates, with origin at the top left corner. + * A box is enclosing itself. + */ +float synctex_node_visible_h(synctex_node_t node); +float synctex_node_visible_v(synctex_node_t node); +float synctex_node_visible_width(synctex_node_t node); +/* For all nodes, visible dimensions of the enclosing box. + * A box is enclosing itself. + * The visible dimensions are bigger than real ones to compensate 0 width boxes + * that do contain nodes. + */ +float synctex_node_box_visible_h(synctex_node_t node); +float synctex_node_box_visible_v(synctex_node_t node); +float synctex_node_box_visible_width(synctex_node_t node); +float synctex_node_box_visible_height(synctex_node_t node); +float synctex_node_box_visible_depth(synctex_node_t node); + +/* The main synctex updater object. + * This object is used to append information to the synctex file. + * Its implementation is considered private. + * It is used by the synctex command line tool to take into account modifications + * that could occur while postprocessing files by dvipdf like filters. + */ +typedef struct __synctex_updater_t _synctex_updater_t; +typedef _synctex_updater_t * synctex_updater_t; + +/* Designated initializer. + * Once you are done with your whole job, + * free the updater */ +synctex_updater_t synctex_updater_new_with_output_file(const char * output, const char * directory); + +/* Use the next functions to append records to the synctex file, + * no consistency tests made on the arguments */ +void synctex_updater_append_magnification(synctex_updater_t updater, char * magnification); +void synctex_updater_append_x_offset(synctex_updater_t updater, char * x_offset); +void synctex_updater_append_y_offset(synctex_updater_t updater, char * y_offset); + +/* You MUST free the updater, once everything is properly appended */ +void synctex_updater_free(synctex_updater_t updater); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/synctex/synctex_parser_local.h b/synctex/synctex_parser_local.h new file mode 100644 index 0000000..89fd136 --- /dev/null +++ b/synctex/synctex_parser_local.h @@ -0,0 +1,45 @@ +/* +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr + +This file is part of the SyncTeX package. + +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.18 + +See synctex_parser_readme.txt for more details + +License: +-------- +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE + +Except as contained in this notice, the name of the copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the copyright holder. + +*/ + +/* This local header file is for TEXLIVE, use your own header to fit your system */ +# include /* for inline && HAVE_xxx */ +/* No inlining for synctex tool in texlive. */ +# define SYNCTEX_INLINE diff --git a/synctex/synctex_parser_readme.txt b/synctex/synctex_parser_readme.txt new file mode 100644 index 0000000..0243f53 --- /dev/null +++ b/synctex/synctex_parser_readme.txt @@ -0,0 +1,182 @@ +This file is part of the SyncTeX package. + +The Synchronization TeXnology named SyncTeX is a new feature +of recent TeX engines designed by Jerome Laurens. +It allows to synchronize between input and output, which means to +navigate from the source document to the typeset material and vice versa. +More informations on http://itexmac2.sourceforge.net/SyncTeX.html + +This package is mainly for developers, it mainly contains the following files: + +synctex_parser_readme.txt +synctex_parser_version.txt +synctex_parser_utils.c +synctex_parser_utils.h +synctex_parser_local.h +synctex_parser.h +synctex_parser.c + +The file you are reading contains more informations about the SyncTeX parser history. + +In order to support SyncTeX in a viewer, it is sufficient to include +in the source the files synctex_parser.h and synctex_parser.c. +The synctex parser usage is described in synctex_parser.h header file. + +The other files are used by tex engines or by the synctex command line utility: + +ChangeLog +README.txt +am +man1 +man5 +synctex-common.h +synctex-convert.sh +synctex-e-mem.ch0 +synctex-e-mem.ch1 +synctex-e-rec.ch0 +synctex-e-rec.ch1 +synctex-etex.h +synctex-mem.ch0 +synctex-mem.ch1 +synctex-mem.ch2 +synctex-pdf-rec.ch2 +synctex-pdftex.h +synctex-rec.ch0 +synctex-rec.ch1 +synctex-rec.ch2 +synctex-tex.h +synctex-xe-mem.ch2 +synctex-xe-rec.ch2 +synctex-xe-rec.ch3 +synctex-xetex.h +synctex.c +synctex.defines +synctex.h +synctex_main.c +tests + + +Version: +-------- +This is version 1, which refers to the synctex output file format. +The files are identified by a build number. +In order to help developers to automatically manage the version and build numbers +and download the parser only when necessary, the synctex_parser.version +is an ASCII text file just containing the current version and build numbers. + +History: +-------- +1.1: Thu Jul 17 09:28:13 UTC 2008 +- First official version available in TeXLive 2008 DVD. + Unfortunately, the backwards synchronization is not working properly mainly for ConTeXt users, see below. +1.2: Tue Sep 2 10:28:32 UTC 2008 +- Correction for ConTeXt support in the edit query. + The previous method was assuming that TeX boxes do not overlap, + which is reasonable for LaTeX but not for ConTeXt. + This assumption is no longer considered. +1.3: Fri Sep 5 09:39:57 UTC 2008 +- Local variable "read" renamed to "already_read" to avoid conflicts. +- "inline" compiler directive renamed to "SYNCTEX_INLINE" for code support and maintenance +- _synctex_error cannot be inlined due to variable arguments (thanks Christiaan Hofman) +- Correction in the display query, extra boundary nodes are used for a more precise forwards synchronization +1.4: Fri Sep 12 08:12:34 UTC 2008 +- For an unknown reason, the previous version was not the real 1.3 (as used in iTeXMac2 build 747). + As a consequence, a crash was observed. +- Some typos are fixed. +1.6: Mon Nov 3 20:20:02 UTC 2008 +- The bug that prevented synchronization with compressed files on windows has been fixed. +- New interface to allow system specific customization. +- Note that some APIs have changed. +1.8: Mer 8 jul 2009 11:32:38 UTC +Note that version 1.7 was delivered privately. +- bug fix: synctex was causing a memory leak in pdftex and xetex, thus some processing speed degradation +- bug fix: the synctex command line tool was broken when updating a .synctex file +- enhancement: better accuracy of the synchronization process +- enhancement: the pdf output file and the associated .synctex file no longer need to live in the same directory. + The new -d option of the synctex command line tool manages this situation. + This is handy when using something like tex -output-directory=DIR ... +1.9: Wed Nov 4 11:52:35 UTC 2009 +- Various typo fixed +- OutputDebugString replaced by OutputDebugStringA to deliberately disable unicode preprocessing +- New conditional created because OutputDebugStringA is only available since Windows 2K professional +1.10: Sun Jan 10 10:12:32 UTC 2010 +- Bug fix in synctex_parser.c to solve a synchronization problem with amsmath's gather environment. + Concerns the synctex tool. +1.11: Sun Jan 17 09:12:31 UTC 2010 +- Bug fix in synctex_parser.c, function synctex_node_box_visible_v: 'x' replaced by 'y'. + Only 3rd party tools are concerned. +1.12: Mon Jul 19 21:52:10 UTC 2010 +- Bug fix in synctex_parser.c, function __synctex_open: the io_mode was modified even in case of a non zero return, +causing a void .synctex.gz file to be created even if it was not expected. Reported by Marek Kasik concerning a bug on evince. +1.13: Fri Mar 11 07:39:12 UTC 2011 +- Bug fix in synctex_parser.c, better synchronization as suggested by Jan Sundermeyer (near line 3388). +- Stronger code design in synctex_parser_utils.c, function _synctex_get_name (really neutral behavior). + Only 3rd party tools are concerned. +1.14: Fri Apr 15 19:10:57 UTC 2011 +- taking output_directory into account +- Replaced FOPEN_WBIN_MODE by FOPEN_W_MODE when opening the text version of the .synctex file. +- Merging with LuaTeX's version of synctex.c +1.15: Fri Jun 10 14:10:17 UTC 2011 +This concerns the synctex command line tool and 3rd party developers. +TeX and friends are not concerned by these changes. +- Bug fixed in _synctex_get_io_mode_name, sometimes the wrong mode was returned +- Support for LuaTeX convention of './' file prefixing +1.16: Tue Jun 14 08:23:30 UTC 2011 +This concerns the synctex command line tool and 3rd party developers. +TeX and friends are not concerned by these changes. +- Better forward search (thanks Jose Alliste) +- Support for LuaTeX convention of './' file prefixing now for everyone, not only for Windows +1.17: Fri Oct 14 08:15:16 UTC 2011 +This concerns the synctex command line tool and 3rd party developers. +TeX and friends are not concerned by these changes. +- synctex_parser.c: cosmetic changes to enhance code readability +- Better forward synchronization. + The problem occurs for example with LaTeX \item command. + The fact is that this command creates nodes at parse time but these nodes are used only + after the text material of the \item is displayed on the page. The consequence is that sometimes, + forward synchronization spots an irrelevant point from the point of view of the editing process. + This was due to some very basic filtering policy, where a somehow arbitrary choice was made when + many different possibilities where offered for synchronisation. + Now, forward synchronization prefers nodes inside an hbox with as many acceptable spots as possible. + This is achieved with the notion of mean line and node weight. +- Adding support for the new file naming convention with './' + + function synctex_ignore_leading_dot_slash_in_path replaces synctex_ignore_leading_dot_slash + + function _synctex_is_equivalent_file_name is more permissive + Previously, the function synctex_scanner_get_tag would give an answer only when + the given file name was EXACTLY one of the file names listed in the synctex file. + The we added some changes accepting for example 'foo.tex' instead of './foo.tex'. + Now we have an even looser policy for dealing with file names. + If the given file name does not match exactly one the file names of the synctex file, + then we try to match the base names. If there is only one match of the base names, + then it is taken as a match for the whole names. + The base name is defined as following: + ./foo => foo + /my///.////foo => foo + /foo => /foo + /my//.foo => /my//.foo +1.17: Tue Mar 13 10:10:03 UTC 2012 +- minor changes, no version changes +- syntax man pages are fixed as suggested by M. Shimata + see mail to tex-live@tug.org titled "syntax.5 has many warnings from groff" and "syntax.1 use invalid macro for mdoc" +1.17: Tue Jan 14 09:55:00 UTC 2014 +- fixed a segfault, from Sebastian Ramacher +1.17: Mon Aug 04 +- fixed a memory leak +1.18: Thu Jun 25 11:36:05 UTC 2015 +- nested sheets now fully supported (does it make sense in TeX) +- cosmetic changes: uniform indentation +- suppression of warnings, mainly long/int ones. In short, zlib likes ints when size_t likes longs. +- CLI synctex tool can build out of TeXLive (modulo appropriate options passed to the compiler) + +Acknowledgments: +---------------- +The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh, +and significant help from XeTeX developer Jonathan Kew + +Nota Bene: +---------- +If you include or use a significant part of the synctex package into a software, +I would appreciate to be listed as contributor and see "SyncTeX" highlighted. + +Copyright (c) 2008-2014 jerome DOT laurens AT u-bourgogne DOT fr + diff --git a/synctex/synctex_parser_utils.c b/synctex/synctex_parser_utils.c new file mode 100644 index 0000000..0e9fd0e --- /dev/null +++ b/synctex/synctex_parser_utils.c @@ -0,0 +1,512 @@ +/* +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr + +This file is part of the SyncTeX package. + +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.18 + +See synctex_parser_readme.txt for more details + +License: +-------- +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE + +Except as contained in this notice, the name of the copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the copyright holder. + +*/ + +/* In this file, we find all the functions that may depend on the operating system. */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#if defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__) +#define SYNCTEX_WINDOWS 1 +#endif + +#if defined(__OS2__) +#define SYNCTEX_OS2 1 +#endif + +#ifdef _WIN32_WINNT_WINXP +#define SYNCTEX_RECENT_WINDOWS 1 +#endif + +#ifdef SYNCTEX_WINDOWS +#include +#include /* Use shlwapi.lib */ +#endif + +void *_synctex_malloc(size_t size) { + void * ptr = malloc(size); + if(ptr) { +/* There used to be a switch to use bzero because it is more secure. JL */ + memset(ptr,0, size); + } + return (void *)ptr; +} + +int _synctex_error(const char * reason,...) { + va_list arg; + int result; + va_start (arg, reason); +# ifdef SYNCTEX_RECENT_WINDOWS + {/* This code is contributed by William Blum. + As it does not work on some older computers, + the _WIN32 conditional here is replaced with a SYNCTEX_RECENT_WINDOWS one. + According to http://msdn.microsoft.com/en-us/library/aa363362(VS.85).aspx + Minimum supported client Windows 2000 Professional + Minimum supported server Windows 2000 Server + People running Windows 2K standard edition will not have OutputDebugStringA. + JL.*/ + char *buff; + size_t len; + OutputDebugStringA("SyncTeX ERROR: "); + len = _vscprintf(reason, arg) + 1; + buff = (char*)malloc( len * sizeof(char) ); + result = vsprintf(buff, reason, arg) +strlen("SyncTeX ERROR: "); + OutputDebugStringA(buff); + OutputDebugStringA("\n"); + free(buff); + } +# else + result = fprintf(stderr,"SyncTeX ERROR: "); + result += vfprintf(stderr, reason, arg); + result += fprintf(stderr,"\n"); +# endif + va_end (arg); + return result; +} + +/* strip the last extension of the given string, this string is modified! */ +void _synctex_strip_last_path_extension(char * string) { + if(NULL != string){ + char * last_component = NULL; + char * last_extension = NULL; +# if defined(SYNCTEX_WINDOWS) + last_component = PathFindFileName(string); + last_extension = PathFindExtension(string); + if(last_extension == NULL)return; + if(last_component == NULL)last_component = string; + if(last_extension>last_component){/* filter out paths like "my/dir/.hidden" */ + last_extension[0] = '\0'; + } +# else + char * next = NULL; + /* first we find the last path component */ + if(NULL == (last_component = strstr(string,"/"))){ + last_component = string; + } else { + ++last_component; + while((next = strstr(last_component,"/"))){ + last_component = next+1; + } + } +# if defined(SYNCTEX_OS2) + /* On OS2, the '\' is also a path separator. */ + while((next = strstr(last_component,"\\"))){ + last_component = next+1; + } +# endif /* SYNCTEX_OS2 */ + /* then we find the last path extension */ + if((last_extension = strstr(last_component,"."))){ + ++last_extension; + while((next = strstr(last_extension,"."))){ + last_extension = next+1; + } + --last_extension;/* back to the "." */ + if(last_extension>last_component){/* filter out paths like ....my/dir/.hidden"*/ + last_extension[0] = '\0'; + } + } +# endif /* SYNCTEX_WINDOWS */ + } +} + +synctex_bool_t synctex_ignore_leading_dot_slash_in_path(const char ** name_ref) +{ + if (SYNCTEX_IS_DOT((*name_ref)[0]) && SYNCTEX_IS_PATH_SEPARATOR((*name_ref)[1])) { + do { + (*name_ref) += 2; + while (SYNCTEX_IS_PATH_SEPARATOR((*name_ref)[0])) { + ++(*name_ref); + } + } while(SYNCTEX_IS_DOT((*name_ref)[0]) && SYNCTEX_IS_PATH_SEPARATOR((*name_ref)[1])); + return synctex_YES; + } + return synctex_NO; +} + +/* The base name is necessary to deal with the 2011 file naming convention... + * path is a '\0' terminated string + * The return value is the trailing part of the argument, + * just following the first occurrence of the regexp pattern "[^|/|\].[\|/]+".*/ +const char * _synctex_base_name(const char *path) { + const char * ptr = path; + do { + if (synctex_ignore_leading_dot_slash_in_path(&ptr)) { + return ptr; + } + do { + if (!*(++ptr)) { + return path; + } + } while (!SYNCTEX_IS_PATH_SEPARATOR(*ptr)); + } while (*(++ptr)); + return path; +} + +/* Compare two file names, windows is sometimes case insensitive... */ +synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs) { + /* Remove the leading regex '(\./+)*' in both rhs and lhs */ + synctex_ignore_leading_dot_slash_in_path(&lhs); + synctex_ignore_leading_dot_slash_in_path(&rhs); +next_character: + if (SYNCTEX_IS_PATH_SEPARATOR(*lhs)) {/* lhs points to a path separator */ + if (!SYNCTEX_IS_PATH_SEPARATOR(*rhs)) {/* but not rhs */ + return synctex_NO; + } + ++lhs; + ++rhs; + synctex_ignore_leading_dot_slash_in_path(&lhs); + synctex_ignore_leading_dot_slash_in_path(&rhs); + goto next_character; + } else if (SYNCTEX_IS_PATH_SEPARATOR(*rhs)) {/* rhs points to a path separator but not lhs */ + return synctex_NO; + } else if (SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(*lhs,*rhs)){/* uppercase do not match */ + return synctex_NO; + } else if (!*lhs) {/* lhs is at the end of the string */ + return *rhs ? synctex_NO : synctex_YES; + } else if(!*rhs) {/* rhs is at the end of the string but not lhs */ + return synctex_NO; + } + ++lhs; + ++rhs; + goto next_character; +} + +synctex_bool_t _synctex_path_is_absolute(const char * name) { + if(!strlen(name)) { + return synctex_NO; + } +# if defined(SYNCTEX_WINDOWS) || defined(SYNCTEX_OS2) + if(strlen(name)>2) { + return (name[1]==':' && SYNCTEX_IS_PATH_SEPARATOR(name[2]))?synctex_YES:synctex_NO; + } + return synctex_NO; +# else + return SYNCTEX_IS_PATH_SEPARATOR(name[0])?synctex_YES:synctex_NO; +# endif +} + +/* We do not take care of UTF-8 */ +const char * _synctex_last_path_component(const char * name) { + const char * c = name+strlen(name); + if(c>name) { + if(!SYNCTEX_IS_PATH_SEPARATOR(*c)) { + do { + --c; + if(SYNCTEX_IS_PATH_SEPARATOR(*c)) { + return c+1; + } + } while(c>name); + } + return c;/* the last path component is the void string*/ + } + return c; +} + +int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size) { + const char * lpc; + if(src && dest_ref) { +# define dest (*dest_ref) + dest = NULL; /* Default behavior: no change and sucess. */ + lpc = _synctex_last_path_component(src); + if(strlen(lpc)) { + if(strchr(lpc,' ') && lpc[0]!='"' && lpc[strlen(lpc)-1]!='"') { + /* We are in the situation where adding the quotes is allowed. */ + /* Time to add the quotes. */ + /* Consistency test: we must have dest+size>dest+strlen(dest)+2 + * or equivalently: strlen(dest)+20) { + char * result = NULL; + ++size; + /* Create the memory storage */ + if(NULL!=(result = (char *)malloc(size))) { + char * dest = result; + va_start (arg, first); + temp = first; + do { + if((size = strlen(temp))>0) { + /* There is something to merge */ + if(dest != strncpy(dest,temp,size)) { + _synctex_error("! _synctex_merge_strings: Copy problem"); + free(result); + result = NULL; + return NULL; + } + dest += size; + } + } while( (temp = va_arg(arg, const char *)) != NULL); + va_end(arg); + dest[0]='\0';/* Terminate the merged string */ + return result; + } + _synctex_error("! _synctex_merge_strings: Memory problem"); + return NULL; + } + return NULL; +} + +/* The purpose of _synctex_get_name is to find the name of the synctex file. + * There is a list of possible filenames from which we return the most recent one and try to remove all the others. + * With two runs of pdftex or xetex we are sure the the synctex file is really the most appropriate. + */ +int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_io_mode_t * io_mode_ref) +{ + if(output && synctex_name_ref && io_mode_ref) { + /* If output is already absolute, we just have to manage the quotes and the compress mode */ + size_t size = 0; + char * synctex_name = NULL; + synctex_io_mode_t io_mode = *io_mode_ref; + const char * base_name = _synctex_last_path_component(output); /* do not free, output is the owner. base name of output*/ + /* Do we have a real base name ? */ + if(strlen(base_name)>0) { + /* Yes, we do. */ + const char * temp = NULL; + char * core_name = NULL; /* base name of output without path extension. */ + char * dir_name = NULL; /* dir name of output */ + char * quoted_core_name = NULL; + char * basic_name = NULL; + char * gz_name = NULL; + char * quoted_name = NULL; + char * quoted_gz_name = NULL; + char * build_name = NULL; + char * build_gz_name = NULL; + char * build_quoted_name = NULL; + char * build_quoted_gz_name = NULL; + struct stat buf; + time_t the_time = 0; + /* Create core_name: let temp point to the dot before the path extension of base_name; + * We start form the \0 terminating character and scan the string upward until we find a dot. + * The leading dot is not accepted. */ + if((temp = strrchr(base_name,'.')) && (size = temp - base_name)>0) { + /* There is a dot and it is not at the leading position */ + if(NULL == (core_name = (char *)malloc(size+1))) { + _synctex_error("! _synctex_get_name: Memory problem 1"); + return -1; + } + if(core_name != strncpy(core_name,base_name,size)) { + _synctex_error("! _synctex_get_name: Copy problem 1"); + free(core_name); + dir_name = NULL; + return -2; + } + core_name[size] = '\0'; + } else { + /* There is no path extension, + * Just make a copy of base_name */ + core_name = _synctex_merge_strings(base_name); + } + /* core_name is properly set up, owned by "self". */ + /* creating dir_name. */ + size = strlen(output)-strlen(base_name); + if(size>0) { + /* output contains more than one path component */ + if(NULL == (dir_name = (char *)malloc(size+1))) { + _synctex_error("! _synctex_get_name: Memory problem"); + free(core_name); + dir_name = NULL; + return -1; + } + if(dir_name != strncpy(dir_name,output,size)) { + _synctex_error("! _synctex_get_name: Copy problem"); + free(dir_name); + dir_name = NULL; + free(core_name); + dir_name = NULL; + return -2; + } + dir_name[size] = '\0'; + } + /* dir_name is properly set up. It ends with a path separator, if non void. */ + /* creating quoted_core_name. */ + if(strchr(core_name,' ')) { + quoted_core_name = _synctex_merge_strings("\"",core_name,"\""); + } + /* quoted_core_name is properly set up. */ + if(dir_name &&strlen(dir_name)>0) { + basic_name = _synctex_merge_strings(dir_name,core_name,synctex_suffix,NULL); + if(quoted_core_name && strlen(quoted_core_name)>0) { + quoted_name = _synctex_merge_strings(dir_name,quoted_core_name,synctex_suffix,NULL); + } + } else { + basic_name = _synctex_merge_strings(core_name,synctex_suffix,NULL); + if(quoted_core_name && strlen(quoted_core_name)>0) { + quoted_name = _synctex_merge_strings(quoted_core_name,synctex_suffix,NULL); + } + } + if(!_synctex_path_is_absolute(output) && build_directory && (size = strlen(build_directory))) { + temp = build_directory + size - 1; + if(_synctex_path_is_absolute(temp)) { + build_name = _synctex_merge_strings(build_directory,basic_name,NULL); + if(quoted_core_name && strlen(quoted_core_name)>0) { + build_quoted_name = _synctex_merge_strings(build_directory,quoted_name,NULL); + } + } else { + build_name = _synctex_merge_strings(build_directory,"/",basic_name,NULL); + if(quoted_core_name && strlen(quoted_core_name)>0) { + build_quoted_name = _synctex_merge_strings(build_directory,"/",quoted_name,NULL); + } + } + } + if(basic_name) { + gz_name = _synctex_merge_strings(basic_name,synctex_suffix_gz,NULL); + } + if(quoted_name) { + quoted_gz_name = _synctex_merge_strings(quoted_name,synctex_suffix_gz,NULL); + } + if(build_name) { + build_gz_name = _synctex_merge_strings(build_name,synctex_suffix_gz,NULL); + } + if(build_quoted_name) { + build_quoted_gz_name = _synctex_merge_strings(build_quoted_name,synctex_suffix_gz,NULL); + } + /* All the others names are properly set up... */ + /* retain the most recently modified file */ +# define TEST(FILENAME,COMPRESS_MODE) \ + if(FILENAME) {\ + if (stat(FILENAME, &buf)) { \ + free(FILENAME);\ + FILENAME = NULL;\ + } else if (buf.st_mtime>the_time) { \ + the_time=buf.st_mtime; \ + synctex_name = FILENAME; \ + if (COMPRESS_MODE) { \ + io_mode |= synctex_io_gz_mask; \ + } else { \ + io_mode &= ~synctex_io_gz_mask; \ + } \ + } \ + } + TEST(basic_name,synctex_DONT_COMPRESS); + TEST(gz_name,synctex_COMPRESS); + TEST(quoted_name,synctex_DONT_COMPRESS); + TEST(quoted_gz_name,synctex_COMPRESS); + TEST(build_name,synctex_DONT_COMPRESS); + TEST(build_gz_name,synctex_COMPRESS); + TEST(build_quoted_name,synctex_DONT_COMPRESS); + TEST(build_quoted_gz_name,synctex_COMPRESS); +# undef TEST + /* Free all the intermediate filenames, except the one that will be used as returned value. */ +# define CLEAN_AND_REMOVE(FILENAME) \ + if(FILENAME && (FILENAME!=synctex_name)) {\ + remove(FILENAME);\ + printf("synctex tool info: %s removed\n",FILENAME);\ + free(FILENAME);\ + FILENAME = NULL;\ + } + CLEAN_AND_REMOVE(basic_name); + CLEAN_AND_REMOVE(gz_name); + CLEAN_AND_REMOVE(quoted_name); + CLEAN_AND_REMOVE(quoted_gz_name); + CLEAN_AND_REMOVE(build_name); + CLEAN_AND_REMOVE(build_gz_name); + CLEAN_AND_REMOVE(build_quoted_name); + CLEAN_AND_REMOVE(build_quoted_gz_name); +# undef CLEAN_AND_REMOVE + /* set up the returned values */ + * synctex_name_ref = synctex_name; + * io_mode_ref = io_mode; + return 0; + } + return -1;/* bad argument */ + } + return -2; +} + +const char * _synctex_get_io_mode_name(synctex_io_mode_t io_mode) { + static const char * synctex_io_modes[4] = {"r","rb","a","ab"}; + unsigned index = ((io_mode & synctex_io_gz_mask)?1:0) + ((io_mode & synctex_io_append_mask)?2:0);// bug pointed out by Jose Alliste + return synctex_io_modes[index]; +} diff --git a/synctex/synctex_parser_utils.h b/synctex/synctex_parser_utils.h new file mode 100644 index 0000000..9c76ac5 --- /dev/null +++ b/synctex/synctex_parser_utils.h @@ -0,0 +1,152 @@ +/* +Copyright (c) 2008, 2009, 2010, 2011 jerome DOT laurens AT u-bourgogne DOT fr + +This file is part of the SyncTeX package. + +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.18 + +See synctex_parser_readme.txt for more details + +License: +-------- +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE + +Except as contained in this notice, the name of the copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the copyright holder. + +*/ + +/* The utilities declared here are subject to conditional implementation. + * All the operating system special stuff goes here. + * The problem mainly comes from file name management: path separator, encoding... + */ + +# define synctex_bool_t int +# define synctex_YES -1 +# define synctex_ADD_QUOTES -1 +# define synctex_COMPRESS -1 +# define synctex_NO 0 +# define synctex_DONT_ADD_QUOTES 0 +# define synctex_DONT_COMPRESS 0 + +#ifndef __SYNCTEX_PARSER_UTILS__ +# define __SYNCTEX_PARSER_UTILS__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +# if defined(_WIN32) || defined(__OS2__) +# define SYNCTEX_CASE_SENSITIVE_PATH 0 +# define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c || '\\' == c) +# else +# define SYNCTEX_CASE_SENSITIVE_PATH 1 +# define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c) +# endif + +# if defined(_WIN32) || defined(__OS2__) +# define SYNCTEX_IS_DOT(c) ('.' == c) +# else +# define SYNCTEX_IS_DOT(c) ('.' == c) +# endif + +# if SYNCTEX_CASE_SENSITIVE_PATH +# define SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(left,right) (left != right) +# else +# define SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(left,right) (toupper(left) != toupper(right)) +# endif + +/* This custom malloc functions initializes to 0 the newly allocated memory. + * There is no bzero function on windows. */ +void *_synctex_malloc(size_t size); + +/* This is used to log some informational message to the standard error stream. + * On Windows, the stderr stream is not exposed and another method is used. + * The return value is the number of characters printed. */ +int _synctex_error(const char * reason,...); + +/* strip the last extension of the given string, this string is modified! + * This function depends on the OS because the path separator may differ. + * This should be discussed more precisely. */ +void _synctex_strip_last_path_extension(char * string); + +/* Compare two file names, windows is sometimes case insensitive... + * The given strings may differ stricto sensu, but represent the same file name. + * It might not be the real way of doing things. + * The return value is an undefined non 0 value when the two file names are equivalent. + * It is 0 otherwise. */ +synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs); + +/* Description forthcoming.*/ +synctex_bool_t _synctex_path_is_absolute(const char * name); + +/* Description forthcoming...*/ +const char * _synctex_last_path_component(const char * name); + +/* Description forthcoming...*/ +const char * _synctex_base_name(const char *path); + +/* If the core of the last path component of src is not already enclosed with double quotes ('"') + * and contains a space character (' '), then a new buffer is created, the src is copied and quotes are added. + * In all other cases, no destination buffer is created and the src is not copied. + * 0 on success, which means no error, something non 0 means error, mainly due to memory allocation failure, or bad parameter. + * This is used to fix a bug in the first version of pdftex with synctex (1.40.9) for which names with spaces + * were not managed in a standard way. + * On success, the caller owns the buffer pointed to by dest_ref (is any) and + * is responsible of freeing the memory when done. + * The size argument is the size of the src buffer. On return the dest_ref points to a buffer sized size+2.*/ +int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size); + +/* These are the possible extensions of the synctex file */ +extern const char * synctex_suffix; +extern const char * synctex_suffix_gz; + +typedef unsigned int synctex_io_mode_t; + +typedef enum { + synctex_io_append_mask = 1, + synctex_io_gz_mask = synctex_io_append_mask<<1 +} synctex_io_mode_masks_t; + +typedef enum { + synctex_compress_mode_none = 0, + synctex_compress_mode_gz = 1 +} synctex_compress_mode_t; + +int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_io_mode_t * io_mode_ref); + +/* returns the correct mode required by fopen and gzopen from the given io_mode */ +const char * _synctex_get_io_mode_name(synctex_io_mode_t io_mode); + +synctex_bool_t synctex_ignore_leading_dot_slash_in_path(const char ** name); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/synctex/synctex_parser_version.txt b/synctex/synctex_parser_version.txt new file mode 100644 index 0000000..d907c15 --- /dev/null +++ b/synctex/synctex_parser_version.txt @@ -0,0 +1 @@ +1.18 \ No newline at end of file diff --git a/translations.qrc b/translations.qrc new file mode 100644 index 0000000..7627a38 --- /dev/null +++ b/translations.qrc @@ -0,0 +1,44 @@ + + + translations/qpdfview_ast.qm + translations/qpdfview_az.qm + translations/qpdfview_be.qm + translations/qpdfview_bg.qm + translations/qpdfview_bs.qm + translations/qpdfview_ca.qm + translations/qpdfview_cs.qm + translations/qpdfview_da.qm + translations/qpdfview_de.qm + translations/qpdfview_el.qm + translations/qpdfview_en_GB.qm + translations/qpdfview_eo.qm + translations/qpdfview_es.qm + translations/qpdfview_eu.qm + translations/qpdfview_fi.qm + translations/qpdfview_fr.qm + translations/qpdfview_gl.qm + translations/qpdfview_he.qm + translations/qpdfview_hr.qm + translations/qpdfview_hu.qm + translations/qpdfview_id.qm + translations/qpdfview_it.qm + translations/qpdfview_kk.qm + translations/qpdfview_ky.qm + translations/qpdfview_lt.qm + translations/qpdfview_ms.qm + translations/qpdfview_my.qm + translations/qpdfview_pl.qm + translations/qpdfview_pt_BR.qm + translations/qpdfview_pt.qm + translations/qpdfview_ro.qm + translations/qpdfview_ru.qm + translations/qpdfview_sk.qm + translations/qpdfview_sv.qm + translations/qpdfview_th.qm + translations/qpdfview_tr.qm + translations/qpdfview_ug.qm + translations/qpdfview_uk.qm + translations/qpdfview_vi.qm + translations/qpdfview_zh_CN.qm + + diff --git a/translations/qpdfview_ast.ts b/translations/qpdfview_ast.ts new file mode 100644 index 0000000..4bf12fb --- /dev/null +++ b/translations/qpdfview_ast.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Formatu + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nome + + + + Type + Triba + + + + Embedded + Incrustáu + + + + Subset + Subconxuntu + + + + File + Ficheru + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + Non + + + + Model::PdfPage + + + Information + Información + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Necesitase la versión 2.20 o superior de la biblioteca Poppler p'amestar o desaniciar anotaciones. + + + + Model::PsDocument + + + Title + Títulu + + + + Created for + Creáu pa + + + + Creator + Creador + + + + Creation date + Data de creación + + + + Format + Formatu + + + + Language level + Nivel de llinguax + + + + QObject + + + An empty instance name is not allowed. + Nun se permite un nome d'instancia baleru. + + + + An empty search text is not allowed. + Nun se permite una cadena de gueta balera. + + + + Unknown command-line option '%1'. + Opción de llinia de comandu desconocida «%1». + + + + Using '--instance' requires an instance name. + Pa usar '--instance' fai falta un nome d'instancia. + + + + Using '--instance' is not allowed without using '--unique'. + Nun se permite usar '--instance' ensin usar '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + El nome d'una instancia sólo pue contener los caráuteres «[A-Z][a-z][0-9]_» y nun pue comenzar con un díxitu. + + + + Using '--search' requires a search text. + L'usu de '--search' necesita un testu de gueta. + + + + Could not prepare signal handler. + Nun se pudo preparar el xestor de señales. + + + + QShortcut + + + Shift + Mayús. + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Mayús y Ctrl + + + + Shift and Alt + Mayús y Alt + + + + Ctrl and Alt + Ctrl y Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Dengún + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Páxina: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Abrir + + + + Open in new &tab + Abrir n'otra llingüe&ta + + + + &Remove bookmark + Desanicia&r marcador + + + + qpdfview::Database + + + Jump to page %1 + Saltar a la páxina %1 + + + + qpdfview::DocumentView + + + + Information + Información + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Abrir URLs ta desactivao na configuración. + + + + Warning + Avisu + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Imprentando «%1»... + + + + Unlock %1 + Desbloquiar %1 + + + + Password: + Contraseña: + + + + Page %1 + Páxina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Guardar... + + + + Save and open... + Guardar y abrir... + + + + Save file attachment + Guardar axuntu al ficheru + + + + + Warning + Avisu + + + + Could not open file attachment saved to '%1'. + Nun pudo abrise l'axuntu al ficheru guardáu en '%1'. + + + + Could not save file attachment to '%1'. + Nun pudo guardase l'axuntu al ficheru en '%1'. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Alcontrar anterior + + + + Find next + Alcontrar siguiente + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Avisu + + + + + Could not open '%1'. + Nun se pudo abrir «%1». + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Zarrar toles llingüetes + + + + Close all tabs but this one + Zarrar toles llingüetes menos esta + + + + Close all tabs to the left + Zarrar toles llingüetes de la izquierda + + + + Close all tabs to the right + Zarrar toles llingüetes de la drecha + + + + + Open + Abrir + + + + Open in new tab + Abrir nuna llingüeta nueva + + + + + + Could not refresh '%1'. + Nun se pudo anovar «%1». + + + + Save copy + Guardar una copia + + + + Could not save copy at '%1'. + Nun se pudo guardar una copia en «%1». + + + + Save as + Guardar como + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Nun se pudo guardar como «%1». + + + + Could not print '%1'. + Nun se pudo imprentar «%1». + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Saltar a páxina + + + + Page: + Páxina: + + + + Jump to page %1 + Saltar a la páxina %1 + + + + About qpdfview + Tocante a qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview ye un visor de documentos con llingüetes qu'usa Qt.</p><p>Esta versión incluye:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Camudóse'l documentu «%1». ¿Quier guardar los cambios? + + + + Page width + Anchor de páxina + + + + Page size + Tamañu de páxina + + + + Match &case + Distinguir mayús&cules/minúscules + + + + Whole &words + + + + + Highlight &all + Rescampl&ar too + + + + &Open... + &Abrir... + + + + Open in new &tab... + Abrir en llingüe&ta nueva... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + Anova&r + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Gu&ardar como… + + + + Save &copy... + + + + + &Print... + Im&prentar... + + + + E&xit + Co&lar + + + + &Previous page + &Páxina anterior + + + + &Next page + Páxina siguie&nte + + + + &First page + Pri&mera páxina + + + + &Last page + Ú&ltima páxina + + + + &Set first page... + + + + + &Jump to page... + &Saltar a páxina... + + + + Jump &backward + Saltar &atrás + + + + Jump for&ward + Saltar alan&tre + + + + &Search... + &Guetar + + + + Find previous + Alcontrar anterior + + + + Find next + Alcontrar siguiente + + + + Cancel search + Encaboxar gueta + + + + &Copy to clipboard + &Copiar al cartafueyu + + + + &Add annotation + &Amestar anotación + + + + Settings... + Preferencies... + + + + &Continuous + &Continuu + + + + &Two pages + &Dos páxines + + + + Two pages &with cover page + Dos páxines con por&tada + + + + &Multiple pages + Páxines &múltiples + + + + Right to left + De drecha a izquierda + + + + Zoom &in + A&umentar + + + + Zoom &out + Ame&norgar + + + + Original &size + Tamañu ori&xinal + + + + Fit to page width + Axustar a anchor de páxina + + + + Fit to page size + Axustar a tamañu de páxina + + + + Rotate &left + Xirar a la i&zquierda + + + + Rotate &right + Xirar a la d&recha + + + + Invert colors + Invertir colores + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fontes... + + + + &Fullscreen + &Pantalla completa + + + + &Presentation... + &Presentación... + + + + &Previous tab + Llingüeta an&terior + + + + &Next tab + Llingüeta siguie&nte + + + + &Close tab + &Zarrar llingüeta + + + + Close &all tabs + Z&arrar toles llingüetes + + + + Close all tabs &but current tab + Zarrar toles llingüetes menos la a&bierta + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Marcador an&terior + + + + &Next bookmark + Marcador siguie&nte + + + + &Add bookmark + &Amestar marcador + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Desanicia&r marcador + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Desaniciar tolos marcadores + + + + &Contents + &Conteníu + + + + &About + Tocante &a + + + + + &File + &Ficheru + + + + + &Edit + &Editar + + + + + &View + &Ver + + + + &Outline + C&ontornu + + + + &Properties + &Propiedaes + + + + &Search + &Guetar + + + + &Tool bars + Barres de ferramien&tes + + + + &Docks + &Puertos + + + + &Tabs + Llingüe&tes + + + + &Bookmarks + &Marcadores + + + + &Help + A&yuda + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Dir a páxina %1. + + + + Go to page %1 of file '%2'. + Dir a la páxina %1 del ficheru '%2'. + + + + Open '%1'. + Abrir '%1'. + + + + Edit form field '%1'. + Editar el campu de formulariu «%1». + + + + Copy &text + Copiar &testu + + + + &Select text + + + + + Copy &image + Copiar &imaxe + + + + Save image to &file... + Guardar imaxe en &ficheru + + + + Save image to file + Guardar imaxe en ficheru + + + + Warning + Avisu + + + + Could not save image to file '%1'. + Nun se pudo guardar la imaxe nel ficheru «%1». + + + + Add &text + Amestar &testu + + + + Add &highlight + Amestar &rescampláu + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Desanicia&r anotación + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialias: + + + + Text antialiasing: + Antialias de testu: + + + + + None + Dengún + + + + Full + Completu + + + + Reduced + Reducíu + + + + + Text hinting: + Aproximación tipográfica de testu: + + + + Ignore paper color: + + + + + Overprint preview: + Vista previa de sobreimpresión: + + + + Solid + Sólidu + + + + Shaped + Con forma + + + + Thin line mode: + Mou de llinia fina: + + + + Splash + Pantalla d'aniciu + + + + Arthur + Arthur + + + + Backend: + Infraestructura: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + ¡Nun casa'l tipu de ficheru de '%1'! + + + + Critical + Críticu + + + + Could not load plug-in for file type '%1'! + ¡Nun pudo cargase'l complementu pal tipu de ficheru '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Axustar a la páxina: + + + + Page ranges: + Intervalu de páxines: + + + + All pages + Toles páxines + + + + Even pages + Páxines pares + + + + Odd pages + Páxines impares + + + + Page set: + Conxuntu de páxines: + + + + Single page + Namái una páxina + + + + Two pages + Dos páxines + + + + Four pages + Cuatro páxines + + + + Six pages + Seyes páxines + + + + Nine pages + Nueve páxines + + + + Sixteen pages + Dieciséis páxines + + + + Number-up: + Aumentar númberu: + + + + Bottom to top and left to right + D'abaxo a arriba y d'izquierda a drecha + + + + Bottom to top and right to left + D'abaxo a arriba y de drecha a izquierda + + + + Left to right and bottom to top + D'izquierda a drecha y d'abaxo a arriba + + + + Left to right and top to bottom + D'izquierda a drecha y d'arriba a abaxo + + + + Right to left and bottom to top + De drecha a izquierda y d'abaxo a arriba + + + + Right to left and top to bottom + De drecha a izquierda y d'arriba a abaxo + + + + Top to bottom and left to right + D'arriba a abaxo y d'izquierda a drecha + + + + Top to bottom and right to left + D'arriba a abaxo y de drecha a izquierda + + + + Number-up layout: + Diseñu de numberación: + + + + Extended options + Opciones estendíes + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits del antialias de gráficos: + + + + Text antialias bits: + Bits del antialias de testu: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Recién zarraos + + + + &Clear list + &Llimpiar la llista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &Usaos de recién + + + + &Clear list + &Llimpiar la llista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Xeneral + + + + &Behavior + &Comportamientu + + + + &Graphics + &Gràficos + + + + &Interface + &Interfaz + + + + &Shortcuts + Atayo&s + + + + &Modifiers + &Modificadores + + + + Defaults + Predeterminaos + + + + Defaults on current tab + Predeterminaos de la llingüeta actual + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Abrir URL: + + + + Auto-refresh: + Anovamientu automáticu: + + + + + + + + + + + + Effective after restart. + Efectivu dempués de reaniciar. + + + + Track recently used: + Rastrar usaos de recién: + + + + Keep recently closed: + Caltener recién zarraos: + + + + Restore tabs: + Restaurar llingüetes: + + + + Restore bookmarks: + Restaurar marcadores: + + + + Restore per-file settings: + Restaurar preferencies por ficheru: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sincronizar presentación: + + + + Default + Predetermináu + + + + Presentation screen: + Pantalla de presentación: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Dengún + + + + Highlight duration: + Rescamplar la duración: + + + + Highlight color: + Color de rescampláu: + + + + Annotation color: + Color d'anotación: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' se camudará pol camín absolutu al ficheru. '%2' resp. '%3' se camudará pol númberu de llinia resp. de columna. + + + + Source editor: + Editor de códigu: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + Caltener los mapes de píxeles anticuaos: + + + + Use device pixel ratio: + Usar la tasa de píxeles del preséu: + + + + Decorate pages: + Decorar páxines: + + + + Decorate links: + Decorar enllaces: + + + + Decorate form fields: + Decorar campos del formulariu: + + + + Background color: + Color del fondu: + + + + Paper color: + Color del papel: + + + + Presentation background color: + Color del fondu de la presentación: + + + + Pages per row: + Páxines per filera: + + + + + + px + + + + + Page spacing: + Espaciáu de páxina: + + + + Thumbnail spacing: + Espaciáu de miniatures: + + + + Thumbnail size: + Tamañu de miniatures: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Tamañu de la caché: + + + + Minimal scrolling: + + + + + Prefetch: + Precarga: + + + + Prefetch distance: + Distancia de precarga: + + + + Top + Arriba + + + + Bottom + Abaxo + + + + Left + Izquierda + + + + Right + Drecha + + + + Tab position: + Posición de llingüeta: + + + + As needed + Cuando faiga falta + + + + Always + Siempres + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Nunca + + + + Settings + + + + + Tab visibility: + Visibilidá de la llingüeta: + + + + Spread tabs: + Esparder llingüetes: + + + + New tab next to current tab: + Nueva llingüeta xunto a la actual: + + + + Recently used count: + Cuenta de recién usaos: + + + + Recently closed count: + Cuenta de recién zarraos: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Barra de ferramientes ficheros: + + + + Edit tool bar: + Barra de ferramientes edición: + + + + View tool bar: + Barra de ferramientes vista: + + + + Use page label: + + + + + Document title as tab title: + Títulu del documentu como títulu de llingüeta: + + + + Current page in window title: + Paxina actual nel títulu de ventana: + + + + Instance name in window title: + Nome de la instancia nel títulu de la ventana: + + + + Synchronize outline view: + Sincronizar la vista d'esquema: + + + + Highlight current thumbnail: + Rescamplar la miniatura actual: + + + + Limit thumbnails to results: + Llendar les miniatures a los resultaos: + + + + Annotation overlay: + Capa d'anotación: + + + + Form field overlay: + Capa de campos de formulariu: + + + + Zoom: + Ampliación: + + + + Rotate: + Xirar: + + + + Scroll: + Desplazamientu: + + + + Copy to clipboard: + Copiar al cartafueyu: + + + + Add annotation: + Amestar anotación: + + + + qpdfview::ShortcutHandler + + + Action + Aición + + + + Key sequence + Secuencia de tecles + + + + Skip backward + Saltar atrás + + + + Skip forward + Saltar alantre + + + + Move up + Mover arriba + + + + Move down + Mover abaxo + + + + Move left + Mover a la izquierda + + + + Move right + Mover a la drecha + + + + qpdfview::TreeView + + + &Expand all + &Espander too + + + + &Collapse all + &Colapsar too + + + diff --git a/translations/qpdfview_az.ts b/translations/qpdfview_az.ts new file mode 100644 index 0000000..61e42ee --- /dev/null +++ b/translations/qpdfview_az.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Format + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Ad + + + + Type + Növ + + + + Embedded + İçərisinə yerləşdirilib + + + + Subset + Alt qrup + + + + File + Fayl + + + + + + + Yes + Bəli + + + + PDF version + + + + + Encrypted + + + + + + + + No + Xeyr + + + + Model::PdfPage + + + Information + Mə'lumat + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Əlfəcinlərin alavə edilməsi və ya silinməsi üçün Popler 0.20.1 və ya daha yüksək versiya kitabxana tələb edir. + + + + Model::PsDocument + + + Title + Başlıq + + + + Created for + Kimin üçün yaradılıb + + + + Creator + Yaradan + + + + Creation date + Yaradılma tarixi + + + + Format + Format + + + + Language level + Dil səviyyəsi + + + + QObject + + + An empty instance name is not allowed. + Boş instansiya adına icazə yoxdur. + + + + An empty search text is not allowed. + Axtarış mətni boşdur. + + + + Unknown command-line option '%1'. + Naməlum əmr-sətri opsiyası '%1'. + + + + Using '--instance' requires an instance name. + '--instance' istifadə etdikdə instansiya adı mütləq göstərilməlidir. + + + + Using '--instance' is not allowed without using '--unique'. + '--instance' -dən istifadə '--unique' istifadə etmədən mümkün deyil. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Nüsxənin adında yalnız "[A-Z][a-z][0-9]_" işarələri olmalı və rəqəmlə başlamamalıdır. + + + + Using '--search' requires a search text. + '--search' istifadə etdikdə axtarılan mətn daxil edilməlidir. + + + + Could not prepare signal handler. + Siqnal başlığını hazırlamaq mümkün deyil. + + + + QShortcut + + + Shift + Şift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Şift və Ctrl + + + + Shift and Alt + Şift və Alt + + + + Ctrl and Alt + Ctrl və Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Heç Biri + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Səhifə: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Aç + + + + Open in new &tab + Yeni &İçlikdə aç + + + + &Remove bookmark + &Əlfəcindən çlxar + + + + qpdfview::Database + + + Jump to page %1 + %1 səhifəsinə keç + + + + qpdfview::DocumentView + + + + Information + Məlumat + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + URL-lərin açılması seçənklərdən bağlıdır + + + + Warning + Xəbərdarlıq + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' çap olunur... + + + + Unlock %1 + %1 aç + + + + Password: + Şifrə: + + + + Page %1 + Səhifə %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Yaddaşa al + + + + Save and open... + Yaddaşa al və aç… + + + + Save file attachment + Əlavədəki faylı saxla + + + + + Warning + Xəbərdarlıq + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + Əlavədəki faylı '%1' yaddaça almaq mümkün deyil + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Öncəkini tap + + + + Find next + Sonrakını tap + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Xəbərdarlıq + + + + + Could not open '%1'. + '%1' açmaq mümkün deyil. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Bütün səkmələri bağla + + + + Close all tabs but this one + Bu siğmədən başqa hamısını bağla + + + + Close all tabs to the left + Solda olan bütün siğmələri bağla + + + + Close all tabs to the right + Sağda olan bütün siğmələri bağla + + + + + Open + + + + + Open in new tab + Yeni İçlikdə aç + + + + + + Could not refresh '%1'. + '%1' yüniləmək mümkün deyil. + + + + Save copy + Nüsxəsini yadda saxla + + + + Could not save copy at '%1'. + Kopyanı '%1' saxlamaq mümkün deyil. + + + + Save as + Fərqli adla yaddaşda saxla + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + '%1' kimi yadda saxlamaq mümkün deyil. + + + + Could not print '%1'. + '%1' çap etmək mümkün deyil. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Səhifəyə keç + + + + Page: + Səhifə: + + + + Jump to page %1 + %1 səhifəsinə keç + + + + About qpdfview + qpdfview haqda + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview Qt-dən istifadə edən səkməli sənəd baxıcısıdır.</p><p>Bu versiyaya daxildir:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + '%1' sənədi dəyişdirilmişdir. Dəyişiklikləri yadda saxlamaq istəyirsiniz mi? + + + + Page width + Səhifənin eni + + + + Page size + Səhifənin ölçüsü + + + + Match &case + Reqistr nəzərə alınmaqla + + + + Whole &words + + + + + Highlight &all + H&amısını seç + + + + &Open... + &Aç... + + + + Open in new &tab... + Yeni İçlikdə aç... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Yenilə + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Başqa cür yadda saxla... + + + + Save &copy... + + + + + &Print... + Ça&p Et... + + + + E&xit + Çı&xış + + + + &Previous page + Əlvəlki səhifə + + + + &Next page + Növbəti səhifə + + + + &First page + Öncəki səhifə + + + + &Last page + Sonuncu səhifə + + + + &Set first page... + + + + + &Jump to page... + Səhifəyə keç… + + + + Jump &backward + Geri qayıt + + + + Jump for&ward + İrəli keç + + + + &Search... + Axtarış + + + + Find previous + Öncəkini tap + + + + Find next + Sonrakını tap + + + + Cancel search + Axtarışdan imtina + + + + &Copy to clipboard + Yaddaşa kopyala + + + + &Add annotation + Qeydlər əlavə et + + + + Settings... + Seçənəklər… + + + + &Continuous + Davamlı + + + + &Two pages + İki səhifə + + + + Two pages &with cover page + Başlıqla &birgə iki səhifə + + + + &Multiple pages + Bir neçə səhifə + + + + Right to left + + + + + Zoom &in + Böyüt + + + + Zoom &out + Kiçild + + + + Original &size + Oriqinal ölçü + + + + Fit to page width + Səhifə eninə uyğunlaşdır + + + + Fit to page size + Səhifə ölçüsünə uyğunlaşdır + + + + Rotate &left + Sola çevir + + + + Rotate &right + Sağa çevir + + + + Invert colors + Rəngləri çevir + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Şriftlər… + + + + &Fullscreen + &Tam ekran + + + + &Presentation... + Nümayiş… + + + + &Previous tab + Öncəki səkmə + + + + &Next tab + Sonrakı səkmə + + + + &Close tab + Səməni bağla + + + + Close &all tabs + Bütün səkmələri bağla + + + + Close all tabs &but current tab + Hazırkı səkmədən başqa, qalan səkmələri bağla + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Öncəki əıfəcin + + + + &Next bookmark + Sonrakı əlfəcin + + + + &Add bookmark + Əlfəcin əlavə et + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Əlfəcini siı + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Bütün əlfəcinləri sil + + + + &Contents + &Məzmun + + + + &About + &Haqqında + + + + + &File + &Fayl + + + + + &Edit + Redaktə et + + + + + &View + &Görünüş + + + + &Outline + Altdan xətli + + + + &Properties + Xüsusiyyətlər + + + + &Search + A&xtar + + + + &Tool bars + Alətlər paneli + + + + &Docks + Doklar + + + + &Tabs + Səkmələr + + + + &Bookmarks + Əlfəcinlər + + + + &Help + &Yardım + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + %1 səhifəsinə keç. + + + + Go to page %1 of file '%2'. + '%2' faylının %1 səhifəsinə keç + + + + Open '%1'. + '%1' aç. + + + + Edit form field '%1'. + '%1' xanasından redaktə et. + + + + Copy &text + Mə&tni kopyala + + + + &Select text + + + + + Copy &image + Şəkl&i kopyala + + + + Save image to &file... + Şəkli &fayla yaz… + + + + Save image to file + Şəkli fayla yaz + + + + Warning + Xəbərdarlıq + + + + Could not save image to file '%1'. + Şəkli '%1' faylına yazmaq mümkün deyil. + + + + Add &text + Mətn əlavə e&t + + + + Add &highlight + Seçim əlavə et + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Qeydlə&ri sil + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Hamarlama: + + + + Text antialiasing: + Mətnin görünüşünün hamarlanması: + + + + + None + Heç Biri + + + + Full + Tam + + + + Reduced + Azaldılmış + + + + + Text hinting: + Mətn bildirişi + + + + Ignore paper color: + + + + + Overprint preview: + Çap həddini aşma ön baxışı + + + + Solid + Tam + + + + Shaped + Fromalı + + + + Thin line mode: + Xəttin nazikliyi: + + + + Splash + Tanıtım + + + + Arthur + Artur + + + + Backend: + Sistemin arxa tərəfi + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Kritik + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + Səhifəyə uyğunlaşdır: + + + + Page ranges: + Səhifə aralığı: + + + + All pages + Bütün səhifələr + + + + Even pages + Cüt səhifələr + + + + Odd pages + Tək səhifələr + + + + Page set: + Səhifələr: + + + + Single page + Bir səhifə + + + + Two pages + İki səhifə + + + + Four pages + Dörd səhifə + + + + Six pages + Altı səhifə + + + + Nine pages + Doqquz səhifə + + + + Sixteen pages + 16 səhifə + + + + Number-up: + Bir rəqəm yuxarı: + + + + Bottom to top and left to right + Aşağıdan yixarı və soldan sağa + + + + Bottom to top and right to left + Aşağıdan yuxarı və sağdan sola + + + + Left to right and bottom to top + Soldan sağa və aşağıdan yuxarı + + + + Left to right and top to bottom + Soldan sağa və yuxarıdan aşağı + + + + Right to left and bottom to top + Sağdan sola və aşağıdan yuxarı + + + + Right to left and top to bottom + Sağdan sola və yuxarıdan aşağı + + + + Top to bottom and left to right + Yuxarıdan aşağı və soldan sağa + + + + Top to bottom and right to left + Yuxarıdan aşağı və sağdan sola + + + + Number-up layout: + Nömrələr-üstə düzümü: + + + + Extended options + Geniş seçənəklər + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Qrafikanın bitlərinin hamarlanması: + + + + Text antialias bits: + Mətn bitlərinin hamarlanması: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Ən son bağlanmışlar + + + + &Clear list + Siyahını &Təmizlə + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Son istifadə edilənlər + + + + &Clear list + Siyahını təmizlə + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Ümumi + + + + &Behavior + Davranış + + + + &Graphics + Qrafiklər + + + + &Interface + &İnterfeys + + + + &Shortcuts + Qısa yollar + + + + &Modifiers + Dəyişdiricilər + + + + Defaults + Susmaya görə + + + + Defaults on current tab + Bu sekmeni susmaya görə istifadə et + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + URL aç: + + + + Auto-refresh: + Avto-yeniləmə: + + + + + + + + + + + + Effective after restart. + Yenidən başlatdıqda təsirlidir. + + + + Track recently used: + Son istifadə edilmişləri izlə: + + + + Keep recently closed: + Sonuncu bağlanmışarı xatırla: + + + + Restore tabs: + Səkmələri bərpa et: + + + + Restore bookmarks: + Əlfəcinləri bərpa et + + + + Restore per-file settings: + ön-fayl seçənəklərini bərpa et: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Nümaişin sinxronizasiyası: + + + + Default + Susmaya görə + + + + Presentation screen: + Nümayiş ekranı: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Heç Biri + + + + Highlight duration: + Sayrışma müddəri: + + + + Highlight color: + Seçilmə rəngi: + + + + Annotation color: + Qeydlərin rəngi: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' tam fayl ünvanı ilə əvəz olunacaq. . '%2' resp. '%3' is replaced by line resp. column number. + + + + Source editor: + Mənbə redaktoru: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + Köhnə pixmasp-ı saxla + + + + Use device pixel ratio: + Cihazın piksel nisbətindən istifadə et: + + + + Decorate pages: + Səhifələri dekorasiyala: + + + + Decorate links: + Linkləri dekorasiyala: + + + + Decorate form fields: + Xanadan dekorasiyala: + + + + Background color: + Arxa fon rəngi: + + + + Paper color: + Səhifənin rəngi: + + + + Presentation background color: + Təqdimatın fon rəngi: + + + + Pages per row: + Sətrdəki səhifələrin sayı: + + + + + + px + + + + + Page spacing: + Səhifələr arası məsafə: + + + + Thumbnail spacing: + Miniaturlar arası məsafə: + + + + Thumbnail size: + Cəld baxış şəkilinin ölçüsü: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Keşin ölçüsü: + + + + Minimal scrolling: + + + + + Prefetch: + Öncədən yükləmə: + + + + Prefetch distance: + Öncədən yükəmə məsafəsi: + + + + Top + Yuxarı + + + + Bottom + Aşağı + + + + Left + Sol + + + + Right + Sağ + + + + Tab position: + Səkmə pozisiyası: + + + + As needed + Lazım olduqda + + + + Always + Həmişə + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Heç vaxt + + + + Settings + + + + + Tab visibility: + Səkmənin görünməsi: + + + + Spread tabs: + + + + + New tab next to current tab: + Yeni səkmə hazırkının dalınca: + + + + Recently used count: + İstifadə sayı: + + + + Recently closed count: + Ən son bağlanmışların sayı: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Fayl alətlər paneli: + + + + Edit tool bar: + Alətlər panelini redaktə et: + + + + View tool bar: + Alətlər panelinə bax: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + Hazırkı səhifə pəncərənin başlığında: + + + + Instance name in window title: + Pəncərənin başlığında nüsxənin adı: + + + + Synchronize outline view: + Xətlər görüntüsünü sinxrolaşdır: + + + + Highlight current thumbnail: + Hazırkı görüntünü seç% + + + + Limit thumbnails to results: + Görüntüləri axtarış sayı ilə limitlə: + + + + Annotation overlay: + Annotasiya üzlüyü: + + + + Form field overlay: + Sahə üzlüyündən: + + + + Zoom: + Böyüklük + + + + Rotate: + Dönüş: + + + + Scroll: + SkrolI + + + + Copy to clipboard: + Yaddaşa kopyala + + + + Add annotation: + Qeyd əlavə et: + + + + qpdfview::ShortcutHandler + + + Action + Davranış + + + + Key sequence + Açar sırası + + + + Skip backward + Geri ötür + + + + Skip forward + İrəli ötür + + + + Move up + Yuxarı daşı + + + + Move down + Aşağı daşı + + + + Move left + Sola daşı + + + + Move right + Sağa daşı + + + + qpdfview::TreeView + + + &Expand all + Hamısını aç + + + + &Collapse all + Hamısını bağla + + + diff --git a/translations/qpdfview_be.ts b/translations/qpdfview_be.ts new file mode 100644 index 0000000..0b0a36d --- /dev/null +++ b/translations/qpdfview_be.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + Падмноства + + + + File + Файл + + + + + + + Yes + Так + + + + PDF version + + + + + Encrypted + + + + + + + + No + Не + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Версія бібліятэкі Poppler 0.20.1 ці пазнейшая неабходна каб дадаваць ці выдаляць анатыцыі. + + + + Model::PsDocument + + + Title + Загаловак + + + + Created for + Створана для + + + + Creator + Аўтар + + + + Creation date + Дата стварэння + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + Пустое імя не дазваляецца. + + + + An empty search text is not allowed. + Пусты тэкст пошуку не дазваляецца. + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_bg.ts b/translations/qpdfview_bg.ts new file mode 100644 index 0000000..2f369d4 --- /dev/null +++ b/translations/qpdfview_bg.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Формат + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Име + + + + Type + Вид + + + + Embedded + Вграден + + + + Subset + Подгрупа + + + + File + Файл + + + + + + + Yes + Да + + + + PDF version + + + + + Encrypted + + + + + + + + No + Не + + + + Model::PdfPage + + + Information + Информация + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Нужна е версия 0.20.1 или по-висока на библиотеката Poppler, за да се добавят или премахват анотации. + + + + Model::PsDocument + + + Title + Заглавие + + + + Created for + Създадено за + + + + Creator + Създател + + + + Creation date + Дата на създаване + + + + Format + Формат + + + + Language level + Ниво на езика + + + + QObject + + + An empty instance name is not allowed. + Не е позволено празно име за екземпляра. + + + + An empty search text is not allowed. + Не е позволен празен текст за търсене. + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + Използването на '--instance' изисква име на инстанция. + + + + Using '--instance' is not allowed without using '--unique'. + Използването на '--instance' не е разрешено без използване на '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Името на инстанцията трябва да съдържа само буквите от "[A-Z][a-z][0-9]_" и не трябва да започва с цифра. + + + + Using '--search' requires a search text. + Използването на '--search' изисква текст за търсене. + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift и Ctrl + + + + Shift and Alt + Shift и Alt + + + + Ctrl and Alt + Ctrl и Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Страница: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Отвори + + + + Open in new &tab + Отвари в нов &таб + + + + &Remove bookmark + &Премахни отметката + + + + qpdfview::Database + + + Jump to page %1 + Отиди на страница %1 + + + + qpdfview::DocumentView + + + + Information + Информация + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Отварянето на URL е изключено от настройките. + + + + Warning + Предупреждение + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Принтиране на '%1'... + + + + Unlock %1 + Отключи %1 + + + + Password: + Парола: + + + + Page %1 + Страница %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Съхрани... + + + + Save and open... + Съхрани и отвори... + + + + Save file attachment + Съхрани прикачения файл + + + + + Warning + Предупреждение + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + Не може да се съхрани прикаченият файл за '%1'. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Намери предишния + + + + Find next + Намери следващия + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Предупреждение + + + + + Could not open '%1'. + Не може да се отвори '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Затваряне на всички раздели + + + + Close all tabs but this one + Затваряне на всички раздели, освен този + + + + Close all tabs to the left + Затвори всички табове на ляво + + + + Close all tabs to the right + Затвори всички табове на дясно + + + + + Open + Отвoри + + + + Open in new tab + Отвари в нов таб + + + + + + Could not refresh '%1'. + Не може да се презареди '%1'. + + + + Save copy + Съхрани копие + + + + Could not save copy at '%1'. + Не може да се съхрани копие в '%1'. + + + + Save as + Съхрани като + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Не може да се съхрани като '%1'. + + + + Could not print '%1'. + Не може да се отпечати '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Отиди на страница + + + + Page: + Страница: + + + + Jump to page %1 + Отиди на страница %1 + + + + About qpdfview + Относно qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview e четец на PDF документи, използващ раздели, базиран на Qt.</p><p>Тази версия съдържа:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Документът '%1' е променен. Искате ли да запазите промените? + + + + Page width + Ширина на страницата + + + + Page size + Размер на страницата + + + + Match &case + Съвпадение на &регистъра + + + + Whole &words + + + + + Highlight &all + Избери &всички + + + + &Open... + &Отваряне... + + + + Open in new &tab... + Отваряне в нов &таб... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Опресняване + + + + Information + Информация + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Съхрани &като... + + + + Save &copy... + + + + + &Print... + &Принтиране... + + + + E&xit + &Изход + + + + &Previous page + &Предишна страница + + + + &Next page + &Следваща страница + + + + &First page + &Първа страница + + + + &Last page + &Последна страница + + + + &Set first page... + + + + + &Jump to page... + &Отиди към страница... + + + + Jump &backward + Отиди на&зад + + + + Jump for&ward + Отиди на&пред + + + + &Search... + &Търсене... + + + + Find previous + Намери предишния + + + + Find next + Намери следващия + + + + Cancel search + Отмени търсенето + + + + &Copy to clipboard + &Копирай в системния буфер + + + + &Add annotation + &Добави коментар + + + + Settings... + Настройки... + + + + &Continuous + Б&ез прекъсване между страниците + + + + &Two pages + &Две страници + + + + Two pages &with cover page + Две страници и &обложка + + + + &Multiple pages + &Множество страници + + + + Right to left + + + + + Zoom &in + У&величи + + + + Zoom &out + Н&амали + + + + Original &size + &Оригинален размер + + + + Fit to page width + По ширина + + + + Fit to page size + Цялата страница + + + + Rotate &left + Завърти на&ляво + + + + Rotate &right + Завърти на&дясно + + + + Invert colors + Обърни цветовете + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Шрифтове... + + + + &Fullscreen + Цял &екран + + + + &Presentation... + &Презентация... + + + + &Previous tab + &Предишен таб + + + + &Next tab + &Следващ таб + + + + &Close tab + &Затвори таба + + + + Close &all tabs + Затвори в&сичките табове + + + + Close all tabs &but current tab + Затвори всичките табове б&ез настоящия + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Предишна отметка + + + + &Next bookmark + &Следваща отметка + + + + &Add bookmark + &Добави отметка + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Премахни отметката + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Премахни всички отметки + + + + &Contents + &Съдържание + + + + &About + &Относно програмата + + + + + &File + &Файл + + + + + &Edit + &Редактирай + + + + + &View + &Преглед + + + + &Outline + &Съдържание + + + + &Properties + &Свойства + + + + &Search + &Търсене + + + + &Tool bars + Ленти с &инструменти + + + + &Docks + &Панели + + + + &Tabs + &Табове + + + + &Bookmarks + &Отметки + + + + &Help + &Помощ + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Към страница %1. + + + + Go to page %1 of file '%2'. + Към страница %1 от файла '%2'. + + + + Open '%1'. + Отвори '%1'. + + + + Edit form field '%1'. + Редактирай полето на формата '%1'. + + + + Copy &text + Копирай &текста + + + + &Select text + + + + + Copy &image + Копирай &снимката + + + + Save image to &file... + Съхрани снимката във &файл... + + + + Save image to file + Съхрани снимката във файл + + + + Warning + Предупреждение + + + + Could not save image to file '%1'. + Не може да се съхрани снимката във файла '%1'. + + + + Add &text + Добави &текст + + + + Add &highlight + Добави п&одчертаване + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + П&ремахни анотация + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Изглаждане: + + + + Text antialiasing: + Изглаждане на текста: + + + + + None + Без + + + + Full + Пълно + + + + Reduced + Намалено + + + + + Text hinting: + Подсказка за текста: + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + Плътно + + + + Shaped + Оформено + + + + Thin line mode: + Режим на тънката линия: + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Критично + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + Побири в страницата: + + + + Page ranges: + Диапазон на страницата: + + + + All pages + Всички страници + + + + Even pages + Четните страници + + + + Odd pages + Нечетните страници + + + + Page set: + Набор от страници: + + + + Single page + Една страница + + + + Two pages + Две страници + + + + Four pages + Четири страници + + + + Six pages + Шест страници + + + + Nine pages + Девет страници + + + + Sixteen pages + Шестнадесет страници + + + + Number-up: + Номер нагоре: + + + + Bottom to top and left to right + Отдолу нагоре и отляво надясно + + + + Bottom to top and right to left + Отдолу нагоре и отдясно наляво + + + + Left to right and bottom to top + Отляво на дясно и отдолу нагоре + + + + Left to right and top to bottom + Отляво надясно и отгоре надолу + + + + Right to left and bottom to top + Отдясно наляво и отдолу нагоре + + + + Right to left and top to bottom + Отдясно наляво и отгоре надолу + + + + Top to bottom and left to right + Отгоре надолу и отляво надясно + + + + Top to bottom and right to left + Отгоре надолу и от дясно на ляво + + + + Number-up layout: + Подредба на страниците + + + + Extended options + Разширени опции + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Наскоро затворени + + + + &Clear list + &Изчистване на списък + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Последно &използвани + + + + &Clear list + &Изчисти списъка + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Основни + + + + &Behavior + Пов&едение + + + + &Graphics + &Графика + + + + &Interface + + + + + &Shortcuts + Б&ързи клавиши + + + + &Modifiers + &Модификатори + + + + Defaults + Стандартни + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Отвори URL: + + + + Auto-refresh: + Автоматично опресняване: + + + + + + + + + + + + Effective after restart. + Ефективно след рестартиране. + + + + Track recently used: + Проследи последно използваните: + + + + Keep recently closed: + + + + + Restore tabs: + Възстанови табове: + + + + Restore bookmarks: + Възстанови отметки: + + + + Restore per-file settings: + Възстановяване на настройки според файл: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Синхронизация на презентация: + + + + Default + По подразбиране + + + + Presentation screen: + Екран за презентации: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Няма + + + + Highlight duration: + Продължителност на осветяването: + + + + Highlight color: + Цвят за маркиране: + + + + Annotation color: + Цвят за анотацията: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + Редактор на източник: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Рамка на страниците: + + + + Decorate links: + Маркиране на линкове: + + + + Decorate form fields: + Маркиране на формулярни полета: + + + + Background color: + Цвят на фона: + + + + Paper color: + Цвят на хартията: + + + + Presentation background color: + Цвят на фона за презентация: + + + + Pages per row: + Страници в един ред: + + + + + + px + + + + + Page spacing: + Разстояние между страниците: + + + + Thumbnail spacing: + Разстояние между миниатюрите: + + + + Thumbnail size: + Размер на миниатюрите: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 Mб + + + + Cache size: + Размер на кеша: + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Отгоре + + + + Bottom + Отдолу + + + + Left + Отляво + + + + Right + Отдясно + + + + Tab position: + Разположение на табовете: + + + + As needed + При необходимост + + + + Always + Винаги + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Никога + + + + Settings + + + + + Tab visibility: + Видимост на табовете: + + + + Spread tabs: + + + + + New tab next to current tab: + Новият таб в непосредствена близост до сегашният таб: + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Файлов панел: + + + + Edit tool bar: + Панел за редактиране: + + + + View tool bar: + Панел за преглед: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + Текуща страница в заглавието на прозореца: + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + Маркиране на текущата миниатюра: + + + + Limit thumbnails to results: + Лимит на миниатюри е резултатите: + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Увеличаване: + + + + Rotate: + Завъртане: + + + + Scroll: + + + + + Copy to clipboard: + Копирай в клипборда: + + + + Add annotation: + Добави анотация: + + + + qpdfview::ShortcutHandler + + + Action + Действиe + + + + Key sequence + Последователност на клавишите + + + + Skip backward + Пропусни назад + + + + Skip forward + Пропусни напред + + + + Move up + Премести нагоре + + + + Move down + Премести надолу + + + + Move left + Премести наляво + + + + Move right + Премести надясно + + + + qpdfview::TreeView + + + &Expand all + &Разгъни всички + + + + &Collapse all + &Сгъни всички + + + diff --git a/translations/qpdfview_bs.ts b/translations/qpdfview_bs.ts new file mode 100644 index 0000000..1fa6d6f --- /dev/null +++ b/translations/qpdfview_bs.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + Informacije + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + Ime instance ne može biti prazno. + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + Korištenje '--instance' zathejva i naziv instance. + + + + Using '--instance' is not allowed without using '--unique'. + Korištenje '--instance' nije dozvoljeno bez korištenja '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + Nije moguće pripremiti handler za signal. + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Ništa + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Stranica: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Otvori + + + + Open in new &tab + Otvori u novom &tabu + + + + &Remove bookmark + &Ukloni zabilješku + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Informacije + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Otvaranje URL-a je onemogućeno u postavkama. + + + + Warning + Upozorenje + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Štampam '%1'... + + + + Unlock %1 + Otključaj %1 + + + + Password: + Šifra: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Upozorenje + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Pronađi prethodno + + + + Find next + Pronađi sljedeće + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Upozorenje + + + + + Could not open '%1'. + Nije moguće otvoriti '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Otvori + + + + Open in new tab + Otvori u novom tabu + + + + + + Could not refresh '%1'. + Nije moguće osvježiti '%1'. + + + + Save copy + Sačuvaj kopiju + + + + Could not save copy at '%1'. + Nije moguće sačuvati kopiju u '%1'. + + + + Save as + Sačuvaj kao + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Nije moguće sačuvati kao '%1'. + + + + Could not print '%1'. + Nije moguće štampati '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Idi na stranicu + + + + Page: + Stranica: + + + + Jump to page %1 + + + + + About qpdfview + O qpdfviewu + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Širina stranice + + + + Page size + Veličina stranice + + + + Match &case + Slaganje &veličine slova + + + + Whole &words + + + + + Highlight &all + Označi &sve + + + + &Open... + &Otvori... + + + + Open in new &tab... + Otvori u novom &tabu... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Osvježi + + + + Information + Informacije + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Sačuvaj &kao... + + + + Save &copy... + + + + + &Print... + &Štampaj... + + + + E&xit + + + + + &Previous page + &Prethodna stranica + + + + &Next page + &Sljedeća stranica + + + + &First page + &Prva stranica + + + + &Last page + &Posljednja stranica + + + + &Set first page... + + + + + &Jump to page... + &Idi na stranicu... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &Pretraga... + + + + Find previous + Pronađi prethodno + + + + Find next + Pronađi sljedeće + + + + Cancel search + Otkaži pretragu + + + + &Copy to clipboard + &Kopiraj u privremenu memoriju + + + + &Add annotation + &Dodaj napomenu + + + + Settings... + Postavke... + + + + &Continuous + &Neprekidno + + + + &Two pages + &Dvije stranice + + + + Two pages &with cover page + Dvije stranice &sa naslovnom stranicom + + + + &Multiple pages + &Višestruke stranice + + + + Right to left + + + + + Zoom &in + Uveća&j + + + + Zoom &out + Umanj&i + + + + Original &size + Originalna &veličina + + + + Fit to page width + Uklopi širinu stranice + + + + Fit to page size + Uklopi veličinu stranice + + + + Rotate &left + Rotiraj &lijevo + + + + Rotate &right + Rotiraj &desno + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fontovi... + + + + &Fullscreen + Preko &cijelog ekrana + + + + &Presentation... + &Prezentacija... + + + + &Previous tab + &Prethodni tab + + + + &Next tab + &Sljedeći tab + + + + &Close tab + &Zatvori tab + + + + Close &all tabs + Zatvori &sve tabove + + + + Close all tabs &but current tab + Zatvori sve tabove &osim trenutnog + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Prethodna zabilješka + + + + &Next bookmark + &Sljedeća zabilješka + + + + &Add bookmark + &Dodaj zabilješku + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Remove zabilješku + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Ukloni sve zabilješke + + + + &Contents + &Sadržaj + + + + &About + &O programu + + + + + &File + &Datoteka + + + + + &Edit + &Uredi + + + + + &View + &Prikaz + + + + &Outline + &Kontura + + + + &Properties + &Svojstva + + + + &Search + &Pretraga + + + + &Tool bars + &Alatne trake + + + + &Docks + &Dokovi + + + + &Tabs + &Tabovi + + + + &Bookmarks + &Zabilješke + + + + &Help + &Pomoć + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Idi na stranicu %1. + + + + Go to page %1 of file '%2'. + Idi na stranicu %1 datoteke '%2'. + + + + Open '%1'. + Otvori '%1'. + + + + Edit form field '%1'. + Uredi polje obrasca '%1'. + + + + Copy &text + Kopiraj &tekst + + + + &Select text + + + + + Copy &image + Kopiraj &sliku + + + + Save image to &file... + Sačuvaj sliku u &datoteku... + + + + Save image to file + Sačuvaj sliku u datoteku + + + + Warning + Upozorenje + + + + Could not save image to file '%1'. + Nije moguće sačuvati sliku u datoteku '%1'. + + + + Add &text + Dodaj &tekst + + + + Add &highlight + Dodaj &oznaku + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &Ukloni napomenu + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + Ništa + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &Očisti listu + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Nedavno &korišteno + + + + &Clear list + &Očisti listu + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + &Ponašanje + + + + &Graphics + &Grafika + + + + &Interface + &Interfejs + + + + &Shortcuts + + + + + &Modifiers + &Prilagođavanja + + + + Defaults + Podrazumijevano + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Otvori URL: + + + + Auto-refresh: + Automatsko osvježavanje: + + + + + + + + + + + + Effective after restart. + Bit će u upotrebi nakon ponovnog pokretanja. + + + + Track recently used: + Prati nedavno korišteno: + + + + Keep recently closed: + + + + + Restore tabs: + Povrati tabove: + + + + Restore bookmarks: + Povrati zabilješke: + + + + Restore per-file settings: + Povrati postavke za pojedinačne datoteke: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sinhronizacija prezentacija: + + + + Default + Podrazumijevano + + + + Presentation screen: + Prezentacijski ekran: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Ništa + + + + Highlight duration: + Trajanje označavanja: + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' je zamijenjeno apsolutnom putanjom do datoteke. '%2' koje predstavlja '%3' je zamijenjeno linijom koja predstavlja broj kolone. + + + + Source editor: + Uređivač izvornog teksta: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Ukrašavanje stranica: + + + + Decorate links: + Ukrašavanje linkova: + + + + Decorate form fields: + Ukrašavanje polja obrasca: + + + + Background color: + Boja pozadine: + + + + Paper color: + Boja papira: + + + + Presentation background color: + + + + + Pages per row: + Stranica po redu: + + + + + + px + + + + + Page spacing: + Razmak između stranica: + + + + Thumbnail spacing: + Razmak između sličica: + + + + Thumbnail size: + Veličina sličice: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Veličina keša: + + + + Minimal scrolling: + + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Prefetch vrijednost: + + + + Top + Vrh + + + + Bottom + Dno + + + + Left + Lijevo + + + + Right + Desno + + + + Tab position: + Položaj taba: + + + + As needed + Kada je potrebno + + + + Always + Uvijek + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Nikad + + + + Settings + + + + + Tab visibility: + Vidljivost taba: + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Alatna traka datoteke: + + + + Edit tool bar: + Alatna traka za uređivanje: + + + + View tool bar: + Alatna traka za prikaz: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Uvećanje: + + + + Rotate: + Rotiraj: + + + + Scroll: + Skrolanje: + + + + Copy to clipboard: + Kopiraj u međumemoriju: + + + + Add annotation: + Dodaj napomenu: + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + Raširi sv&e + + + + &Collapse all + &Zatvori sve + + + diff --git a/translations/qpdfview_ca.ts b/translations/qpdfview_ca.ts new file mode 100644 index 0000000..b777984 --- /dev/null +++ b/translations/qpdfview_ca.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Imatge (%1) + + + + Size + Mida + + + + Resolution + Resolució + + + + Depth + Profunditat + + + + + + + + + Format + Format + + + + Monochrome + Monocrom + + + + Indexed + Indexat + + + + 32 bits RGB + RGB de 32 bits + + + + 32 bits ARGB + ARGB de 32 bits + + + + 16 bits RGB + RGB de 16 bits + + + + 24 bits RGB + RGB de 24 bits + + + + Model::PdfDocument + + + Linearized + Linealitzat + + + + Name + Nom + + + + Type + Tipus + + + + Embedded + Incrustat + + + + Subset + Subconjunt + + + + File + Fitxer + + + + + + + Yes + + + + + PDF version + Versió de PDF + + + + Encrypted + Xifrat + + + + + + + No + No + + + + Model::PdfPage + + + Information + Informació + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Es necessita la versió 2.20 o superior de la biblioteca Poppler per afegir o eliminar anotacions. + + + + Model::PsDocument + + + Title + Títol + + + + Created for + Creat per a + + + + Creator + Creador + + + + Creation date + Data de creació + + + + Format + Format + + + + Language level + Nivell de llenguatge + + + + QObject + + + An empty instance name is not allowed. + No es permet un nom d'instància buit. + + + + An empty search text is not allowed. + No es permet una cadena de cerca buida. + + + + Unknown command-line option '%1'. + Opció de línia de comandaments '%1' desconeguda. + + + + Using '--instance' requires an instance name. + La utilització de '--instance' requereix el nom d'una instància. + + + + Using '--instance' is not allowed without using '--unique'. + La utilització de '--instance' no està permesa sense l'ús de '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + El nom d'una instància només pot contindre els caràcters "[A-Z][a-z][0-9]_" i no pot començar per un número. + + + + Using '--search' requires a search text. + L'ús de '--search' necessita un text de cerca. + + + + Could not prepare signal handler. + No s'ha pogut preparar el gestor de senyals. + + + + QShortcut + + + Shift + Majús + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Majús i Ctrl + + + + Shift and Alt + Majús i Alt + + + + Ctrl and Alt + Ctrl i Alt + + + + Right mouse button + Botó dret del ratolí + + + + Middle mouse button + Botó central del ratolí + + + + None + Cap + + + + qpdfview::BookmarkDialog + + + Bookmark + Adreça d'interès + + + + Page: + Pàgina: + + + + Label: + Etiqueta: + + + + Comment: + Comentari: + + + + Modified: + Modificat: + + + + qpdfview::BookmarkMenu + + + &Open + &Obre + + + + Open in new &tab + Obre en una pes&tanya nova + + + + &Remove bookmark + Elimina el ma&rcador + + + + qpdfview::Database + + + Jump to page %1 + Salta a la pàgina %1 + + + + qpdfview::DocumentView + + + + Information + Informació + + + + The source editor has not been set. + No s'ha establert l'editor de codi font. + + + + Opening URL is disabled in the settings. + S'ha inhabilitat l'apertura de l'adreça URL als ajusts. + + + + Warning + Avís + + + + + SyncTeX data for '%1' could not be found. + No s'han pogut trobar les dades SyncTeX per a '%1'. + + + + Printing '%1'... + Imprimint '%1'... + + + + Unlock %1 + Desbloqueja %1 + + + + Password: + Contrasenya: + + + + Page %1 + Pàgina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Desa... + + + + Save and open... + Desa i obre... + + + + Save file attachment + Desa l'adjunt + + + + + Warning + Avís + + + + Could not open file attachment saved to '%1'. + No s'ha pogut obrir el fitxer afegit desat a '%1'. + + + + Could not save file attachment to '%1'. + No s'ha pogut desar l'adjunt a '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Tipus de lletres + + + + qpdfview::HelpDialog + + + Help + Ajuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_ca.html + + + + Find previous + Cerca l'anterior + + + + Find next + Cerca el següent + + + + qpdfview::MainWindow + + + Toggle tool bars + Canvia barra d'eines + + + + Toggle menu bar + Canvia barra de menú + + + + + + + + + + + + + + Warning + Avís + + + + + Could not open '%1'. + No s'ha pogut obrir '%1'. + + + + Copy file path + Copia el camí al fitxer + + + + Select file path + Selecciona el camí al fitxer + + + + Close all tabs + Tanca totes les pestanyes + + + + Close all tabs but this one + Tanca totes les pestanyes menys aquesta + + + + Close all tabs to the left + Tanca totes les pestanyes a l'esquerra + + + + Close all tabs to the right + Tanca totes les pestanyes a la dreta + + + + + Open + Obre + + + + Open in new tab + Obre en una pestanya nova + + + + + + Could not refresh '%1'. + No s'ha pogut refrescar '%1'. + + + + Save copy + Desa una còpia + + + + Could not save copy at '%1'. + No s'ha pogut desar una còpia a '%1'. + + + + Save as + Anomena i desa + + + + + Move to instance + Mou a la instància + + + + + Failed to access instance '%1'. + No s'ha pogut accedir a la instància '%1'. + + + + + + Could not save as '%1'. + No es pot desar com a '%1'. + + + + Could not print '%1'. + No s'ha pogut imprimir '%1'. + + + + Set first page + Posa com a primera pàgina + + + + Select the first page of the body matter: + Tria la primera pàgina de l'assumpte principal: + + + + Jump to page + Salta a la pàgina + + + + Page: + Pàgina: + + + + Jump to page %1 + Salta a la pàgina %1 + + + + About qpdfview + Sobre qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview és un visualitzador de documents amb pestanyes mitjançant Qt.</p><p>Aquesta versió inclou:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Compatibilitat amb PDF mitjançant Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Compatibilitat amb PS mitjançant libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Compatibilitat amb DjVu mitjançant DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Compatibilitat amb PDF mitjançant Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Compatibilitat amb la impressió mitjançant CUPS %1</li> + + + + &Edit bookmark + &Edita el marcador + + + + The document '%1' has been modified. Do you want to save your changes? + El document '%1' ha estat modificat. Voleu desar els vostres canvis? + + + + Page width + Amplada de la pàgina + + + + Page size + Mida de la pàgina + + + + Match &case + Coincidència de majús&cules + + + + Whole &words + Paraules senceres (&w) + + + + Highlight &all + Res&alta tot + + + + &Open... + &Obre... + + + + Open in new &tab... + Obre en una pes&tanya nova... + + + + Open &copy in new tab + Obre la &còpia en una pestanya nova + + + + Move to &instance... + Mou a la &instància... + + + + &Refresh + &Refresca + + + + Information + Informació + + + + Instance-to-instance communication requires D-Bus support. + La comunicació instancia a instancia requereix la compatibilitat amb D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Consulteu <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> per a més informació.</p><p>&copy; %1 Els desenvolupadors de qpdfview</p> + + + + Save &as... + &Anomena i desa... + + + + Save &copy... + Desa la &còpia... + + + + &Print... + Im&primeix… + + + + E&xit + &Surt + + + + &Previous page + &Pàgina anterior + + + + &Next page + Pàgi&na següent + + + + &First page + &Primera pàgina + + + + &Last page + Ú&ltima pàgina + + + + &Set first page... + Po&sa primera pàgina... + + + + &Jump to page... + &Salta a la pàgina... + + + + Jump &backward + Torna enrere + + + + Jump for&ward + Vés endavant + + + + &Search... + &Cerca... + + + + Find previous + Cerca l'anterior + + + + Find next + Cerca el següent + + + + Cancel search + Cancel·la la cerca + + + + &Copy to clipboard + &Copia al porta-retalls + + + + &Add annotation + &Afegeix anotació + + + + Settings... + Ajusts... + + + + &Continuous + &Continu + + + + &Two pages + &Doble pàgina + + + + Two pages &with cover page + Doble pàgina &amb portada + + + + &Multiple pages + Diverses pàgines + + + + Right to left + De dreta a esquerra + + + + Zoom &in + Ampl&ia el zoom: + + + + Zoom &out + Redueix el z&oom: + + + + Original &size + Mida &original + + + + Fit to page width + Ajusta a l'amplada de la pàgina + + + + Fit to page size + Ajusta a la mida de la pàgina + + + + Rotate &left + Gira a &l'esquerra + + + + Rotate &right + Gira a la &dreta + + + + Invert colors + Inverteix els colors + + + + Convert to grayscale + Converteix a escala de grisos + + + + Trim margins + Retalla els marges + + + + Darken with paper color + Fosc amb color de paper + + + + Lighten with paper color + Clar amb color de paper + + + + Fonts... + Tipus de lletres... + + + + &Fullscreen + Pantalla &completa + + + + &Presentation... + &Presentació + + + + &Previous tab + &Pestanya anterior + + + + &Next tab + Pestanya següe&nt + + + + &Close tab + Tan&ca la pestanya + + + + Close &all tabs + Tanc&a totes les pestanyes + + + + Close all tabs &but current tab + Tanca totes les pestanyes &excepte l'actual + + + + Restore &most recently closed tab + Restaura les pestanyes tancades &més recents + + + + &Previous bookmark + Marcador &anterior + + + + &Next bookmark + Marcador &següent + + + + &Add bookmark + &Afegeix el marcador + + + + Open copy in new &window + Obre la còpia en una &finestra nova + + + + Split view horizontally... + Divideix horitzontalment la vista... + + + + Split view vertically... + Divideix verticalment la vista... + + + + Close current view + Tanca la vista actual + + + + Thumb&nails + Mi&niatures + + + + Book&marks + &Marcadors + + + + Composition + Composició + + + + + &Remove bookmark + Elimina el ma&rcador + + + + Edit '%1' at %2,%3... + Edita '%1' a %2,%3... + + + + Open containing &folder + Obre carpeta del contingut (&F) + + + + &Save + De&sa + + + + Remove all bookmarks + Elimina tots els marcadors + + + + &Contents + &Continguts + + + + &About + Qu&ant a + + + + + &File + &Fitxer + + + + + &Edit + &Edita + + + + + &View + &Visualitza + + + + &Outline + C&ontorn + + + + &Properties + &Propietats + + + + &Search + &Cerca + + + + &Tool bars + &Barres d'eines + + + + &Docks + &Plafons + + + + &Tabs + Pes&tanyes + + + + &Bookmarks + &Marcadors + + + + &Help + A&juda + + + + + Choose instance + Trieu la instància + + + + + Instance: + Instància: + + + + qpdfview::PageItem + + + Go to page %1. + Vés a la pàgina %1. + + + + Go to page %1 of file '%2'. + Vés a la pàgina %1 del fitxer '%2'. + + + + Open '%1'. + Obre '%1'. + + + + Edit form field '%1'. + Edita el camp '%1' del formulari. + + + + Copy &text + Copia el &text + + + + &Select text + Tria text (&S) + + + + Copy &image + Copia la &imatge + + + + Save image to &file... + Desa la imatge a un &fitxer... + + + + Save image to file + Desa la imatge a un fitxer... + + + + Warning + Avís + + + + Could not save image to file '%1'. + No s'ha pogut desar la imatge al fitxer '%1'. + + + + Add &text + Afegeix &text + + + + Add &highlight + &Destaca + + + + &Copy link address + &Còpia direcció de l'enllaç + + + + &Select link address + Tria direcció de l'enllaç (&S) + + + + &Remove annotation + &Elimina l'anotació + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiàsing: + + + + Text antialiasing: + Antialiàsing del text: + + + + + None + Cap + + + + Full + Complet + + + + Reduced + Reduït + + + + + Text hinting: + Contorn del text: + + + + Ignore paper color: + Ignora el color del paper: + + + + Overprint preview: + Vista prèvia de la sobreimpressió: + + + + Solid + Sòlid + + + + Shaped + Amb forma + + + + Thin line mode: + Mode de línia fina: + + + + Splash + Pantalla inicial + + + + Arthur + Arthur + + + + Backend: + Infraestructura: + + + + qpdfview::PluginHandler + + + Image (%1) + Imatge (%1) + + + + Compressed (%1) + Comprimit (%1) + + + + Supported formats (%1) + Formats admesos (%1) + + + + Could not decompress '%1'! + No s'ha pogut descomprimir «%1»! + + + + Could not match file type of '%1'! + No s'ha pogut trobar el tipus de fitxer de '%1'! + + + + Critical + Crític + + + + Could not load plug-in for file type '%1'! + No s'ha pogut carregar el connector per al tipus de fitxer '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Encaixa a la pàgina: + + + + Page ranges: + Interval de pàgines: + + + + All pages + Totes les pàgines + + + + Even pages + Pàgines parells + + + + Odd pages + Pàgines senars + + + + Page set: + Conjunt de pàgines: + + + + Single page + Només una pàgina + + + + Two pages + Dues pàgines + + + + Four pages + Quatre págines + + + + Six pages + Sis pàgines + + + + Nine pages + Nou pàgines + + + + Sixteen pages + Setze pàgines + + + + Number-up: + Pàgines per full: + + + + Bottom to top and left to right + De baix a dalt i d'esquerra a dreta + + + + Bottom to top and right to left + De baix a dalt i de dreta a esquerra + + + + Left to right and bottom to top + D'esquerra a dreta i de baix a dalt + + + + Left to right and top to bottom + D'esquerra a dreta i de dalt a baix + + + + Right to left and bottom to top + De dreta a esquerra i de baix a dalt + + + + Right to left and top to bottom + De dreta a esquerra i de dalt a baix + + + + Top to bottom and left to right + De dalt a baix i d'esquerra a dreta + + + + Top to bottom and right to left + De dalt a baix i de dreta a esquerra + + + + Number-up layout: + Distribució de les pàgines per full: + + + + Extended options + Opcions esteses + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits de l'antialiàsing dels gràfics: + + + + Text antialias bits: + Bits de l'antialiàsing del text: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Tancats recentment + + + + &Clear list + &Neteja la llista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &Utilitzats recentment + + + + &Clear list + &Neteja la llista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> aparicions + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> aparicions a la pàgina <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Cerca per '%1'... + + + + qpdfview::SettingsDialog + + + General + General + + + + &Behavior + &Comportament + + + + &Graphics + &Gràfics + + + + &Interface + &Interfície + + + + &Shortcuts + Drecere&s + + + + &Modifiers + &Modificadors + + + + Defaults + Valors per defecte + + + + Defaults on current tab + Per defecte en la pestanya actual + + + + Mouse wheel modifiers + Modificadors de la roda del ratolí + + + + Mouse button modifiers + Modificadors del botó del ratolí + + + + Open URL: + Obre les adreces URL: + + + + Auto-refresh: + Refresc automàtic: + + + + + + + + + + + + Effective after restart. + Efectiu desprès de reiniciar. + + + + Track recently used: + Seguiment dels utilitzats recentment: + + + + Keep recently closed: + Mantingues els tancats recentment: + + + + Restore tabs: + Restaura les pestanyes: + + + + Restore bookmarks: + Restaura els marcadors: + + + + Restore per-file settings: + Restaura els ajusts per a cada fitxer: + + + + min + min + + + + Save database interval: + Interval per al desament de la base de dades + + + + Synchronize presentation: + Sincronitza la presentació: + + + + Default + Per defecte + + + + Presentation screen: + Pantalla de presentació: + + + + Synchronize split views: + Sincronitza les vistes dividides: + + + + Zoom factor: + Factor del zoom: + + + + Parallel search execution: + Execució en paral·lel de la cerca: + + + + ms + ms + + + + None + Cap + + + + Highlight duration: + Durada del ressaltat: + + + + Highlight color: + Color del ressaltat: + + + + Annotation color: + Color de l'anotació: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' es canviarà pel camí absolut. '%2' resp. '%3' es canviarà per la línia resp. del número de la columna. + + + + Source editor: + Editor de codi font: + + + + Use tiling: + Utilitza el mosaic: + + + + Keep obsolete pixmaps: + Mantingues els mapes de píxels obsolets: + + + + Use device pixel ratio: + Utilitza la relació de píxel del dispositiu: + + + + Decorate pages: + Decora les pàgines: + + + + Decorate links: + Decora els enllaços: + + + + Decorate form fields: + Decora els camps dels formularis: + + + + Background color: + Color del fons: + + + + Paper color: + Color del paper: + + + + Presentation background color: + Color del fons de la presentació: + + + + Pages per row: + Pàgines per fila: + + + + + + px + px + + + + Page spacing: + Espaiat de pàgina: + + + + Thumbnail spacing: + Espaiat de miniatures: + + + + Thumbnail size: + Mida de les miniatures: + + + + Fit to viewport + Ajusta a l'àrea de visualització + + + + Document context menu: + Menú contextual del document: + + + + Tab context menu: + Menú contextual de la pestanya: + + + + Open in source editor: + Obre a l'editor de codi font: + + + + + %1 MB + %1 MB + + + + Cache size: + Mida de la memòria cau: + + + + Minimal scrolling: + Desplaçament mínim: + + + + Prefetch: + Precarrega: + + + + Prefetch distance: + Distància de precàrrega: + + + + Top + Superior + + + + Bottom + Inferior + + + + Left + Esquerra + + + + Right + Dreta + + + + Tab position: + Posició de la pestanya: + + + + As needed + Quan calgui + + + + Always + Sempre + + + + Exit after last tab: + Surt després de la última pestanya: + + + + Scrollable menus: + Menús amb scroll: + + + + Searchable menus: + Menús amb cerca: + + + + Zoom to selection: + Zoom a la selecció: + + + + + Never + Mai + + + + Settings + Ajusts + + + + Tab visibility: + Visibilitat de la pestanya: + + + + Spread tabs: + Barres de fitxes: + + + + New tab next to current tab: + Pestanya nova al costat de la pestanya actual: + + + + Recently used count: + Nombre d'utilitzats recentment: + + + + Recently closed count: + Nombre de tancats recentment: + + + + Extended search dock: + Lloc de cerca estesa: + + + + Toggle tool and menu bars with fullscreen: + Canvia les barres de menú i eines a pantalla completa: + + + + File tool bar: + Barra d'eines de fitxer: + + + + Edit tool bar: + Barra d'eines d'edició: + + + + View tool bar: + Barra d'eines de visualització: + + + + Use page label: + Utilitza l'etiqueta de la pàgina: + + + + Document title as tab title: + Títol de document com a títol de barra: + + + + Current page in window title: + Pàgina actual al títol de la finestra: + + + + Instance name in window title: + Nom de la instància al títol de la finestra: + + + + Synchronize outline view: + Sincronitza la vista del contorn: + + + + Highlight current thumbnail: + Ressalta la miniatura actual: + + + + Limit thumbnails to results: + Limita les miniatures als resultats: + + + + Annotation overlay: + Superposició de les anotacions: + + + + Form field overlay: + Superposició dels camps dels formularis: + + + + Zoom: + Zoom: + + + + Rotate: + Gir: + + + + Scroll: + Desplaçament: + + + + Copy to clipboard: + Copia al porta-retalls: + + + + Add annotation: + Afegeix l'anotació: + + + + qpdfview::ShortcutHandler + + + Action + Acció + + + + Key sequence + Seqüència de tecles + + + + Skip backward + Omet enrere + + + + Skip forward + Omet endavant + + + + Move up + Mou cap amunt + + + + Move down + Mou cap avall + + + + Move left + Mou a l'esquerra + + + + Move right + Mou a la dreta + + + + qpdfview::TreeView + + + &Expand all + &Expandeix-ho tot + + + + &Collapse all + &Col·lapsa-ho tot: + + + diff --git a/translations/qpdfview_cs.ts b/translations/qpdfview_cs.ts new file mode 100644 index 0000000..a53ebe3 --- /dev/null +++ b/translations/qpdfview_cs.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Obrázek (%1) + + + + Size + Velikost + + + + Resolution + Rozlišení + + + + Depth + Hloubka + + + + + + + + + Format + Formát + + + + Monochrome + Jednobarevné + + + + Indexed + Indexováno + + + + 32 bits RGB + 32 bitový RGB + + + + 32 bits ARGB + 32 bitový ARGB + + + + 16 bits RGB + 16 bitový RGB + + + + 24 bits RGB + 24 bitový RGB + + + + Model::PdfDocument + + + Linearized + Linearizovaný + + + + Name + Název + + + + Type + Typ + + + + Embedded + Vloženo + + + + Subset + Podmnožina + + + + File + Soubor + + + + + + + Yes + Ano + + + + PDF version + Verze PDF + + + + Encrypted + Zašifrováno + + + + + + + No + Ne + + + + Model::PdfPage + + + Information + Informace + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Pro přidávání nebo odstraňování poznámek je požadována verze 0.20.1 nebo vyšší knihovny Poppler. + + + + Model::PsDocument + + + Title + Název + + + + Created for + Vytvořeno pro + + + + Creator + Tvůrce + + + + Creation date + Datum vytvoření + + + + Format + Formát + + + + Language level + Úroveň jazyka + + + + QObject + + + An empty instance name is not allowed. + Prázdný název instance není povolen. + + + + An empty search text is not allowed. + Prázdný text k vyhledání není při vyhledávání povolen. + + + + Unknown command-line option '%1'. + Neznámá volba příkazového řádku '%1'. + + + + Using '--instance' requires an instance name. + Použití'--instance' vyžaduje název instance. + + + + Using '--instance' is not allowed without using '--unique'. + Použití'--instance' není povoleno bez použití '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Název instance musí obsahovat pouze znaky "[A-Z][a-z][0-9]_" a nesmí začínat číslem. + + + + Using '--search' requires a search text. + Použití'--search' vyžaduje text k vyhledání. + + + + Could not prepare signal handler. + Nepodařilo se připravit zacházení se signálem. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift a Ctrl + + + + Shift and Alt + Shift a Alt + + + + Ctrl and Alt + Ctrl a Alt + + + + Right mouse button + Pravé tlačítko myši + + + + Middle mouse button + Prostřední tlačítko myši + + + + None + Žádná + + + + qpdfview::BookmarkDialog + + + Bookmark + Záložka + + + + Page: + Strana: + + + + Label: + Štítek: + + + + Comment: + Poznámka: + + + + Modified: + Změněno: + + + + qpdfview::BookmarkMenu + + + &Open + &Otevřít + + + + Open in new &tab + Otevřít v nové &kartě + + + + &Remove bookmark + &Odstranit záložku + + + + qpdfview::Database + + + Jump to page %1 + Skočit na stranu %1 + + + + qpdfview::DocumentView + + + + Information + Informace + + + + The source editor has not been set. + Editor zdrojového textu nebyl nastaven. + + + + Opening URL is disabled in the settings. + Otevření adresy (URL) je v nastavení zakázáno. + + + + Warning + Varování + + + + + SyncTeX data for '%1' could not be found. + Nepodařilo se najít data SyncTeX pro '%1'. + + + + Printing '%1'... + Tiskne se '%1'... + + + + Unlock %1 + Odemknout %1 + + + + Password: + Heslo: + + + + Page %1 + Strana %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Uložit... + + + + Save and open... + Uložit a otevřít... + + + + Save file attachment + Uložit přílohu souboru + + + + + Warning + Varování + + + + Could not open file attachment saved to '%1'. + Nepodařilo se otevřít přílohu souboru uloženou do '%1'. + + + + Could not save file attachment to '%1'. + Nepodařilo se uložit přílohu souboru so '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Písma + + + + qpdfview::HelpDialog + + + Help + Nápověda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_cs.html + + + + Find previous + Najít předchozí + + + + Find next + Najít další + + + + qpdfview::MainWindow + + + Toggle tool bars + Přepnout nástrojové pruhy + + + + Toggle menu bar + Přepnout pruh s nabídkou + + + + + + + + + + + + + + Warning + Varování + + + + + Could not open '%1'. + Nepodařilo se otevřít '%1'. + + + + Copy file path + Kopírovat cestu souboru + + + + Select file path + Vybrat cestu souboru + + + + Close all tabs + Zavřít všechny karty + + + + Close all tabs but this one + Zavřít všechny karty kromě této + + + + Close all tabs to the left + Zavřít všechny karty nalevo + + + + Close all tabs to the right + Zavřít všechny karty napravo + + + + + Open + Otevřít + + + + Open in new tab + Otevřít v nové kartě + + + + + + Could not refresh '%1'. + Nepodařilo se obnovit '%1'. + + + + Save copy + Uložit kopii + + + + Could not save copy at '%1'. + Nepodařilo se uložit kopii v '%1'. + + + + Save as + Uložit jako + + + + + Move to instance + Jít na instanci + + + + + Failed to access instance '%1'. + Nepodařilo se přistoupit k instanci '%1'. + + + + + + Could not save as '%1'. + Nepodařilo se uložit jako '%1'. + + + + Could not print '%1'. + Nepodařilo se vytisknout '%1'. + + + + Set first page + Nastavit první stranu + + + + Select the first page of the body matter: + Vybrat první stranu + + + + Jump to page + Přejít na stranu + + + + Page: + Strana: + + + + Jump to page %1 + Skočit na stranu %1 + + + + About qpdfview + O programu qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview je prohlížeč dokumentů s kartami používající Qt.</p><p>Tato verze zahrnuje:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Podpora PDF pomocí Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Podpora PS pomocí libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Podpora DjVu pomocí DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Podpora PDF pomocí Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Podpora tisku pomocí CUPS %1</li> + + + + &Edit bookmark + &Upravit záložku + + + + The document '%1' has been modified. Do you want to save your changes? + Dokument '%1' byl změněn. Chcete uložit své změny? + + + + Page width + Šířka strany + + + + Page size + Velikost strany + + + + Match &case + Rozlišovat velká a malá &písmena + + + + Whole &words + Celá &slova + + + + Highlight &all + Zvýraznit &vše + + + + &Open... + &Otevřít... + + + + Open in new &tab... + Otevřít v nové &kartě... + + + + Open &copy in new tab + Otevřít &kopii v nové kartě + + + + Move to &instance... + Jít na &instanci... + + + + &Refresh + &Obnovit + + + + Information + Informace + + + + Instance-to-instance communication requires D-Bus support. + Komunikace od instance k instanci vyžaduje podporu pro D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Podívejte se na <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a>, kde naleznete další informace.</p><p>&copy; %1 The qpdfview developers</p> + + + + Save &as... + Uložit &jako... + + + + Save &copy... + Uložit &kopii... + + + + &Print... + &Tisk... + + + + E&xit + &Ukončit + + + + &Previous page + &Předchozí strana + + + + &Next page + &Další strana + + + + &First page + P&rvní strana + + + + &Last page + Pos&lední strana + + + + &Set first page... + &Nastavit první stranu... + + + + &Jump to page... + Pře&jít na stranu... + + + + Jump &backward + Skočit &zpět + + + + Jump for&ward + Skočit &vpřed + + + + &Search... + &Hledat... + + + + Find previous + Najít předchozí + + + + Find next + Najít další + + + + Cancel search + Zrušit hledání + + + + &Copy to clipboard + &Kopírovat do schránky + + + + &Add annotation + &Přidat poznámku + + + + Settings... + Nastavení... + + + + &Continuous + &Průběžně + + + + &Two pages + &Dvě strany + + + + Two pages &with cover page + Dvě strany &s titulní stranou + + + + &Multiple pages + &Více stran + + + + Right to left + Zprava doleva + + + + Zoom &in + &Přiblížit + + + + Zoom &out + &Oddálit + + + + Original &size + Původní &velikost + + + + Fit to page width + Přizpůsobit šířce strany + + + + Fit to page size + Přizpůsobit velikosti strany + + + + Rotate &left + Otočit v&levo + + + + Rotate &right + Otočit v&pravo + + + + Invert colors + Obrátit barvy + + + + Convert to grayscale + Převést na odstíny šedi + + + + Trim margins + Oříznout okraje + + + + Darken with paper color + Ztmavit s barvou papíru + + + + Lighten with paper color + Zesvětlit s barvou papíru + + + + Fonts... + Písma... + + + + &Fullscreen + &Celá obrazovka + + + + &Presentation... + &Promítání... + + + + &Previous tab + &Předchozí karta + + + + &Next tab + &Další karta + + + + &Close tab + &Zavřít kartu + + + + Close &all tabs + Zavřít &všechny karty + + + + Close all tabs &but current tab + Zavřít všechny karty &kromě nynější karty + + + + Restore &most recently closed tab + Obnovit &naposledy zavřenou kartu + + + + &Previous bookmark + &Předchozí záložka + + + + &Next bookmark + &Další záložka + + + + &Add bookmark + &Přidat záložku + + + + Open copy in new &window + Otevřít kopii v novém &okně + + + + Split view horizontally... + Rozdělit pohled vodorovně... + + + + Split view vertically... + Rozdělit pohled svisle... + + + + Close current view + Zavřít nynější pohled + + + + Thumb&nails + &Náhledy + + + + Book&marks + &Záložky + + + + Composition + Přizpůsobení barev + + + + + &Remove bookmark + &Odstranit záložku + + + + Edit '%1' at %2,%3... + Upravit '%1' at %2,%3... + + + + Open containing &folder + Otevřít obsahující &složku + + + + &Save + &Uložit + + + + Remove all bookmarks + Odstranit všechny záložky + + + + &Contents + &Obsah + + + + &About + O &programu + + + + + &File + &Soubor + + + + + &Edit + Úp&ravy + + + + + &View + &Pohled + + + + &Outline + &Osnova + + + + &Properties + &Vlastnosti + + + + &Search + &Hledání + + + + &Tool bars + &Nástrojové panely + + + + &Docks + Postranní p&anely + + + + &Tabs + &Karty + + + + &Bookmarks + &Záložky + + + + &Help + &Nápověda + + + + + Choose instance + Vybrat instanci + + + + + Instance: + Instance: + + + + qpdfview::PageItem + + + Go to page %1. + Jít na stranu %1. + + + + Go to page %1 of file '%2'. + Jít na stranu %1 souboru '%2'. + + + + Open '%1'. + Otevřít '%1'. + + + + Edit form field '%1'. + Upravit formulářové pole '%1'. + + + + Copy &text + Kopírovat &text + + + + &Select text + &Vybrat text + + + + Copy &image + Kopírovat &obrázek + + + + Save image to &file... + Uložit obrázek do &souboru... + + + + Save image to file + Uložit obrázek do souboru + + + + Warning + Varování + + + + Could not save image to file '%1'. + Nepodařilo se uložit obrázek do souboru '%1'. + + + + Add &text + Přidat &text + + + + Add &highlight + Přidat &zvýraznění + + + + &Copy link address + &Kopírovat adresu odkazu + + + + &Select link address + &Vybrat adresu odkazu + + + + &Remove annotation + &Odstranit poznámku + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Vyhlazování: + + + + Text antialiasing: + Vyhlazování textu: + + + + + None + Žádné + + + + Full + Úplné + + + + Reduced + Omezené + + + + + Text hinting: + Instruování textu: + + + + Ignore paper color: + Nevšímat si barvy papíru: + + + + Overprint preview: + Náhled přetisku: + + + + Solid + Vyplněný + + + + Shaped + Ohraničený + + + + Thin line mode: + Režim tenké čáry: + + + + Splash + Úvodní obrazovka + + + + Arthur + Artur + + + + Backend: + Jádro: + + + + qpdfview::PluginHandler + + + Image (%1) + Obrázek (%1) + + + + Compressed (%1) + Zabaleno (%1) + + + + Supported formats (%1) + Podporované formáty (%1) + + + + Could not decompress '%1'! + Nepodařilo se rozbalit '%1'! + + + + Could not match file type of '%1'! + Nepodařilo se porovnat typ souboru '%1'! + + + + Critical + Vážné + + + + Could not load plug-in for file type '%1'! + Nepodařilo se nahrát přídavný modul pro typ souboru '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Umístit na stranu: + + + + Page ranges: + Rozsah stran: + + + + All pages + Všechny strany + + + + Even pages + Sudé strany + + + + Odd pages + Liché strany + + + + Page set: + Soubor stran: + + + + Single page + Jedna strana + + + + Two pages + Dvě strany + + + + Four pages + Čtyři strany + + + + Six pages + Šest stran + + + + Nine pages + Devět stran + + + + Sixteen pages + Šestnáct stran + + + + Number-up: + Přepočítat: + + + + Bottom to top and left to right + Zezdola nahoru a zleva doprava + + + + Bottom to top and right to left + Zezdola nahoru a zprava doleva + + + + Left to right and bottom to top + Zleva doprava a zezdola nahoru + + + + Left to right and top to bottom + Zleva doprava a shora dolů + + + + Right to left and bottom to top + Zprava doleva a zezdola nahoru + + + + Right to left and top to bottom + Zprava doleva a shora dolů + + + + Top to bottom and left to right + Shora dolů a zleva doprava + + + + Top to bottom and right to left + Shora dolů a zprava doleva + + + + Number-up layout: + Přepočítat rozmístění: + + + + Extended options + Pokročilé volby + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bity vyhlazování grafiky: + + + + Text antialias bits: + Bity vyhlazování textu: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Nedávno zavřené + + + + &Clear list + S&mazat seznam + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Nedávno &použité + + + + &Clear list + S&mazat seznam + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> výskytů + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> výskytů na straně <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Hledat '%1'... + + + + qpdfview::SettingsDialog + + + General + Obecné + + + + &Behavior + &Chování + + + + &Graphics + &Grafika + + + + &Interface + &Rozhraní + + + + &Shortcuts + &Zkratky + + + + &Modifiers + &Modifikátory + + + + Defaults + Výchozí + + + + Defaults on current tab + Výchozí na nynější kartě + + + + Mouse wheel modifiers + Modifikátory kolečka myši + + + + Mouse button modifiers + Modifikátory tlačítka myši + + + + Open URL: + Otevřít adresu (URL): + + + + Auto-refresh: + Obnovit automaticky: + + + + + + + + + + + + Effective after restart. + Účinné po opětovném spuštění. + + + + Track recently used: + Sledovat nedávno použité: + + + + Keep recently closed: + Uchovat nedávno zavřené: + + + + Restore tabs: + Obnovit karty: + + + + Restore bookmarks: + Obnovit záložky: + + + + Restore per-file settings: + Obnovit nastavení souborů: + + + + min + min + + + + Save database interval: + Uložit databázový interval + + + + Synchronize presentation: + Ovládat promítání: + + + + Default + Výchozí + + + + Presentation screen: + Promítací obrazovka: + + + + Synchronize split views: + Seřídit rozdělené pohledy: + + + + Zoom factor: + Násobek zvětšení: + + + + Parallel search execution: + Provádění souběžného vyhledávání: + + + + ms + ms + + + + None + Žádný + + + + Highlight duration: + Doba trvání zvýraznění: + + + + Highlight color: + Barva zvýraznění: + + + + Annotation color: + Barva poznámky: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' je nahrazeno absolutní souborovou cestou. '%2' příp. '%3' je nahrazeno číslem řádku popřípadě sloupce. + + + + Source editor: + Editor zdroje: + + + + Use tiling: + Použít dláždění: + + + + Keep obsolete pixmaps: + Zachovat zastaralé pixmapy: + + + + Use device pixel ratio: + Použít poměr pixelu zařízení: + + + + Decorate pages: + Obtáhnout strany: + + + + Decorate links: + Obtáhnout odkazy: + + + + Decorate form fields: + Obtáhnout formulářová pole: + + + + Background color: + Barva pozadí: + + + + Paper color: + Barva papíru: + + + + Presentation background color: + Barva pozadí promítání: + + + + Pages per row: + Stran na řádek: + + + + + + px + px + + + + Page spacing: + Odstup stran: + + + + Thumbnail spacing: + Odstup náhledů: + + + + Thumbnail size: + Velikost náhledů: + + + + Fit to viewport + Přizpůsobit oblasti pohledu + + + + Document context menu: + Související nabídka k dokumentu: + + + + Tab context menu: + Související nabídka ke kartě + + + + Open in source editor: + Otevřít v editoru zdroje: + + + + + %1 MB + %1 MB + + + + Cache size: + Velikost vyrovnávací paměti: + + + + Minimal scrolling: + Nejmenší posun obrazu: + + + + Prefetch: + Přednatažení: + + + + Prefetch distance: + Vzdálenost přednatažení: + + + + Top + Nahoře + + + + Bottom + Dole + + + + Left + Vlevo + + + + Right + Vpravo + + + + Tab position: + Umístění karet: + + + + As needed + Podle potřeby + + + + Always + Vždy + + + + Exit after last tab: + Ukončit po poslední kartě: + + + + Scrollable menus: + Utíkající nabídky: + + + + Searchable menus: + Prohledávatelné nabídky: + + + + Zoom to selection: + Přiblížit výběr + + + + + Never + Nikdy + + + + Settings + Nastavení + + + + Tab visibility: + Viditelnost karet: + + + + Spread tabs: + Roztáhnout karty: + + + + New tab next to current tab: + Nová karta vedle nynější karty: + + + + Recently used count: + Počet nedávno použitých: + + + + Recently closed count: + Počet nedávno zavřených: + + + + Extended search dock: + Panel pro rozšířené hledání: + + + + Toggle tool and menu bars with fullscreen: + Přepnout nástrojové pruhy a pruh s nabídkou při zobrazení na celou obrazovkou + + + + File tool bar: + Panel nástrojů pro soubor: + + + + Edit tool bar: + Panel nástrojů pro úpravy: + + + + View tool bar: + Panel nástrojů pro pohled: + + + + Use page label: + Použít popis strany: + + + + Document title as tab title: + Název dokumentu jako název karty: + + + + Current page in window title: + Nynější strana v názvu okna: + + + + Instance name in window title: + Název instance v názvu okna: + + + + Synchronize outline view: + Zvýraznit položku osnovy: + + + + Highlight current thumbnail: + Zvýraznit nynější náhled: + + + + Limit thumbnails to results: + Omezit náhledy na výsledky: + + + + Annotation overlay: + Vložené poznámky: + + + + Form field overlay: + Vložené formulářové pole: + + + + Zoom: + Zvětšení: + + + + Rotate: + Otočit: + + + + Scroll: + Posun obrazu: + + + + Copy to clipboard: + Kopírovat do schránky: + + + + Add annotation: + Přidat poznámku: + + + + qpdfview::ShortcutHandler + + + Action + Činnost + + + + Key sequence + Klávesová zkratka + + + + Skip backward + Skočit zpět + + + + Skip forward + Skočit vpřed + + + + Move up + Posunout nahoru + + + + Move down + Posunout dolů + + + + Move left + Posunout doleva + + + + Move right + Posunout doprava + + + + qpdfview::TreeView + + + &Expand all + &Rozbalit vše + + + + &Collapse all + &Sbalit vše + + + diff --git a/translations/qpdfview_da.ts b/translations/qpdfview_da.ts new file mode 100644 index 0000000..0b0e167 --- /dev/null +++ b/translations/qpdfview_da.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Billede (%1) + + + + Size + Størrelse + + + + Resolution + Opløsning + + + + Depth + Dybde + + + + + + + + + Format + Format + + + + Monochrome + Monokrom + + + + Indexed + Indekseret + + + + 32 bits RGB + 32 bit RGB + + + + 32 bits ARGB + 32 bit ARGB + + + + 16 bits RGB + 16 bit RGB + + + + 24 bits RGB + 24 bit RGB + + + + Model::PdfDocument + + + Linearized + Lineariseret + + + + Name + Navn + + + + Type + Type + + + + Embedded + Indlejret + + + + Subset + Undersæt + + + + File + Fil + + + + + + + Yes + Ja + + + + PDF version + PDF-version + + + + Encrypted + Krypteret + + + + + + + No + Nej + + + + Model::PdfPage + + + Information + Information + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Version 0.20.1 eller højere af Poppler-biblioteket kræves for at tilføje eller fjerne annotationer. + + + + Model::PsDocument + + + Title + Titel + + + + Created for + Oprettet for + + + + Creator + Skaber + + + + Creation date + Oprettelsesdato + + + + Format + Format + + + + Language level + Sprogniveau + + + + QObject + + + An empty instance name is not allowed. + Navnet på instansen kan ikke stå tomt. + + + + An empty search text is not allowed. + En tom søgetekst er ikke tilladt. + + + + Unknown command-line option '%1'. + Ukendt kommandolinje-tilvalg '%1'. + + + + Using '--instance' requires an instance name. + Anvendes '--instance' kræver det et navn på den instans. + + + + Using '--instance' is not allowed without using '--unique'. + Det er ikke tilladt at bruge '--instance' uden også at bruge '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Et instansnavn må kun indeholde tegnene "[A-Z][a-z][0-9]_" og må ikke begynde med et tal. + + + + Using '--search' requires a search text. + Brug af '--search' kræver en søgetekst. + + + + Could not prepare signal handler. + Kunne ikke klargøre signalhåndteringen. + + + + QShortcut + + + Shift + Skift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Skift og Ctrl + + + + Shift and Alt + Skift og Alt + + + + Ctrl and Alt + Ctrl og Alt + + + + Right mouse button + Højre museknap + + + + Middle mouse button + Midterste museknap + + + + None + Ingen + + + + qpdfview::BookmarkDialog + + + Bookmark + Bogmærke + + + + Page: + Side: + + + + Label: + Etiket: + + + + Comment: + Kommentar: + + + + Modified: + Ændret: + + + + qpdfview::BookmarkMenu + + + &Open + &Åbn + + + + Open in new &tab + Åbn i ny&t faneblad + + + + &Remove bookmark + F&jern bogmærke + + + + qpdfview::Database + + + Jump to page %1 + Hop til side %1 + + + + qpdfview::DocumentView + + + + Information + Information + + + + The source editor has not been set. + Kilderedigeringsprogrammet er ikke blevet sat. + + + + Opening URL is disabled in the settings. + Åbning af URL er deaktiveret i indstillingerne. + + + + Warning + Advarsel + + + + + SyncTeX data for '%1' could not be found. + SyncTeX-data for '%1' kunne ikke findes. + + + + Printing '%1'... + Udskriver '%1'... + + + + Unlock %1 + Lås %1 op + + + + Password: + Adgangskode: + + + + Page %1 + Side %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Gem... + + + + Save and open... + Gem og åbn... + + + + Save file attachment + Gem filvedhæftning + + + + + Warning + Advarsel + + + + Could not open file attachment saved to '%1'. + Kunne ikke åbne filvedhæftning som blev gemt til '%1'. + + + + Could not save file attachment to '%1'. + Kunne ikke gemme filvedhæftning til '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Skrifttyper + + + + qpdfview::HelpDialog + + + Help + Hjælp + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Find forrige + + + + Find next + Find næste + + + + qpdfview::MainWindow + + + Toggle tool bars + Værktøjslinje til/fra + + + + Toggle menu bar + Menu til/fra + + + + + + + + + + + + + + Warning + Advarsel + + + + + Could not open '%1'. + Kunne ikke åbne '%1'. + + + + Copy file path + Kopiér filsti + + + + Select file path + Vælg filsti + + + + Close all tabs + Luk alle faneblade + + + + Close all tabs but this one + Luk alle faneblade undtagen dette + + + + Close all tabs to the left + Luk alle faneblade til venstre + + + + Close all tabs to the right + Luk alle faneblade til højre + + + + + Open + Åbn + + + + Open in new tab + Åbn i nyt faneblad + + + + + + Could not refresh '%1'. + Kunne ikke opdatere '%1'. + + + + Save copy + Gem kopi + + + + Could not save copy at '%1'. + Kunne ikke gemme kopi i '%1'. + + + + Save as + Gem som + + + + + Move to instance + Flyt til instans + + + + + Failed to access instance '%1'. + Kunne ikke tilgå instans '%1'. + + + + + + Could not save as '%1'. + Kunne ikke gemme som '%1'. + + + + Could not print '%1'. + Kunne ikke udskrive '%1'. + + + + Set first page + Sæt første side + + + + Select the first page of the body matter: + Vælg den første side af body matter: + + + + Jump to page + Gå til side + + + + Page: + Side: + + + + Jump to page %1 + Hop til side %1 + + + + About qpdfview + Om qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview er en dokumentfremviser med faneblade som bruger Qt.</p><p>Denne version inkluderer:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF-understøttelse ved brug af Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS-understøttelse ved brug af libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu-understøttelse ved brug af DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF-understøttelse ved brug af Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Udskrivning-understøttelse ved brug af CUPS %1</li> + + + + &Edit bookmark + &Rediger bogmærke + + + + The document '%1' has been modified. Do you want to save your changes? + Dokumentet '%1' er blevet ændret. Vil du gemme dine ændringer? + + + + Page width + Sidebredde + + + + Page size + Sidestørrelse + + + + Match &case + &Versalfølsom + + + + Whole &words + Hele &ord + + + + Highlight &all + Marker &alle + + + + &Open... + &Åbn... + + + + Open in new &tab... + Åbn i nyt &faneblad... + + + + Open &copy in new tab + Åbn &kopi i nyt faneblad + + + + Move to &instance... + Flyt til &instans... + + + + &Refresh + &Opdater + + + + Information + Information + + + + Instance-to-instance communication requires D-Bus support. + Instans-til-instans-kommunikation kræver understøttelse af D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Se <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for mere information.</p><p>&copy; %1 qpdfview-udviklerne</p> + + + + Save &as... + Gem &som... + + + + Save &copy... + Gem &kopi... + + + + &Print... + &Udskriv... + + + + E&xit + &Afslut + + + + &Previous page + &Forrige side + + + + &Next page + &Næste side + + + + &First page + Første &side + + + + &Last page + &Sidste side + + + + &Set first page... + &Sæt første side... + + + + &Jump to page... + &Gå til side... + + + + Jump &backward + Hop &tilbage + + + + Jump for&ward + Hop &fremad + + + + &Search... + &Søg... + + + + Find previous + Find forrige + + + + Find next + Find næste + + + + Cancel search + Annuller søgning + + + + &Copy to clipboard + &Kopiér til udklipsholder + + + + &Add annotation + Tilføj &notat + + + + Settings... + Indstillinger... + + + + &Continuous + &Fortløbende + + + + &Two pages + &To sider + + + + Two pages &with cover page + To sider &med forside + + + + &Multiple pages + &Flere sider + + + + Right to left + Højre mod venstre + + + + Zoom &in + Zoom &ind + + + + Zoom &out + Zoom &ud + + + + Original &size + Oprindelig &størrelse + + + + Fit to page width + Tilpas sidebredden + + + + Fit to page size + Tilpas sidestørrelsen + + + + Rotate &left + Roter til &venstre + + + + Rotate &right + Roter til &højre + + + + Invert colors + Inverter farver + + + + Convert to grayscale + Konverter til gråtone + + + + Trim margins + Trim margener + + + + Darken with paper color + Mørkere med papirsfarve + + + + Lighten with paper color + Lysere med papirsfarve + + + + Fonts... + Skrifttyper... + + + + &Fullscreen + &Fuldskærm + + + + &Presentation... + &Præsentation... + + + + &Previous tab + &Forrige faneblad + + + + &Next tab + &Næste faneblad + + + + &Close tab + &Luk faneblad + + + + Close &all tabs + Luk &alle faneblade + + + + Close all tabs &but current tab + Luk alle faneblade &undtagen det nuværende + + + + Restore &most recently closed tab + Gendan &seneste lukkede faneblad + + + + &Previous bookmark + &Forrige bogmærke + + + + &Next bookmark + &Næste bogmærke + + + + &Add bookmark + &Tilføj bogmærke + + + + Open copy in new &window + Åbn kopi i nyt &vindue + + + + Split view horizontally... + Opdel visning vandret... + + + + Split view vertically... + Opdel visning lodret... + + + + Close current view + Luk nuværende visning + + + + Thumb&nails + &Miniature + + + + Book&marks + &Bogmærker + + + + Composition + Komposition + + + + + &Remove bookmark + F&jern bogmærke + + + + Edit '%1' at %2,%3... + Rediger '%1' ved %2,%3... + + + + Open containing &folder + Åbn indenholdende &mappe + + + + &Save + &Gem + + + + Remove all bookmarks + Fjern alle bogmærker + + + + &Contents + &Indhold + + + + &About + &Om + + + + + &File + &Filer + + + + + &Edit + &Rediger + + + + + &View + &Vis + + + + &Outline + &Oversigt + + + + &Properties + &Egenskaber + + + + &Search + &Søg + + + + &Tool bars + &Værktøjslinjer + + + + &Docks + &Paneler + + + + &Tabs + F&aneblade + + + + &Bookmarks + &Bogmærker + + + + &Help + &Hjælp + + + + + Choose instance + Vælg instans + + + + + Instance: + Instans: + + + + qpdfview::PageItem + + + Go to page %1. + Gå til side %1. + + + + Go to page %1 of file '%2'. + Gå til side %1 i filen "%2". + + + + Open '%1'. + Åbn "%1". + + + + Edit form field '%1'. + Rediger formularfeltet '%1'. + + + + Copy &text + Kopiér &tekst + + + + &Select text + &Vælg tekst + + + + Copy &image + Kopiér &billede + + + + Save image to &file... + Gem billede til &fil... + + + + Save image to file + Gam billede til fil + + + + Warning + Advarsel + + + + Could not save image to file '%1'. + Kunne ikke gemme billede til fil '%1'. + + + + Add &text + Tilføj &tekst + + + + Add &highlight + Tilføj &markering + + + + &Copy link address + &Kopiér linkadresse + + + + &Select link address + &Vælg linkadresse + + + + &Remove annotation + &Fjern annotering + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Udjævning: + + + + Text antialiasing: + Udjævning af tekst: + + + + + None + Ingen + + + + Full + Fuld + + + + Reduced + Reduceret + + + + + Text hinting: + Hintning af tekst: + + + + Ignore paper color: + Ignorer papirsfarve: + + + + Overprint preview: + Forhåndsvisning af overprint: + + + + Solid + Ensfarvet + + + + Shaped + Formet + + + + Thin line mode: + Tilstand for tynd linje: + + + + Splash + Splash + + + + Arthur + Forfatter + + + + Backend: + Motor: + + + + qpdfview::PluginHandler + + + Image (%1) + Billede (%1) + + + + Compressed (%1) + Komprimeret (%1) + + + + Supported formats (%1) + Understøttede formater (%1) + + + + Could not decompress '%1'! + Kunne ikke udpakke '%1'! + + + + Could not match file type of '%1'! + Kunne ikke matche filetype af '%1'! + + + + Critical + Kritisk + + + + Could not load plug-in for file type '%1'! + Kunne ikke indlsæse plugin for filtypen '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Tilpas til side: + + + + Page ranges: + Sideinterval: + + + + All pages + Alle sider + + + + Even pages + Lige sider + + + + Odd pages + Ulige sider + + + + Page set: + Sidesæt: + + + + Single page + Én side + + + + Two pages + To sider + + + + Four pages + Fire sider + + + + Six pages + Seks sider + + + + Nine pages + Ni sider + + + + Sixteen pages + Seksten siger + + + + Number-up: + Nummer-op: + + + + Bottom to top and left to right + Bund til top og venstre til højre + + + + Bottom to top and right to left + Bund til top og højre til venstre + + + + Left to right and bottom to top + Venstre til højre og bund til top + + + + Left to right and top to bottom + Venstre til højre og top til bund + + + + Right to left and bottom to top + Højre til venstre og bund til top + + + + Right to left and top to bottom + Højre til venstre og top til bund + + + + Top to bottom and left to right + Top til bund og venstre til højre + + + + Top to bottom and right to left + Top til bund og højre til venstre + + + + Number-up layout: + Interval for nummer-op: + + + + Extended options + Udvidede valgmuligheder + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Udjævningsbit for grafik: + + + + Text antialias bits: + Udjævningsbit for tekst: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Seneste lukkede + + + + &Clear list + &Ryd liste + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Senest &brugte + + + + &Clear list + &Ryd liste + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> forekomster + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> forekomster på side <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Søg efter '%1'... + + + + qpdfview::SettingsDialog + + + General + Generelt + + + + &Behavior + &Opførsel + + + + &Graphics + G&rafik + + + + &Interface + &Grænseflade + + + + &Shortcuts + &Genveje + + + + &Modifiers + &Tilpasninger + + + + Defaults + Standarder + + + + Defaults on current tab + Standarder på nuværende faneblad + + + + Mouse wheel modifiers + Tilpasninger for musehjul + + + + Mouse button modifiers + Tilpasninger for museknap + + + + Open URL: + Åbn URL: + + + + Auto-refresh: + Automatisk genindlæsning: + + + + + + + + + + + + Effective after restart. + Benyttes efter genstart. + + + + Track recently used: + Husk senest anvendte: + + + + Keep recently closed: + Behold seneste lukkede: + + + + Restore tabs: + Gendan faneblade: + + + + Restore bookmarks: + Gendan bogmærker: + + + + Restore per-file settings: + Gendan indstillinger pr. fil: + + + + min + min + + + + Save database interval: + Interval for gemning af database: + + + + Synchronize presentation: + Synkroniser præsentation: + + + + Default + Standard + + + + Presentation screen: + Præsentationsskærm + + + + Synchronize split views: + Visninger for synkroniseret opdeling: + + + + Zoom factor: + Zoomfaktor: + + + + Parallel search execution: + Eksekvering af parallel søgning: + + + + ms + ms + + + + None + Ingen + + + + Highlight duration: + Fremhæv varighed: + + + + Highlight color: + Fremhævelsesfarve: + + + + Annotation color: + Annoteringsfarve: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' erstattes af den absolutte filsti. '%2' og '%3' erstattes hhv. af linje- og kolonnenummer. + + + + Source editor: + Kilderedigering: + + + + Use tiling: + Brug fliselægning: + + + + Keep obsolete pixmaps: + Behold forældede pixelkort: + + + + Use device pixel ratio: + Brug enhedens pixelforhold: + + + + Decorate pages: + Pynt sider: + + + + Decorate links: + Pynt henvisninger: + + + + Decorate form fields: + Pynt formularfelter: + + + + Background color: + Baggrundsfarve: + + + + Paper color: + Papirfarve: + + + + Presentation background color: + Baggrundsfarve for præsentation: + + + + Pages per row: + Sider pr. række: + + + + + + px + px + + + + Page spacing: + Sideafstand: + + + + Thumbnail spacing: + Miniatureafstand: + + + + Thumbnail size: + Miniaturestørrelse: + + + + Fit to viewport + Tilpas til visningsområde + + + + Document context menu: + Genvejsmenu for dokument: + + + + Tab context menu: + Genvejsmenu for faneblad: + + + + Open in source editor: + Åbn i kilderedigeringsprogram: + + + + + %1 MB + %1 MB + + + + Cache size: + Cache-størrelse: + + + + Minimal scrolling: + Minimal rulning: + + + + Prefetch: + Forudindlæs: + + + + Prefetch distance: + Afstand for afhent på forkant: + + + + Top + Øverst + + + + Bottom + Nederst + + + + Left + Venstre + + + + Right + Højre + + + + Tab position: + Fanebladsplacering: + + + + As needed + Efter behov + + + + Always + Altid + + + + Exit after last tab: + Afslut efter sidste faneblad: + + + + Scrollable menus: + Rulbare menuer: + + + + Searchable menus: + Søgbare menuer: + + + + Zoom to selection: + Zoom til markering: + + + + + Never + Aldrig + + + + Settings + Indstillinger + + + + Tab visibility: + Synlighed af faneblad: + + + + Spread tabs: + Spred faneblade: + + + + New tab next to current tab: + Nyt faneblad ved siden af nuværende faneblad: + + + + Recently used count: + Antal seneste brugte: + + + + Recently closed count: + Antal seneste lukket: + + + + Extended search dock: + Dok for udvidet søgning: + + + + Toggle tool and menu bars with fullscreen: + Værktøjs- og menulinjer med fuldskærm til/fra: + + + + File tool bar: + Filværktøjslinje: + + + + Edit tool bar: + Redigeringsværktøjslinje: + + + + View tool bar: + Vis-værktøjslinje: + + + + Use page label: + Brug sideetiket: + + + + Document title as tab title: + Dokumenttitel som fanebladetitel: + + + + Current page in window title: + Nuværende side i vinduestitel: + + + + Instance name in window title: + Instansnavn i vinduestitel: + + + + Synchronize outline view: + Visning for synkroniseret omrids: + + + + Highlight current thumbnail: + Fremhæv nuværende miniature: + + + + Limit thumbnails to results: + Begræns miniaturer til resultater: + + + + Annotation overlay: + Overlægning for annotering: + + + + Form field overlay: + Overlægning for formularfelt: + + + + Zoom: + Zoom: + + + + Rotate: + Roter: + + + + Scroll: + Rul: + + + + Copy to clipboard: + Kopiér til udklipsholder: + + + + Add annotation: + Tilføj annotering: + + + + qpdfview::ShortcutHandler + + + Action + Handling + + + + Key sequence + Tastesekvens + + + + Skip backward + Spring tilbage + + + + Skip forward + Spring fremad + + + + Move up + Flyt op + + + + Move down + Flyt ned + + + + Move left + Flyt til venstre + + + + Move right + Flyt til højre + + + + qpdfview::TreeView + + + &Expand all + &Udfold alle + + + + &Collapse all + &Sammenfold alle + + + diff --git a/translations/qpdfview_de.ts b/translations/qpdfview_de.ts new file mode 100644 index 0000000..46b4ee5 --- /dev/null +++ b/translations/qpdfview_de.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Bild (%1) + + + + Size + Größe + + + + Resolution + Auflösung + + + + Depth + Farbtiefe + + + + + + + + + Format + Format + + + + Monochrome + Schwarzweiß + + + + Indexed + Indiziert + + + + 32 bits RGB + 32-Bit RGB + + + + 32 bits ARGB + 32-Bit ARGB + + + + 16 bits RGB + 16-Bit RGB + + + + 24 bits RGB + 24-Bit RGB + + + + Model::PdfDocument + + + Linearized + Linearisiert + + + + Name + Name + + + + Type + Typ + + + + Embedded + Eingebettet + + + + Subset + Teilmenge + + + + File + Datei + + + + + + + Yes + Ja + + + + PDF version + PDF-Version + + + + Encrypted + Verschlüsselt + + + + + + + No + Nein + + + + Model::PdfPage + + + Information + Hinweis + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Das Hinzufügen oder Entfernen von Anmerkungen benötigt die Poppler-Bibliothek in Version 0.20.1 oder höher. + + + + Model::PsDocument + + + Title + Titel + + + + Created for + Erstellt für + + + + Creator + Ersteller + + + + Creation date + Erstellungsdatum + + + + Format + Format + + + + Language level + Sprachniveau + + + + QObject + + + An empty instance name is not allowed. + Ein leerer Instanzname ist nicht zugelassen. + + + + An empty search text is not allowed. + Ein leerer Suchtext ist nicht zugelassen. + + + + Unknown command-line option '%1'. + Unbekannte Kommandozeilen-Option '%1'. + + + + Using '--instance' requires an instance name. + '--instance' benötigt einen Instanznamen. + + + + Using '--instance' is not allowed without using '--unique'. + '--instance' ist nur im Zusammenhang mit '--unique' zugelassen. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Ein Instanzname darf lediglich die Zeichen "[A-Z][a-z][0-9]_" enthalten und darf nicht mit einer Ziffer beginnen. + + + + Using '--search' requires a search text. + '--search' benötigt einen Suchtext. + + + + Could not prepare signal handler. + Konnte Signalbehandlung nicht vorbereiten. + + + + QShortcut + + + Shift + Umschalt + + + + Ctrl + Strg + + + + Alt + Alt + + + + Shift and Ctrl + Umschalt + Strg + + + + Shift and Alt + Umschalt + Alt + + + + Ctrl and Alt + Strg + Alt + + + + Right mouse button + Rechte Maustaste + + + + Middle mouse button + Mittlere Maustaste + + + + None + Nichts + + + + qpdfview::BookmarkDialog + + + Bookmark + Lesezeichen + + + + Page: + Seite: + + + + Label: + Beschriftung: + + + + Comment: + Kommentar: + + + + Modified: + Geändert: + + + + qpdfview::BookmarkMenu + + + &Open + Öff&nen + + + + Open in new &tab + In neuem &Tab öffnen + + + + &Remove bookmark + Lesezeichen &entfernen + + + + qpdfview::Database + + + Jump to page %1 + Gehe zu Seite %1 + + + + qpdfview::DocumentView + + + + Information + Hinweis + + + + The source editor has not been set. + Der Quelltexteditor wurde nicht gesetzt. + + + + Opening URL is disabled in the settings. + Das Öffnen von URL ist in den Einstellungen deaktiviert. + + + + Warning + Warnung + + + + + SyncTeX data for '%1' could not be found. + Keine SyncTeX-Daten für »%1« gefunden. + + + + Printing '%1'... + Drucke »%1« … + + + + Unlock %1 + %1 entsperren + + + + Password: + Kennwort: + + + + Page %1 + Seite %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Speichern... + + + + Save and open... + Speichern und Öffnen... + + + + Save file attachment + Dateianhang speichern + + + + + Warning + Warnung + + + + Could not open file attachment saved to '%1'. + Dateianhang in '%1' konnte nach dem Speichern nicht geöffnet werden. + + + + Could not save file attachment to '%1'. + Dateianhang konnte nicht in '%1' gespeichert werden. + + + + qpdfview::FontsDialog + + + Fonts + Schriftarten + + + + qpdfview::HelpDialog + + + Help + Hilfe + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_de.html + + + + Find previous + Rückwärts suchen + + + + Find next + Vorwärts suchen + + + + qpdfview::MainWindow + + + Toggle tool bars + Werkzeugleisten umschalten + + + + Toggle menu bar + Menüleiste umschalten + + + + + + + + + + + + + + Warning + Warnung + + + + + Could not open '%1'. + Konnte »%1« nicht öffnen. + + + + Copy file path + Dateipfad kopieren + + + + Select file path + Dateipfad auswählen + + + + Close all tabs + Alle Reiter schließen + + + + Close all tabs but this one + Alle Reiter bis auf diesen schließen + + + + Close all tabs to the left + Alle Reiter zur Linken schließen + + + + Close all tabs to the right + Alle Reiter zur Rechten schließen + + + + + Open + Öffnen + + + + Open in new tab + In neuem Reiter öffnen + + + + + + Could not refresh '%1'. + Konnte »%1« nicht aktualisieren. + + + + Save copy + Kopie speichern + + + + Could not save copy at '%1'. + Konnte keine Kopie unter »%1« speichern. + + + + Save as + Speichern unter + + + + + Move to instance + Gehe zu Sitzung + + + + + Failed to access instance '%1'. + Öffnen der Sitzung '%1' gescheitert + + + + + + Could not save as '%1'. + Konnte nicht unter '%1' speichern. + + + + Could not print '%1'. + Konnte »%1« nicht drucken. + + + + Set first page + Erste Seite setzen + + + + Select the first page of the body matter: + Wählen Sie die erste Seite des Hauptteils: + + + + Jump to page + Gehe zu Seite + + + + Page: + Seite: + + + + Jump to page %1 + Gehe zu Seite %1 + + + + About qpdfview + Über qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview ist ein Dokumentenbetrachter der Qt verwendet.</p><p>Diese Version enthält:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF-Unterstützung mittels Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS-Unterstützung mittels libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu-Unterstützung mittels DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF-Unterstützung mittels Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Druckunterstützung mittels CUPS %1</li> + + + + &Edit bookmark + Lesezeichen &bearbeiten + + + + The document '%1' has been modified. Do you want to save your changes? + Das Dokument »%1« wurde verändert. Möchten Sie Ihre Änderungen speichern? + + + + Page width + Seitenbreite + + + + Page size + Seitengröße + + + + Match &case + Groß-/&Kleinschreibung beachten + + + + Whole &words + Ganze &Worte + + + + Highlight &all + &Alle hervorheben + + + + &Open... + Öff&nen … + + + + Open in new &tab... + In neuem Rei&ter öffnen … + + + + Open &copy in new tab + &Kopie in neuem Reiter öffnen + + + + Move to &instance... + Gehe zu Sit&zung + + + + &Refresh + &Aktualisieren + + + + Information + Hinweis + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Speichern &unter … + + + + Save &copy... + &Kopie speichern + + + + &Print... + &Drucken … + + + + E&xit + &Beenden + + + + &Previous page + &Vorige Seite + + + + &Next page + &Nächste Seite + + + + &First page + &Erste Seite + + + + &Last page + &Letzte Seite + + + + &Set first page... + Erste Seite &setzen ... + + + + &Jump to page... + &Zu Seite springen … + + + + Jump &backward + Springe &rückwärts + + + + Jump for&ward + Springe vor&wärts + + + + &Search... + &Suchen … + + + + Find previous + Rückwarts suchen + + + + Find next + Vorwärts suchen + + + + Cancel search + Suche abbrechen + + + + &Copy to clipboard + In &Zwischenablage kopieren + + + + &Add annotation + &Anmerkung hinzufügen + + + + Settings... + Einstellungen … + + + + &Continuous + &Fortlaufend + + + + &Two pages + &Zweiseitig + + + + Two pages &with cover page + Zweiseitig &mit Titelseite + + + + &Multiple pages + Mehrere &Seiten + + + + Right to left + Rechts nach links + + + + Zoom &in + Ver&größern + + + + Zoom &out + Ver&kleinern + + + + Original &size + &Ursprüngliche Größe + + + + Fit to page width + An Seitenbreite anpassen + + + + Fit to page size + An Seitengröße anpassen + + + + Rotate &left + Nach &links drehen + + + + Rotate &right + Nach &rechts drehen + + + + Invert colors + Farben umkehren + + + + Convert to grayscale + In Graustufen umwandeln + + + + Trim margins + Ränder abschneiden + + + + Darken with paper color + Mit Papierfarbe abdunkeln + + + + Lighten with paper color + Mit Papierfarbe aufhellen + + + + Fonts... + Schriften … + + + + &Fullscreen + &Vollbild + + + + &Presentation... + &Präsentation … + + + + &Previous tab + &Vorheriger Reiter + + + + &Next tab + &Nächster Reiter + + + + &Close tab + Reiter &schließen + + + + Close &all tabs + &Alle Reiter schließen + + + + Close all tabs &but current tab + Alle Reiter &bis auf den aktuellen schließen + + + + Restore &most recently closed tab + Zuletzt geschlossenen Reiter &wiederherstellen + + + + &Previous bookmark + &Voriges Lesezeichen + + + + &Next bookmark + &Nächstes Lesezeichen + + + + &Add bookmark + Lesezeichen &hinzufügen + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + &Vorschaubilder + + + + Book&marks + Lese&zeichen + + + + Composition + Farbanpassung + + + + + &Remove bookmark + Lesezeichen &entfernen + + + + Edit '%1' at %2,%3... + Bearbeite '%1' an %2,%3... + + + + Open containing &folder + Öffne beinhaltendes &Verzeichnis + + + + &Save + &Speichern + + + + Remove all bookmarks + Alle Lesezeichen entfernen + + + + &Contents + &Inhalt + + + + &About + Ü&ber + + + + + &File + &Datei + + + + + &Edit + &Bearbeiten + + + + + &View + &Ansicht + + + + &Outline + &Gliederung + + + + &Properties + &Eigenschaften + + + + &Search + S&uchen + + + + &Tool bars + &Werkzeugleisten + + + + &Docks + &Paletten + + + + &Tabs + &Reiter + + + + &Bookmarks + &Lesezeichen + + + + &Help + &Hilfe + + + + + Choose instance + Sitzung auswählen + + + + + Instance: + Sitzung + + + + qpdfview::PageItem + + + Go to page %1. + Zu Seite %1 gehen. + + + + Go to page %1 of file '%2'. + Gehe zu Seite %1 in Datei »%2«. + + + + Open '%1'. + "%1" öffnen. + + + + Edit form field '%1'. + Formularfeld »%1« bearbeiten. + + + + Copy &text + &Text kopieren + + + + &Select text + Text aus&wählen + + + + Copy &image + &Bild kopieren + + + + Save image to &file... + Bild in &Datei speichern … + + + + Save image to file + Bild in Datei speichern + + + + Warning + Warnung + + + + Could not save image to file '%1'. + Konnte Bild nicht in Datei »%1« speichern. + + + + Add &text + &Text hinzufügen + + + + Add &highlight + &Hervorhebung hinzufügen + + + + &Copy link address + Verweisadresse &kopieren + + + + &Select link address + Verweisadresse aus&wählen + + + + &Remove annotation + &Anmerkung entfernen + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Kantenglättung: + + + + Text antialiasing: + Text-Kantenglättung: + + + + + None + Kein + + + + Full + Voll + + + + Reduced + Reduziert + + + + + Text hinting: + Text-Hinting: + + + + Ignore paper color: + Papierfarbe ignorieren: + + + + Overprint preview: + Überdruckvorschau: + + + + Solid + Gefüllt + + + + Shaped + Geprägt + + + + Thin line mode: + Modus für dünne Linien: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Unterbau: + + + + qpdfview::PluginHandler + + + Image (%1) + Bild (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Unterstützte Formate (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Konnte Dateityp von "%1" nicht bestimmen! + + + + Critical + Kritischer Fehler + + + + Could not load plug-in for file type '%1'! + Konnte Plug-in für Dateityp "%1" nicht laden! + + + + qpdfview::PrintDialog + + + Fit to page: + An Seitengröße anpassen: + + + + Page ranges: + Seitenbereiche: + + + + All pages + Alle Seiten + + + + Even pages + Gerade Seiten + + + + Odd pages + Ungerade Seiten + + + + Page set: + Seitenzahlen: + + + + Single page + Einzelne Seite + + + + Two pages + Zwei Seiten + + + + Four pages + Vier Seiten + + + + Six pages + Sechs Seiten + + + + Nine pages + Neun Seiten + + + + Sixteen pages + Sechzehn Seiten + + + + Number-up: + Seiten pro Blatt: + + + + Bottom to top and left to right + Von unten nach oben und links nach rechts + + + + Bottom to top and right to left + Von unten nach oben und rechts nach links + + + + Left to right and bottom to top + Von links nach rechts und unten nach oben + + + + Left to right and top to bottom + Von links nach rechts und oben nach unten + + + + Right to left and bottom to top + Von rechts nach links und unten nach oben + + + + Right to left and top to bottom + Von rechts nach links und oben nach unten + + + + Top to bottom and left to right + Von oben nach unten und links nach rechts + + + + Top to bottom and right to left + Von oben nach unten und rechts nach links + + + + Number-up layout: + Anordnung der Seiten: + + + + Extended options + Erweiterte Einstellungen + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits für Grafik-Kantenglättung: + + + + Text antialias bits: + Bits für Text-Kantenglättung: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Zuletzt &geschlossen + + + + &Clear list + Liste &leeren + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Zuletzt &verwendet + + + + &Clear list + Liste &leeren + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> Fundstellen + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> Fundstellen auf Seite <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Nach "%1" suchen ... + + + + qpdfview::SettingsDialog + + + General + Allgemein + + + + &Behavior + &Verhalten + + + + &Graphics + &Grafik + + + + &Interface + &Oberfläche + + + + &Shortcuts + &Tastenkürzel + + + + &Modifiers + &Modifikatoren + + + + Defaults + Vorgaben + + + + Defaults on current tab + Vorgaben auf aktuellem Reiter + + + + Mouse wheel modifiers + Mausradverhalten + + + + Mouse button modifiers + Maustasten Modifikation + + + + Open URL: + URL öffnen: + + + + Auto-refresh: + Automatische Aktualisierung: + + + + + + + + + + + + Effective after restart. + Nach Neustart wirksam. + + + + Track recently used: + Verwendete Dateien merken: + + + + Keep recently closed: + Geschlossene Reiter aufheben: + + + + Restore tabs: + Reiter wiederherstellen: + + + + Restore bookmarks: + Lesezeichen wiederherstellen: + + + + Restore per-file settings: + Dateieinstellungen wiederherstellen: + + + + min + Minuten + + + + Save database interval: + Speicherintervall: + + + + Synchronize presentation: + Präsentation synchronisieren: + + + + Default + Standard + + + + Presentation screen: + Präsentationsbildschirm: + + + + Synchronize split views: + + + + + Zoom factor: + Vergrößerungsfaktor: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Keine + + + + Highlight duration: + Dauer der Hervorhebungen: + + + + Highlight color: + Farbe der Hervorhebungen: + + + + Annotation color: + Farbe für Anmerkungen: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + »%1« wird durch den Pfad der Datei ersetzt. »%2« bzw. »%3« wird durch die Zeilen- bzw. Spaltennummer ersetzt. + + + + Source editor: + Quelltexteditor: + + + + Use tiling: + Kachelung verwenden: + + + + Keep obsolete pixmaps: + Veraltete Grafiken aufheben: + + + + Use device pixel ratio: + Gerätepixelverhältnis nutzen: + + + + Decorate pages: + Seiten absetzen: + + + + Decorate links: + Verweise hervorheben: + + + + Decorate form fields: + Formularfelder hervorheben: + + + + Background color: + Hintergrundfarbe: + + + + Paper color: + Papierfarbe: + + + + Presentation background color: + Präsentationshintergrundfarbe: + + + + Pages per row: + Seiten pro Zeile: + + + + + + px + px + + + + Page spacing: + Abstand der Seiten: + + + + Thumbnail spacing: + Abstand der Vorschaubilder: + + + + Thumbnail size: + Größe der Vorschaubilder: + + + + Fit to viewport + An Ansicht anpassen + + + + Document context menu: + Dokumentenkontextmenü: + + + + Tab context menu: + Reiterkontextmenü: + + + + Open in source editor: + Öffnen mit: + + + + + %1 MB + %1 MB + + + + Cache size: + Größe des Zwischenspeichers: + + + + Minimal scrolling: + Minimaler Bildlauf: + + + + Prefetch: + Vorausladen: + + + + Prefetch distance: + Reichweite des Vorausladens: + + + + Top + Oben + + + + Bottom + Unten + + + + Left + Links + + + + Right + Rechts + + + + Tab position: + Reiterposition: + + + + As needed + Bei Bedarf + + + + Always + Immer + + + + Exit after last tab: + Nach letztem Reiter beenden: + + + + Scrollable menus: + Laufende Menüs: + + + + Searchable menus: + Durchsuchbare Menüs: + + + + Zoom to selection: + Auswahl vergrößern: + + + + + Never + Niemals + + + + Settings + Einstellungen + + + + Tab visibility: + Reitersichtbarkeit: + + + + Spread tabs: + Reiter ausbreiten: + + + + New tab next to current tab: + Neuer Reiter neben aktuellem Reiter: + + + + Recently used count: + Anzahl verwendeter Dateien: + + + + Recently closed count: + Anzahl geschlossener Reiter: + + + + Extended search dock: + Erweiterte Suchansicht: + + + + Toggle tool and menu bars with fullscreen: + Werkzeug- und Menüleisten bei Vollbild umschalten: + + + + File tool bar: + Datei-Werkzeugleiste: + + + + Edit tool bar: + Bearbeiten-Werkzeugleiste: + + + + View tool bar: + Ansicht-Werkzeugleiste: + + + + Use page label: + Seitenbeschriftung verwenden: + + + + Document title as tab title: + Dokumententitel als Reitertitel: + + + + Current page in window title: + Aktuelle Seite im Fenstertitel: + + + + Instance name in window title: + Instanzname im Fenstertitel: + + + + Synchronize outline view: + Gliederung synchronisieren: + + + + Highlight current thumbnail: + Aktuelles Vorschaubild hervorheben: + + + + Limit thumbnails to results: + Vorschaubilder auf Ergebnisse beschränken: + + + + Annotation overlay: + Eingebettet dargestellte Anmerkungen: + + + + Form field overlay: + Eingebettet dargestellte Formularfelder: + + + + Zoom: + Skalieren: + + + + Rotate: + Rotieren: + + + + Scroll: + Bildlauf: + + + + Copy to clipboard: + In Zwischenablage kopieren: + + + + Add annotation: + Anmerkung hinzufügen: + + + + qpdfview::ShortcutHandler + + + Action + Aktion + + + + Key sequence + Tastenkürzel + + + + Skip backward + Rückwärts springen + + + + Skip forward + Vorwärts springen + + + + Move up + Nach oben + + + + Move down + Nach unten + + + + Move left + Nach links + + + + Move right + Nach rechts + + + + qpdfview::TreeView + + + &Expand all + Alle &aufklappen + + + + &Collapse all + Alle &zuklappen + + + diff --git a/translations/qpdfview_el.ts b/translations/qpdfview_el.ts new file mode 100644 index 0000000..9f3f52a --- /dev/null +++ b/translations/qpdfview_el.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + Πληροφορίες + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Σελίδα: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Άνοιγμα + + + + Open in new &tab + Άνοιγμα σε νέα &καρτέλα + + + + &Remove bookmark + &Αφαίρεση σελιδοδείκτη + + + + qpdfview::Database + + + Jump to page %1 + Μετάβαση στη σελίδα %1 + + + + qpdfview::DocumentView + + + + Information + Πληροφορίες + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Το άνοιγμα υπερσυνδέσμων είναι απενεργοποιημένο στις ρυθμίσεις. + + + + Warning + Προειδοποίηση + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Εκτύπωση '%1'... + + + + Unlock %1 + Ξεκλείδωμα %1 + + + + Password: + Κωδικός: + + + + Page %1 + Σελίδα %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Αποθήκευση... + + + + Save and open... + Αποθήκευση και άνοιγμα... + + + + Save file attachment + Αποθήκευση επισυναπτόμενου αρχείου + + + + + Warning + Προειδοποίηση + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + Αδύνατη η αποθήκευση του επισυναπτόμενου αρχείου στο '%1'. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Αναζήτηση προηγουμένου + + + + Find next + Αναζήτηση επομένου + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Προειδοποίηση + + + + + Could not open '%1'. + Αδυναμία ανοίγματος του '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + Κλείσιμο όλων των καρτελών προς τα αριστερά + + + + Close all tabs to the right + Κλείσιμο όλων των καρτελών προς τα δεξιά + + + + + Open + Άνοιγμα + + + + Open in new tab + Άνοιγμα σε νέα καρτέλα + + + + + + Could not refresh '%1'. + Αδυναμία ανανέωσης του '%1'. + + + + Save copy + Αποθήκευση αντιγράφου + + + + Could not save copy at '%1'. + Αδυναμία αποθήκευσης και αντιγραφής στο '%1'. + + + + Save as + Αποθήκευση ως + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Αδύνατη η αποθήκευση ως '%1'. + + + + Could not print '%1'. + Αδυναμία εκτύπωσης του '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Μετάβαση στη σελίδα + + + + Page: + Σελίδα: + + + + Jump to page %1 + Μετάβαση στη σελίδα %1 + + + + About qpdfview + Σχετικά με το qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>Το qpdfview είναι μια εφαρμογή ανάγνωσης εγγράφων σε καρτέλες και χρησιμοποιεί Qt.</p><p>Αυτή η έκδοση περιλαμβάνει:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Το έγγραφο '%1' έχει τροποποιηθεί. Επιθυμείτε να αποθηκευθούν οι αλλαγές; + + + + Page width + Πλάτος σελίδας + + + + Page size + Μέγεθος σελίδας + + + + Match &case + Ταίριασμα &πεζών/κεφαλαίων + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + &Άνοιγμα... + + + + Open in new &tab... + Άνοιγμα σε νέα &καρτέλα... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Ανανέωση + + + + Information + Πληροφορίες + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Αποθήκευση &ως... + + + + Save &copy... + + + + + &Print... + &Εκτύπωση... + + + + E&xit + Έ&ξοδος + + + + &Previous page + &Προηγούμενη σελίδα + + + + &Next page + &Επόμενη σελίδα + + + + &First page + &Πρώτη σελίδα + + + + &Last page + &Τελευταία σελίδα + + + + &Set first page... + + + + + &Jump to page... + &Μετάβαση στη σελίδα... + + + + Jump &backward + Μετάβαση &πίσω + + + + Jump for&ward + + + + + &Search... + &Αναζήτηση... + + + + Find previous + Αναζήτηση προηγουμένου + + + + Find next + Αναζήτηση επομένου + + + + Cancel search + Ακύρωση αναζήτησης + + + + &Copy to clipboard + &Αντιγραφή στο πρόχειρο + + + + &Add annotation + &Προσθήκη σχολίου + + + + Settings... + Ρυθμίσεις... + + + + &Continuous + &Συνεχής + + + + &Two pages + &Δύο σελίδες + + + + Two pages &with cover page + &Δύο σελίδες &με εξώφυλλο + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + &Μεγέθυνση + + + + Zoom &out + &Σμίκρυνση + + + + Original &size + Αρχικό &μέγεθος + + + + Fit to page width + Προσαρμογή στο πλάτος της σελίδας + + + + Fit to page size + Ταίριασμα στο μέγεθος σελίδας + + + + Rotate &left + Περιστροφή &αριστερά + + + + Rotate &right + Περιστροφή δεξιά + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Γραμματοσειρές... + + + + &Fullscreen + &Πλήρης οθόνη + + + + &Presentation... + &Παρουσίαση + + + + &Previous tab + &Προηγούμενη καρτέλα + + + + &Next tab + &Επόμενη καρτέλα + + + + &Close tab + &Κλείσιμο καρτέλας + + + + Close &all tabs + Κλείσιμο &όλων των καρτέλων + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Προηγούμενος σελιδοδείκτης + + + + &Next bookmark + &Επόμενος σελιδοδείκτης + + + + &Add bookmark + &Προσθήκη σελιδοδείκτη + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Αφαίρεση σελιδοδείκτη + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Αφαίρεση όλων των σελιδοδεικτών + + + + &Contents + &Περιεχόμενα + + + + &About + &Σχετικά + + + + + &File + &Αρχείο + + + + + &Edit + &Επεξεργασία + + + + + &View + &Προβολή + + + + &Outline + + + + + &Properties + &Ιδιότητες + + + + &Search + &Αναζήτηση + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + &Καρτέλες + + + + &Bookmarks + &Σελιδοδείκτες + + + + &Help + &Βοήθεια + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Μετάβαση στη σελίδα %1. + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + Αντιγραφή &κειμένου + + + + &Select text + + + + + Copy &image + Αντιγραφή &εικόνας + + + + Save image to &file... + Αποθήκευση εικόνας στο &αρχείο... + + + + Save image to file + Αποθήκευση εικόνας σε αρχείο + + + + Warning + Προειδοποίηση + + + + Could not save image to file '%1'. + Αδυναμία αποθήκευσης εικόνας στο αρχείο '%1'. + + + + Add &text + Προσθήκη &κειμένου + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &Αφαίρεση σχολίου + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &Καθαρισμός λίστας + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Πρόσφατα &χρησιμοποιημένα + + + + &Clear list + &Καθαρισμός λίστας + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + Προεπιλογές + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Άνοιγμα υπερσυνδέσμου: + + + + Auto-refresh: + Αυτόματη ανανέωση: + + + + + + + + + + + + Effective after restart. + Εφαρμογή ύστερα από επανεκκίνηση + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + Επαναφορά καρτέλων: + + + + Restore bookmarks: + Επαναφορά σελιδοδεικτών: + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Συγχρονισμός παρουσίασης: + + + + Default + Προεπιλογή + + + + Presentation screen: + Οθόνη παρουσίασης: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + Μέγεθος εικόνας επισκόπησης: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Μέγεθος προσωρινής μνήμης: + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Κορυφή + + + + Bottom + Κάτω + + + + Left + Αριστερά + + + + Right + Δεξιά + + + + Tab position: + Θέση καρτέλας: + + + + As needed + + + + + Always + Πάντα + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Ποτέ + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_en_AU.ts b/translations/qpdfview_en_AU.ts new file mode 100644 index 0000000..dad64d6 --- /dev/null +++ b/translations/qpdfview_en_AU.ts @@ -0,0 +1,2005 @@ + + + + English (Australia) <en_AU@li.org> + Benjamin Donald-Wilson <benny@seffner.net> + 2012-12-09 00:18+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # English (Australia) translation for qpdfview +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Open + + + + Open in new &tab + Open in new &tab + + + + &Remove bookmark + &Remove bookmark + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Information + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Opening URL is disabled in the settings. + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Printing '%1'... + + + + Unlock %1 + Unlock %1 + + + + Password: + Password: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Warning + + + + + Could not open '%1'. + Could not open '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Open + + + + Open in new tab + Open in new tab + + + + + + Could not refresh '%1'. + Could not refresh '%1'. + + + + Save copy + + + + + Could not save copy at '%1'. + Could not save copy at '%1'. + + + + Save as + Save as + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Could not save as '%1'. + + + + Could not print '%1'. + Could not print '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Jump to page + + + + Page: + Page: + + + + Jump to page %1 + + + + + About qpdfview + About qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Page width + + + + Page size + Page size + + + + Match &case + Match &case + + + + Whole &words + + + + + Highlight &all + Highlight &all + + + + &Open... + &Open... + + + + Open in new &tab... + Open in new &tab... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Refresh + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Save &as... + + + + Save &copy... + + + + + &Print... + &Print... + + + + E&xit + + + + + &Previous page + &Previous page + + + + &Next page + &Next page + + + + &First page + &First page + + + + &Last page + &Last page + + + + &Set first page... + + + + + &Jump to page... + &Jump to page... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &Search... + + + + Find previous + Find previous + + + + Find next + Find next + + + + Cancel search + Cancel search + + + + &Copy to clipboard + &Copy to clipboard + + + + &Add annotation + &Add annotation + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + + MainWindow + + &Exit + &Exit + + + &Save copy... + &Save copy... + + + diff --git a/translations/qpdfview_en_GB.ts b/translations/qpdfview_en_GB.ts new file mode 100644 index 0000000..3662636 --- /dev/null +++ b/translations/qpdfview_en_GB.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Image (%1) + + + + Size + Size + + + + Resolution + Resolution + + + + Depth + Depth + + + + + + + + + Format + Format + + + + Monochrome + Monochrome + + + + Indexed + Indexed + + + + 32 bits RGB + 32 bits RGB + + + + 32 bits ARGB + 32 bits ARGB + + + + 16 bits RGB + 16 bits RGB + + + + 24 bits RGB + 24 bits RGB + + + + Model::PdfDocument + + + Linearized + Linearised + + + + Name + Name + + + + Type + Type + + + + Embedded + Embedded + + + + Subset + Subset + + + + File + File + + + + + + + Yes + Yes + + + + PDF version + PDF version + + + + Encrypted + Encrypted + + + + + + + No + No + + + + Model::PdfPage + + + Information + Information + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + Model::PsDocument + + + Title + Title + + + + Created for + Created for + + + + Creator + Creator + + + + Creation date + Creation date + + + + Format + Format + + + + Language level + Language level + + + + QObject + + + An empty instance name is not allowed. + An empty instance name is not allowed. + + + + An empty search text is not allowed. + An empty search text is not allowed. + + + + Unknown command-line option '%1'. + Unknown command-line option '%1'. + + + + Using '--instance' requires an instance name. + Using '--instance' requires an instance name. + + + + Using '--instance' is not allowed without using '--unique'. + Using '--instance' is not allowed without using '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + Using '--search' requires a search text. + Using '--search' requires a search text. + + + + Could not prepare signal handler. + Could not prepare signal handler. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift and Ctrl + + + + Shift and Alt + Shift and Alt + + + + Ctrl and Alt + Ctrl and Alt + + + + Right mouse button + Right mouse button + + + + Middle mouse button + Middle mouse button + + + + None + None + + + + qpdfview::BookmarkDialog + + + Bookmark + Bookmark + + + + Page: + Page: + + + + Label: + Label: + + + + Comment: + Comment: + + + + Modified: + Modified: + + + + qpdfview::BookmarkMenu + + + &Open + &Open + + + + Open in new &tab + Open in new &tab + + + + &Remove bookmark + &Remove bookmark + + + + qpdfview::Database + + + Jump to page %1 + Jump to page %1 + + + + qpdfview::DocumentView + + + + Information + Information + + + + The source editor has not been set. + The source editor has not been set. + + + + Opening URL is disabled in the settings. + Opening URL is disabled in the settings. + + + + Warning + Warning + + + + + SyncTeX data for '%1' could not be found. + SyncTeX data for '%1' could not be found. + + + + Printing '%1'... + Printing '%1'... + + + + Unlock %1 + Unlock %1 + + + + Password: + Password: + + + + Page %1 + Page %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Save... + + + + Save and open... + Save and open... + + + + Save file attachment + Save file attachment + + + + + Warning + Warning + + + + Could not open file attachment saved to '%1'. + Could not open file attachment saved to '%1'. + + + + Could not save file attachment to '%1'. + Could not save file attachment to '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Fonts + + + + qpdfview::HelpDialog + + + Help + Help + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_en_GB.html + + + + Find previous + Find previous + + + + Find next + Find next + + + + qpdfview::MainWindow + + + Toggle tool bars + Toggle toolbars + + + + Toggle menu bar + Toggle menu bar + + + + + + + + + + + + + + Warning + Warning + + + + + Could not open '%1'. + Could not open '%1'. + + + + Copy file path + Copy file path + + + + Select file path + Select file path + + + + Close all tabs + Close all tabs + + + + Close all tabs but this one + Close all tabs but this one + + + + Close all tabs to the left + Close all tabs to the left + + + + Close all tabs to the right + Close all tabs to the right + + + + + Open + Open + + + + Open in new tab + Open in new tab + + + + + + Could not refresh '%1'. + Could not refresh '%1'. + + + + Save copy + Save copy + + + + Could not save copy at '%1'. + Could not save copy at '%1'. + + + + Save as + Save as + + + + + Move to instance + Move to instance + + + + + Failed to access instance '%1'. + Failed to access instance '%1'. + + + + + + Could not save as '%1'. + Could not save as '%1'. + + + + Could not print '%1'. + Could not print '%1'. + + + + Set first page + Set first page + + + + Select the first page of the body matter: + Select the first page of the body matter: + + + + Jump to page + Jump to page + + + + Page: + Page: + + + + Jump to page %1 + Jump to page %1 + + + + About qpdfview + About qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF support using Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS support using libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu support using DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF support using Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Printing support using CUPS %1</li> + + + + &Edit bookmark + &Edit bookmark + + + + The document '%1' has been modified. Do you want to save your changes? + The document '%1' has been modified. Do you want to save your changes? + + + + Page width + Page width + + + + Page size + Page size + + + + Match &case + Match &case + + + + Whole &words + Whole &words + + + + Highlight &all + Highlight &all + + + + &Open... + &Open... + + + + Open in new &tab... + Open in new &tab... + + + + Open &copy in new tab + Open &copy in new tab + + + + Move to &instance... + Move to &instance... + + + + &Refresh + &Refresh + + + + Information + Information + + + + Instance-to-instance communication requires D-Bus support. + Instance-to-instance communication requires D-Bus support. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + Save &as... + Save &as... + + + + Save &copy... + Save &copy... + + + + &Print... + &Print... + + + + E&xit + E&xit + + + + &Previous page + &Previous page + + + + &Next page + &Next page + + + + &First page + &First page + + + + &Last page + &Last page + + + + &Set first page... + &Set first page... + + + + &Jump to page... + &Jump to page... + + + + Jump &backward + Jump &backward + + + + Jump for&ward + Jump for&ward + + + + &Search... + &Search... + + + + Find previous + Find previous + + + + Find next + Find next + + + + Cancel search + Cancel search + + + + &Copy to clipboard + &Copy to clipboard + + + + &Add annotation + &Add annotation + + + + Settings... + Settings... + + + + &Continuous + &Continuous + + + + &Two pages + &Two pages + + + + Two pages &with cover page + Two pages &with cover page + + + + &Multiple pages + &Multiple pages + + + + Right to left + Right to left + + + + Zoom &in + Zoom &in + + + + Zoom &out + Zoom &out + + + + Original &size + Original &size + + + + Fit to page width + Fit to page width + + + + Fit to page size + Fit to page size + + + + Rotate &left + Rotate &left + + + + Rotate &right + Rotate &right + + + + Invert colors + Invert colours + + + + Convert to grayscale + Convert to greyscale + + + + Trim margins + Trim margins + + + + Darken with paper color + Darken with paper colour + + + + Lighten with paper color + Lighten with paper colour + + + + Fonts... + Fonts... + + + + &Fullscreen + &Fullscreen + + + + &Presentation... + &Presentation... + + + + &Previous tab + &Previous tab + + + + &Next tab + &Next tab + + + + &Close tab + &Close tab + + + + Close &all tabs + Close &all tabs + + + + Close all tabs &but current tab + Close all tabs &but current tab + + + + Restore &most recently closed tab + Restore &most recently closed tab + + + + &Previous bookmark + &Previous bookmark + + + + &Next bookmark + &Next bookmark + + + + &Add bookmark + &Add bookmark + + + + Open copy in new &window + Open copy in new &window + + + + Split view horizontally... + Split view horizontally... + + + + Split view vertically... + Split view vertically... + + + + Close current view + Close current view + + + + Thumb&nails + Thumb&nails + + + + Book&marks + Book&marks + + + + Composition + Composition + + + + + &Remove bookmark + &Remove bookmark + + + + Edit '%1' at %2,%3... + Edit '%1' at %2,%3... + + + + Open containing &folder + Open containing &folder + + + + &Save + &Save + + + + Remove all bookmarks + Remove all bookmarks + + + + &Contents + &Contents + + + + &About + &About + + + + + &File + &File + + + + + &Edit + &Edit + + + + + &View + &View + + + + &Outline + &Outline + + + + &Properties + &Properties + + + + &Search + &Search + + + + &Tool bars + &Toolbars + + + + &Docks + &Docks + + + + &Tabs + &Tabs + + + + &Bookmarks + &Bookmarks + + + + &Help + &Help + + + + + Choose instance + Choose instance + + + + + Instance: + Instance: + + + + qpdfview::PageItem + + + Go to page %1. + Go to page %1. + + + + Go to page %1 of file '%2'. + Go to page %1 of file '%2'. + + + + Open '%1'. + Open '%1'. + + + + Edit form field '%1'. + Edit form field '%1'. + + + + Copy &text + Copy &text + + + + &Select text + &Select text + + + + Copy &image + Copy &image + + + + Save image to &file... + Save image to &file... + + + + Save image to file + Save image to file + + + + Warning + Warning + + + + Could not save image to file '%1'. + Could not save image to file '%1'. + + + + Add &text + Add &text + + + + Add &highlight + Add &highlight + + + + &Copy link address + &Copy link address + + + + &Select link address + &Select link address + + + + &Remove annotation + &Remove annotation + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiasing: + + + + Text antialiasing: + Text antialiasing: + + + + + None + None + + + + Full + Full + + + + Reduced + Reduced + + + + + Text hinting: + Text hinting: + + + + Ignore paper color: + Ignore paper colour: + + + + Overprint preview: + Overprint preview: + + + + Solid + Solid + + + + Shaped + Shaped + + + + Thin line mode: + Thin line mode: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Backend: + + + + qpdfview::PluginHandler + + + Image (%1) + Image (%1) + + + + Compressed (%1) + Compressed (%1) + + + + Supported formats (%1) + Supported formats (%1) + + + + Could not decompress '%1'! + Could not decompress '%1'! + + + + Could not match file type of '%1'! + Could not match file type of '%1'! + + + + Critical + Critical + + + + Could not load plug-in for file type '%1'! + Could not load plug-in for file type '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Fit to page: + + + + Page ranges: + Page ranges: + + + + All pages + All pages + + + + Even pages + Even pages + + + + Odd pages + Odd pages + + + + Page set: + Page set: + + + + Single page + Single page + + + + Two pages + Two pages + + + + Four pages + Four pages + + + + Six pages + Six pages + + + + Nine pages + Nine pages + + + + Sixteen pages + Sixteen pages + + + + Number-up: + Number-up: + + + + Bottom to top and left to right + Bottom to top and left to right + + + + Bottom to top and right to left + Bottom to top and right to left + + + + Left to right and bottom to top + Left to right and bottom to top + + + + Left to right and top to bottom + Left to right and top to bottom + + + + Right to left and bottom to top + Right to left and bottom to top + + + + Right to left and top to bottom + Right to left and top to bottom + + + + Top to bottom and left to right + Top to bottom and left to right + + + + Top to bottom and right to left + Top to bottom and right to left + + + + Number-up layout: + Number-up layout: + + + + Extended options + Extended options + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Graphics antialias bits: + + + + Text antialias bits: + Text antialias bits: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Recently closed + + + + &Clear list + &Clear list + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Recently &used + + + + &Clear list + &Clear list + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> occurrences + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> occurrences on page <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Search for '%1'... + + + + qpdfview::SettingsDialog + + + General + General + + + + &Behavior + &Behaviour + + + + &Graphics + &Graphics + + + + &Interface + &Interface + + + + &Shortcuts + &Shortcuts + + + + &Modifiers + &Modifiers + + + + Defaults + Defaults + + + + Defaults on current tab + Defaults on current tab + + + + Mouse wheel modifiers + Mouse wheel modifiers + + + + Mouse button modifiers + Mouse button modifiers + + + + Open URL: + Open URL: + + + + Auto-refresh: + Auto-refresh: + + + + + + + + + + + + Effective after restart. + Effective after restart. + + + + Track recently used: + Track recently used: + + + + Keep recently closed: + Keep recently closed: + + + + Restore tabs: + Restore tabs: + + + + Restore bookmarks: + Restore bookmarks: + + + + Restore per-file settings: + Restore per-file settings: + + + + min + min + + + + Save database interval: + Save database interval: + + + + Synchronize presentation: + Synchronise presentation: + + + + Default + Default + + + + Presentation screen: + Presentation screen: + + + + Synchronize split views: + Synchronise split views: + + + + Zoom factor: + Zoom factor: + + + + Parallel search execution: + Parallel search execution: + + + + ms + ms + + + + None + None + + + + Highlight duration: + Highlight duration: + + + + Highlight color: + Highlight colour: + + + + Annotation color: + Annotation colour: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + Source editor: + Source editor: + + + + Use tiling: + Use tiling: + + + + Keep obsolete pixmaps: + Keep obsolete pixmaps: + + + + Use device pixel ratio: + Use device pixel ratio: + + + + Decorate pages: + Decorate pages: + + + + Decorate links: + Decorate links: + + + + Decorate form fields: + Decorate form fields: + + + + Background color: + Background colour: + + + + Paper color: + Paper colour: + + + + Presentation background color: + Presentation background colour: + + + + Pages per row: + Pages per row: + + + + + + px + px + + + + Page spacing: + Page spacing: + + + + Thumbnail spacing: + Thumbnail spacing: + + + + Thumbnail size: + Thumbnail size: + + + + Fit to viewport + Fit to viewport + + + + Document context menu: + Document context menu: + + + + Tab context menu: + Tab context menu: + + + + Open in source editor: + Open in source editor: + + + + + %1 MB + %1 MB + + + + Cache size: + Cache size: + + + + Minimal scrolling: + Minimal scrolling: + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Prefetch distance: + + + + Top + Top + + + + Bottom + Bottom + + + + Left + Left + + + + Right + Right + + + + Tab position: + Tab position: + + + + As needed + As needed + + + + Always + Always + + + + Exit after last tab: + Exit after last tab: + + + + Scrollable menus: + Scrollable menus: + + + + Searchable menus: + Searchable menus: + + + + Zoom to selection: + Zoom to selection: + + + + + Never + Never + + + + Settings + Settings + + + + Tab visibility: + Tab visibility: + + + + Spread tabs: + Spread tabs: + + + + New tab next to current tab: + New tab next to current tab: + + + + Recently used count: + Recently used count: + + + + Recently closed count: + Recently closed count: + + + + Extended search dock: + Extended search dock: + + + + Toggle tool and menu bars with fullscreen: + Toggle tool and menu bars with fullscreen: + + + + File tool bar: + File toolbar: + + + + Edit tool bar: + Edit toolbar: + + + + View tool bar: + View toolbar: + + + + Use page label: + Use page label: + + + + Document title as tab title: + Document title as tab title: + + + + Current page in window title: + Current page in window title: + + + + Instance name in window title: + Instance name in window title: + + + + Synchronize outline view: + Synchronise outline view: + + + + Highlight current thumbnail: + Highlight current thumbnail: + + + + Limit thumbnails to results: + Limit thumbnails to results: + + + + Annotation overlay: + Annotation overlay: + + + + Form field overlay: + Form field overlay: + + + + Zoom: + Zoom: + + + + Rotate: + Rotate: + + + + Scroll: + Scroll: + + + + Copy to clipboard: + Copy to clipboard: + + + + Add annotation: + Add annotation: + + + + qpdfview::ShortcutHandler + + + Action + Action + + + + Key sequence + Key sequence + + + + Skip backward + Skip backward + + + + Skip forward + Skip forward + + + + Move up + Move up + + + + Move down + Move down + + + + Move left + Move left + + + + Move right + Move right + + + + qpdfview::TreeView + + + &Expand all + &Expand all + + + + &Collapse all + &Collapse all + + + diff --git a/translations/qpdfview_eo.ts b/translations/qpdfview_eo.ts new file mode 100644 index 0000000..2d8e2ec --- /dev/null +++ b/translations/qpdfview_eo.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + Informo + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + Vaka nomo de ekzemplero estas nepermesita. + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + Uzi je '--instance' necesigas nomon de ekzemplero. + + + + Using '--instance' is not allowed without using '--unique'. + Uzi je '--instance' estas ne permesita sen '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + La signaltraktilo ne estas preparebla. + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Neniu + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Paĝo: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + Malfermi + + + + Open in new &tab + Malfermi en nova langeto + + + + &Remove bookmark + Forigi legosignon + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Informo + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Malfermi je URL estas malŝaltita en la agordaĵoj. + + + + Warning + Averto + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Presado de '%1'... + + + + Unlock %1 + Malŝlosi je %1 + + + + Password: + Pasvorto: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Averto + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Serĉi antaŭan + + + + Find next + Serĉi sekvan + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Averto + + + + + Could not open '%1'. + '%1' ne estas malfermebla. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Malfermi + + + + Open in new tab + Malfermi en nova langeto + + + + + + Could not refresh '%1'. + '%1' ne estas aktualigebla. + + + + Save copy + Konservi ekzempleron + + + + Could not save copy at '%1'. + Ekzemplero ne estas konservebla ĉe '%1'. + + + + Save as + Konservi kiel + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Ne estas konservebla kiel '%1'. + + + + Could not print '%1'. + '%1' ne estas presebla. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Salti al paĝo + + + + Page: + Paĝo: + + + + Jump to page %1 + + + + + About qpdfview + Pri qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview estas langeta dokumentvidigilo uzante je Qt.</p><p>Ĉi tiu versio inkludas:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Larĝo de paĝo + + + + Page size + Grando de paĝo + + + + Match &case + Kongruigi usklecon + + + + Whole &words + + + + + Highlight &all + Emfazi ĉion + + + + &Open... + Malfermi... + + + + Open in new &tab... + Malfermi en nova langeto... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + Aktualigi + + + + Information + Informo + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Konservi kiel... + + + + Save &copy... + + + + + &Print... + Presi... + + + + E&xit + + + + + &Previous page + Antaŭa paĝo + + + + &Next page + Sekva paĝo + + + + &First page + Unua paĝo + + + + &Last page + Lasta paĝo + + + + &Set first page... + + + + + &Jump to page... + Salti al paĝo... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + Serĉi... + + + + Find previous + Serĉi antaŭan + + + + Find next + Serĉi sekvan + + + + Cancel search + Nuligi serĉon + + + + &Copy to clipboard + Kopii al tondejo + + + + &Add annotation + Enmeti noton + + + + Settings... + Agordoj... + + + + &Continuous + Kontinua + + + + &Two pages + Du paĝoj + + + + Two pages &with cover page + Du paĝoj kun kovrila paĝo + + + + &Multiple pages + Pluraj paĝoj + + + + Right to left + + + + + Zoom &in + Pligrandigi + + + + Zoom &out + Malpligrandigi + + + + Original &size + Origina grando + + + + Fit to page width + Adapti al larĝo de paĝo + + + + Fit to page size + Adapti al grando de paĝo + + + + Rotate &left + Turni maldekstren + + + + Rotate &right + Turni dekstren + + + + Invert colors + Inversigi kolorojn + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Tiparoj... + + + + &Fullscreen + Tutekrana + + + + &Presentation... + Prezentaĵo... + + + + &Previous tab + Antaŭa langeto + + + + &Next tab + Sekva langeto + + + + &Close tab + Fermi langeton + + + + Close &all tabs + Fermi ĉiujn langetojn + + + + Close all tabs &but current tab + Fermi ĉiujn langetojn escepte de la aktuala + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Antaŭa legosigno + + + + &Next bookmark + Sekva legosigno + + + + &Add bookmark + Enmeti legosignon + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Forigi legosignon + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Forigi ĉiujn legosignojn + + + + &Contents + &Enhavo + + + + &About + Pri + + + + + &File + Dosiero + + + + + &Edit + Redakti + + + + + &View + Vido + + + + &Outline + Resumo + + + + &Properties + Atributoj + + + + &Search + Serĉi + + + + &Tool bars + Ilobretoj + + + + &Docks + dokoj + + + + &Tabs + Langetoj + + + + &Bookmarks + Legosignoj + + + + &Help + Helpo + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Iri al paĝo %1. + + + + Go to page %1 of file '%2'. + Iri al paĝo %1 de dosiero '%2'. + + + + Open '%1'. + Malfermi '%1'. + + + + Edit form field '%1'. + Redakti kampon '%1' de la formularo. + + + + Copy &text + Kopii tekston + + + + &Select text + + + + + Copy &image + Kopii bildon + + + + Save image to &file... + Konservi bildon al dosiero... + + + + Save image to file + Konservi bildon al dosiero + + + + Warning + Averto + + + + Could not save image to file '%1'. + Bildo ne estas konservebla al dosiero '%1'. + + + + Add &text + Enmeti tekston + + + + Add &highlight + Enmeti kaj emfazi + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Forigi noton + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + Neniu + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + Vakigi liston + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Lastatempe uzita(j) + + + + &Clear list + Vakigi liston + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Ĝenerala + + + + &Behavior + Konduto + + + + &Graphics + Grafikoj + + + + &Interface + Fasado + + + + &Shortcuts + + + + + &Modifiers + Modifiloj + + + + Defaults + Aprioroj + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Malfermi je URL: + + + + Auto-refresh: + Aŭtomate aktualigi: + + + + + + + + + + + + Effective after restart. + Efikas post restarto. + + + + Track recently used: + Trako uzita antaŭnelonge: + + + + Keep recently closed: + + + + + Restore tabs: + Restaŭri langetojn: + + + + Restore bookmarks: + Restaŭri legosignojn: + + + + Restore per-file settings: + Restaŭri laŭdosierajn agordojn: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sinkronigi prezentaĵon: + + + + Default + Apriora + + + + Presentation screen: + Prezentaĵa fenestro: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Neniu + + + + Highlight duration: + Emfazi daŭron: + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' estas anstataŭigita de la absoluta vojo. '%2' kaj '%3' estas anstataŭigitaj de la nombro de linio aŭ kolumno respektive. + + + + Source editor: + Redaktinto de la font: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Dekoracii paĝojn: + + + + Decorate links: + Dekoracii ligilojn: + + + + Decorate form fields: + Dekoracii formularajn kampojn: + + + + Background color: + Fona koloro: + + + + Paper color: + Papera koloro: + + + + Presentation background color: + + + + + Pages per row: + Paĝoj en vico: + + + + + + px + + + + + Page spacing: + Paĝa interspaco: + + + + Thumbnail spacing: + Spaco inter miniaturoj: + + + + Thumbnail size: + Grando de miniaturo: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Grando de kaŝmemoro: + + + + Minimal scrolling: + + + + + Prefetch: + Antaŭakiro: + + + + Prefetch distance: + Distanco de antaŭakiro: + + + + Top + Supro + + + + Bottom + Malsupro + + + + Left + Maldekstra + + + + Right + Dekstra + + + + Tab position: + Pozicio de langeto: + + + + As needed + Laŭbezone + + + + Always + Ĉiam + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Neniam + + + + Settings + + + + + Tab visibility: + Langeta videblo: + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Dosiera ilobreto: + + + + Edit tool bar: + Ilobreto Redakti: + + + + View tool bar: + Ilobreto Vido: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Zomi: + + + + Rotate: + Turni: + + + + Scroll: + Rulumi: + + + + Copy to clipboard: + Kopii al tondejo: + + + + Add annotation: + Enmeti noton: + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + Etendi ĉiujn + + + + &Collapse all + Maletendi ĉiujn + + + diff --git a/translations/qpdfview_es.ts b/translations/qpdfview_es.ts new file mode 100644 index 0000000..cf418ff --- /dev/null +++ b/translations/qpdfview_es.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Imagen (%1) + + + + Size + Tamaño + + + + Resolution + Resolución + + + + Depth + Profundidad + + + + + + + + + Format + Formato + + + + Monochrome + Monocromo + + + + Indexed + Indexado + + + + 32 bits RGB + RGB de 32 bits + + + + 32 bits ARGB + ARGB de 32 bits + + + + 16 bits RGB + RGB de 16 bits + + + + 24 bits RGB + RGB de 24 bits + + + + Model::PdfDocument + + + Linearized + Linealizado + + + + Name + Nombre + + + + Type + Tipo + + + + Embedded + Incrustado + + + + Subset + Subconjunto + + + + File + Archivo + + + + + + + Yes + + + + + PDF version + Versión de PDF + + + + Encrypted + Cifrado + + + + + + + No + No + + + + Model::PdfPage + + + Information + Información + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Se requiere la versión 0.20.1 o superior de la biblioteca Poppler para añadir o eliminar anotaciones. + + + + Model::PsDocument + + + Title + Título + + + + Created for + Creado para + + + + Creator + Creador + + + + Creation date + Fecha de creación + + + + Format + Formato + + + + Language level + Nivel de lenguaje + + + + QObject + + + An empty instance name is not allowed. + No se permite un nombre de instancia vacío. + + + + An empty search text is not allowed. + No se permite un texto de búsqueda vacío. + + + + Unknown command-line option '%1'. + La opción de la línea de órdenes «%1» es desconocida. + + + + Using '--instance' requires an instance name. + El uso de «--instance» requiere un nombre de instancia. + + + + Using '--instance' is not allowed without using '--unique'. + No se permite el uso de «--instance» sin usar «--unique». + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Un nombre de instancia solo puede contener los caracteres «[A-Z][a-z][0-9]_» y no debe comenzar por un dígito. + + + + Using '--search' requires a search text. + El uso de «--search» requiere un término de búsqueda. + + + + Could not prepare signal handler. + No se pudo preparar el manejador de señales. + + + + QShortcut + + + Shift + Mayús + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Mayús y Ctrl + + + + Shift and Alt + Mayús y Alt + + + + Ctrl and Alt + Ctrl y Alt + + + + Right mouse button + Botón secundario del ratón + + + + Middle mouse button + Botón central del ratón + + + + None + Ninguno + + + + qpdfview::BookmarkDialog + + + Bookmark + Marcador + + + + Page: + Página: + + + + Label: + Etiqueta: + + + + Comment: + Comentario: + + + + Modified: + Modificado: + + + + qpdfview::BookmarkMenu + + + &Open + &Abrir + + + + Open in new &tab + Abrir en una pes&taña nueva + + + + &Remove bookmark + Eli&minar el marcador + + + + qpdfview::Database + + + Jump to page %1 + Ir a la página %1 + + + + qpdfview::DocumentView + + + + Information + Información + + + + The source editor has not been set. + No se ha definido el editor de código fuente. + + + + Opening URL is disabled in the settings. + Se ha desactivado la apertura de direcciones web en las preferencias. + + + + Warning + Aviso + + + + + SyncTeX data for '%1' could not be found. + No se encontraron los datos de SyncText para «%1». + + + + Printing '%1'... + Imprimiendo «%1»… + + + + Unlock %1 + Desbloquear %1 + + + + Password: + Contraseña: + + + + Page %1 + Página %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Guardar… + + + + Save and open... + Guardar y abrir… + + + + Save file attachment + Guardar el archivo adjunto + + + + + Warning + Aviso + + + + Could not open file attachment saved to '%1'. + No se pudo abrir el archivo adjunto guardado en «%1». + + + + Could not save file attachment to '%1'. + No se pudo guardar el archivo adjunto en «%1». + + + + qpdfview::FontsDialog + + + Fonts + Tipos de letra + + + + qpdfview::HelpDialog + + + Help + Ayuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_es.html + + + + Find previous + Buscar anterior + + + + Find next + Buscar siguiente + + + + qpdfview::MainWindow + + + Toggle tool bars + Mostrar/ocultar las barras de herramientas + + + + Toggle menu bar + Mostrar/ocultar la barra de menú + + + + + + + + + + + + + + Warning + Aviso + + + + + Could not open '%1'. + No se pudo abrir «%1». + + + + Copy file path + Copiar la ruta del archivo + + + + Select file path + Seleccionar la ruta del archivo + + + + Close all tabs + Cerrar todas las pestañas + + + + Close all tabs but this one + Cerrar todas las pestañas excepto esta + + + + Close all tabs to the left + Cerrar las pestañas de la izquierda + + + + Close all tabs to the right + Cerrar las pestañas de la derecha + + + + + Open + Abrir + + + + Open in new tab + Abrir en una pestaña nueva + + + + + + Could not refresh '%1'. + No se pudo actualizar «%1». + + + + Save copy + Guardar una copia + + + + Could not save copy at '%1'. + No se pudo guardar una copia en «%1». + + + + Save as + Guardar como + + + + + Move to instance + Mover a la instancia + + + + + Failed to access instance '%1'. + Error al acceder a la instancia «%1». + + + + + + Could not save as '%1'. + No se pudo guardar como «%1». + + + + Could not print '%1'. + No se pudo imprimir «%1». + + + + Set first page + Definir la primera página + + + + Select the first page of the body matter: + Seleccionar la primera página del cuerpo del documento: + + + + Jump to page + Ir a la página + + + + Page: + Página: + + + + Jump to page %1 + Ir a la página %1 + + + + About qpdfview + Acerca de qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview es un visor de documentos con pestañas que usa Qt.</p><p>Esta versión incluye:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Compatibilidad con PDF mediante Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Compatibilidad con PS mediante libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Compatibilidad con DjVu mediante DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Compatibilidad con PDF mediante Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Compatibilidad con la impresión mediante CUPS %1</li> + + + + &Edit bookmark + &Editar el marcador + + + + The document '%1' has been modified. Do you want to save your changes? + Se ha modificado el documento «%1». ¿Quiere guardar los cambios? + + + + Page width + Anchura de página + + + + Page size + Tamaño de página + + + + Match &case + Distinguir ma&yúsculas/minúsculas + + + + Whole &words + Pa&labras completas + + + + Highlight &all + Resaltar &todo + + + + &Open... + &Abrir + + + + Open in new &tab... + Abrir en una &pestaña nueva… + + + + Open &copy in new tab + Abrir una &copia en una pestaña nueva + + + + Move to &instance... + Mover a la &instancia... + + + + &Refresh + &Recargar + + + + Information + Información + + + + Instance-to-instance communication requires D-Bus support. + La comunicación de instancia a instancia requiere el apoyo de D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Consulte <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> para obtener más información.</p><p>&copy; %1 Los desarrolladores de qpdfview</p> + + + + Save &as... + Guardar &como… + + + + Save &copy... + Guardar una &copia... + + + + &Print... + Im&primir... + + + + E&xit + &Salir + + + + &Previous page + Página &anterior + + + + &Next page + Página &siguiente + + + + &First page + &Primera página + + + + &Last page + &Última página + + + + &Set first page... + &Definir como primera página... + + + + &Jump to page... + &Ir a la página… + + + + Jump &backward + Ir &hacia atrás + + + + Jump for&ward + Ir hacia ade&lante + + + + &Search... + Bu&scar... + + + + Find previous + Buscar anterior + + + + Find next + Buscar siguiente + + + + Cancel search + Cancelar la búsqueda + + + + &Copy to clipboard + &Copiar al portapapeles + + + + &Add annotation + &Añadir una anotación + + + + Settings... + Preferencias... + + + + &Continuous + &Continuo + + + + &Two pages + &Doble página + + + + Two pages &with cover page + Doble página con &portada + + + + &Multiple pages + &Múltiples páginas + + + + Right to left + De derecha a izquierda + + + + Zoom &in + Ace&rcar + + + + Zoom &out + Ale&jar + + + + Original &size + Tamaño &original + + + + Fit to page width + Ajustar al ancho de la página + + + + Fit to page size + Ajustar al tamaño de la página + + + + Rotate &left + Rotar a la &izquierda + + + + Rotate &right + Rotar a la &derecha + + + + Invert colors + Invertir los colores + + + + Convert to grayscale + Convertir a escala de grises + + + + Trim margins + Recortar los márgenes + + + + Darken with paper color + Oscurecer con el color del papel + + + + Lighten with paper color + Aclarar con el color del papel + + + + Fonts... + Tipos de letra… + + + + &Fullscreen + &Pantalla completa + + + + &Presentation... + Pre&sentación… + + + + &Previous tab + Pestaña &anterior + + + + &Next tab + Pestaña &siguiente + + + + &Close tab + &Cerrar la pestaña + + + + Close &all tabs + Cerrar &todas las pestañas + + + + Close all tabs &but current tab + Cerrar todas las pestañas &excepto la actual + + + + Restore &most recently closed tab + Restaurar la pestaña cerrada &más reciente + + + + &Previous bookmark + Marcador &anterior + + + + &Next bookmark + Marcador &siguiente + + + + &Add bookmark + &Añadir un marcador + + + + Open copy in new &window + Abrir una copia en una &ventana nueva + + + + Split view horizontally... + Dividir vista horizontalmente... + + + + Split view vertically... + Dividir vista verticalmente... + + + + Close current view + Cerrar la vista actual + + + + Thumb&nails + Miniat&uras + + + + Book&marks + &Marcadores + + + + Composition + Composición + + + + + &Remove bookmark + Eli&minar un marcador + + + + Edit '%1' at %2,%3... + Editar «%1» en %2, %3... + + + + Open containing &folder + Abrir la carpeta c&ontenedora + + + + &Save + &Guardar + + + + Remove all bookmarks + Eliminar todos los marcadores + + + + &Contents + &Contenido + + + + &About + &Acerca de + + + + + &File + &Archivo + + + + + &Edit + &Editar + + + + + &View + &Ver + + + + &Outline + Í&ndice + + + + &Properties + &Propiedades + + + + &Search + &Buscar + + + + &Tool bars + Barras de &herramientas + + + + &Docks + Paneles + + + + &Tabs + &Pestañas + + + + &Bookmarks + &Marcadores + + + + &Help + Ay&uda + + + + + Choose instance + Elegir una instancia + + + + + Instance: + Instancia: + + + + qpdfview::PageItem + + + Go to page %1. + Ir a la página %1. + + + + Go to page %1 of file '%2'. + Ir a la página %1 del archivo «%2». + + + + Open '%1'. + Abrir «%1» + + + + Edit form field '%1'. + Editar el campo de formulario «%1». + + + + Copy &text + Copiar el &texto + + + + &Select text + &Seleccionar el texto + + + + Copy &image + Copiar la &imagen + + + + Save image to &file... + G&uardar la imagen en un archivo… + + + + Save image to file + Guardar la imagen en un archivo + + + + Warning + Aviso + + + + Could not save image to file '%1'. + No se pudo guardar la imagen en el archivo «%1». + + + + Add &text + Añadir &texto + + + + Add &highlight + Añadir &resaltado + + + + &Copy link address + Cop&iar la dirección del enlace + + + + &Select link address + S&eleccionar la dirección del enlace + + + + &Remove annotation + &Eliminar la anotación + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Suavizado gráfico: + + + + Text antialiasing: + Suavizado del texto: + + + + + None + Ninguno + + + + Full + Completo + + + + Reduced + Reducido + + + + + Text hinting: + Optimización de la representación del texto: + + + + Ignore paper color: + Ignorar el color del papel: + + + + Overprint preview: + Vista previa de la sobreimpresión + + + + Solid + Sólido + + + + Shaped + Contorno + + + + Thin line mode: + Modo de línea fina: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Motor: + + + + qpdfview::PluginHandler + + + Image (%1) + Imagen (%1) + + + + Compressed (%1) + Comprimido (%1) + + + + Supported formats (%1) + Formatos compatibles (%1) + + + + Could not decompress '%1'! + ¡No se pudo descomprimir «%1»! + + + + Could not match file type of '%1'! + No se pudo encontrar el tipo de archivo de «%1». + + + + Critical + Crítico + + + + Could not load plug-in for file type '%1'! + No se pudo cargar el complemento para el tipo de archivo «%1». + + + + qpdfview::PrintDialog + + + Fit to page: + Ajustar a la página: + + + + Page ranges: + Intervalos de página: + + + + All pages + Todas las páginas + + + + Even pages + Páginas pares + + + + Odd pages + Páginas impares + + + + Page set: + Conjunto de páginas: + + + + Single page + Una sola página + + + + Two pages + Dos páginas + + + + Four pages + Cuatro páginas + + + + Six pages + Seis páginas + + + + Nine pages + Nueve páginas + + + + Sixteen pages + Dieciséis páginas + + + + Number-up: + Páginas por hoja: + + + + Bottom to top and left to right + De abajo a arriba y de izquierda a derecha + + + + Bottom to top and right to left + De abajo a arriba y de derecha a izquierda + + + + Left to right and bottom to top + De izquierda a derecha y de abajo a arriba + + + + Left to right and top to bottom + De izquierda a derecha y de arriba a abajo + + + + Right to left and bottom to top + De derecha a izquierda y de abajo hacia arriba + + + + Right to left and top to bottom + De derecha a izquierda y de arriba a abajo + + + + Top to bottom and left to right + De arriba a abajo y de izquierda a derecha + + + + Top to bottom and right to left + De arriba a abajo y de izquierda a derecha + + + + Number-up layout: + Disposición de las páginas: + + + + Extended options + Opciones extendidas + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Número de bits del suavizado gráfico: + + + + Text antialias bits: + Número de bits del suavizado del texto: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Cerrados recientemente + + + + &Clear list + &Limpiar lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Abiertos &recientemente + + + + &Clear list + &Limpiar lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> ocurrencias + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> ocurrencias en la página <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Buscar «%1»… + + + + qpdfview::SettingsDialog + + + General + General + + + + &Behavior + &Comportamiento + + + + &Graphics + &Gráficos + + + + &Interface + &Interfaz + + + + &Shortcuts + Acce&sos rápidos + + + + &Modifiers + &Modificadores + + + + Defaults + Valores por defecto + + + + Defaults on current tab + Valores por defecto en la pestaña actual + + + + Mouse wheel modifiers + Modificadores de la rueda del ratón + + + + Mouse button modifiers + Modificadores de los botones del ratón + + + + Open URL: + Abrir las direcciones web: + + + + Auto-refresh: + Actualizar automáticamente: + + + + + + + + + + + + Effective after restart. + Efectivo después de reiniciar + + + + Track recently used: + Conservar los archivos abiertos recientemente: + + + + Keep recently closed: + Conservar los archivos cerrados recientemente: + + + + Restore tabs: + Restaurar las pestañas: + + + + Restore bookmarks: + Restaurar los marcadores: + + + + Restore per-file settings: + Restaurar las preferencias para cada archivo: + + + + min + min + + + + Save database interval: + Intervalo de guardado de la base de datos: + + + + Synchronize presentation: + Sincronizar la presentación: + + + + Default + Por defecto + + + + Presentation screen: + Pantalla de presentación: + + + + Synchronize split views: + Sincronizar las vistas divididas: + + + + Zoom factor: + Factor de ampliación: + + + + Parallel search execution: + Ejecución de la búsqueda paralela: + + + + ms + ms + + + + None + Ninguno + + + + Highlight duration: + Duración del resaltado: + + + + Highlight color: + Color del resaltado: + + + + Annotation color: + Color de la anotación: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + «%1» se reemplaza por la ruta absoluta. «%2» y «%3» se reemplazan por el número de línea y el número de columna respectivamente. + + + + Source editor: + Editor de código fuente: + + + + Use tiling: + Usar el modo mosaico: + + + + Keep obsolete pixmaps: + Mantener los mapas de bits obsoletos: + + + + Use device pixel ratio: + Usar la relación de aspecto de pixel del dispositivo: + + + + Decorate pages: + Decorar las páginas: + + + + Decorate links: + Decorar los enlaces: + + + + Decorate form fields: + Decorar los campos de formulario: + + + + Background color: + Color del fondo: + + + + Paper color: + Color del papel: + + + + Presentation background color: + Color del fondo de la presentación: + + + + Pages per row: + Páginas por fila: + + + + + + px + px + + + + Page spacing: + Espaciado de página: + + + + Thumbnail spacing: + Espaciado de miniatura: + + + + Thumbnail size: + Tamaño de miniatura: + + + + Fit to viewport + Ajustar a la ventana + + + + Document context menu: + Menú contextual del documento: + + + + Tab context menu: + Menú contextual de la pestaña: + + + + Open in source editor: + Abrir en el editor de codigo fuente: + + + + + %1 MB + %1 MB + + + + Cache size: + Tamaño de la caché: + + + + Minimal scrolling: + Desplazamiento mínimo: + + + + Prefetch: + Precargar: + + + + Prefetch distance: + Distancia de la precarga: + + + + Top + Arriba + + + + Bottom + Abajo + + + + Left + Izquierda + + + + Right + Derecha + + + + Tab position: + Posición de las pestañas: + + + + As needed + Cuando haga falta + + + + Always + Siempre + + + + Exit after last tab: + Salir después de la última pestaña: + + + + Scrollable menus: + Menús con desplazamiento: + + + + Searchable menus: + Menús con búsqueda: + + + + Zoom to selection: + Ampliar la selección: + + + + + Never + Nunca + + + + Settings + Preferencias + + + + Tab visibility: + Visibilidad de las pestañas: + + + + Spread tabs: + Extender las pestañas: + + + + New tab next to current tab: + Pestaña nueva al lado de la pestaña actual: + + + + Recently used count: + Número de archivos abiertos recientemente: + + + + Recently closed count: + Número de archivos cerrados recientemente: + + + + Extended search dock: + Panel de búsqueda extendida: + + + + Toggle tool and menu bars with fullscreen: + Mostrar/ocultar las barras de menú y herramientas a pantalla completa: + + + + File tool bar: + Barra de herramientas Archivo: + + + + Edit tool bar: + Barra de herramientas Editar: + + + + View tool bar: + Barra de herramientas Ver: + + + + Use page label: + Usar la etiqueta de la página: + + + + Document title as tab title: + Título del documento como título de pestaña: + + + + Current page in window title: + Página actual en el título de la ventana: + + + + Instance name in window title: + Nombre de la instancia en el título de la ventana: + + + + Synchronize outline view: + Sincronizar el índice: + + + + Highlight current thumbnail: + Resaltar la miniatura actual: + + + + Limit thumbnails to results: + Limitar las miniaturas a los resultados: + + + + Annotation overlay: + Superponer las anotaciones: + + + + Form field overlay: + Superponer los campos de formulario: + + + + Zoom: + Ampliar: + + + + Rotate: + Rotar: + + + + Scroll: + Desplazar: + + + + Copy to clipboard: + Copiar al portapapeles: + + + + Add annotation: + Añadir un anotación: + + + + qpdfview::ShortcutHandler + + + Action + Acción + + + + Key sequence + Secuencia de teclas + + + + Skip backward + Ir hacia atrás + + + + Skip forward + Ir hacia adelante + + + + Move up + Mover hacia arriba + + + + Move down + Mover hacia abajo + + + + Move left + Mover a la izquierda + + + + Move right + Mover a la derecha + + + + qpdfview::TreeView + + + &Expand all + &Expandir todo + + + + &Collapse all + &Contraer todo + + + diff --git a/translations/qpdfview_eu.ts b/translations/qpdfview_eu.ts new file mode 100644 index 0000000..cd7c954 --- /dev/null +++ b/translations/qpdfview_eu.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + Informazioa + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Bat ere ez + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Orria: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Ireki + + + + Open in new &tab + Ireki &fitxa berrian + + + + &Remove bookmark + &Kendu laster-marka + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Informazioa + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + URLak irekitzea desgaituta dago ezarpenetan + + + + Warning + Abisua + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' inprimatzen... + + + + Unlock %1 + Desblokeatu %1 + + + + Password: + Pasahitza: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Abisua + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Bilatu aurrekoa + + + + Find next + Bilatu hurrengoa + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Abisua + + + + + Could not open '%1'. + Ezin izan da '%1' ireki. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Ireki + + + + Open in new tab + Ireki fitxa berrian + + + + + + Could not refresh '%1'. + Ezin izan da '%1' freskatu. + + + + Save copy + Gorde kopia + + + + Could not save copy at '%1'. + Ezin izan da '%1'(e)n kopia gorde. + + + + Save as + Gorde honela + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Ezin izan da '%1' bezala gorde. + + + + Could not print '%1'. + Ezin izan da '%1' inprimatu. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Joan orrira + + + + Page: + Orria: + + + + Jump to page %1 + + + + + About qpdfview + qpdfview-ri buruz + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Orriaren zabalera + + + + Page size + Orriaren neurria + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + Nabarmendu &guztiak + + + + &Open... + &Ireki... + + + + Open in new &tab... + Ireki &fitxa berrian... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Freskatu + + + + Information + Informazioa + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Gorde &honela... + + + + Save &copy... + + + + + &Print... + &Inprimatu... + + + + E&xit + + + + + &Previous page + &Aurreko orria + + + + &Next page + &Hurrengo orria + + + + &First page + &Lehen orria + + + + &Last page + A&zken orria + + + + &Set first page... + + + + + &Jump to page... + &Joan orrira... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &Bilatu... + + + + Find previous + Bilatu aurrekoa + + + + Find next + Bilatu hurrengoa + + + + Cancel search + Utzi bilaketa + + + + &Copy to clipboard + &Kopiatu arbelean + + + + &Add annotation + &Gehitu oharra + + + + Settings... + Ezarpenak... + + + + &Continuous + &Jarraia + + + + &Two pages + &Bi orri + + + + Two pages &with cover page + Bi orri &azalarekin + + + + &Multiple pages + &Hainbat orri + + + + Right to left + + + + + Zoom &in + &Handitu + + + + Zoom &out + &Txikitu + + + + Original &size + Jatorrizko &tamaina + + + + Fit to page width + Doitu orriaren zabalerara + + + + Fit to page size + Doitu orriaren tamainara + + + + Rotate &left + Biratu e&zkerrera + + + + Rotate &right + Biratu e&skuinera + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Letra-tipoak... + + + + &Fullscreen + &Pantaila osoa + + + + &Presentation... + &Aurkezpena... + + + + &Previous tab + &Aurreko fitxa + + + + &Next tab + &Hurrengo fitxa + + + + &Close tab + &Itxi fitxa + + + + Close &all tabs + Itxi fitxa &guztiak + + + + Close all tabs &but current tab + Itxi fitxa guztiak &unekoa ezik + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Aurreko laster-marka + + + + &Next bookmark + &Hurrengo laster-marka + + + + &Add bookmark + &Gehitu laster-marka + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Kendu laster-marka + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Kendu laster-marka guztiak + + + + &Contents + &Edukiak + + + + &About + &Honi buruz + + + + + &File + &Fitxategia + + + + + &Edit + &Editatu + + + + + &View + &Ikusi + + + + &Outline + + + + + &Properties + &Propietateak + + + + &Search + &Bilatu + + + + &Tool bars + &Tresna-barrak + + + + &Docks + + + + + &Tabs + &Fitxak + + + + &Bookmarks + &Laster-markak + + + + &Help + &Laguntza + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Joan %1 orrira + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + Editatu '%1' inprimaki-eremua. + + + + Copy &text + Kopiatu &testua + + + + &Select text + + + + + Copy &image + Kopiatu &irudia + + + + Save image to &file... + Gorde irudia &fitxategian... + + + + Save image to file + Gorde irudia fitxategian + + + + Warning + Abisua + + + + Could not save image to file '%1'. + Ezin izan da gorde irudia '%1' fitxategian. + + + + Add &text + Gehitu &testua + + + + Add &highlight + Gehitu &nabarmentzea + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &Kendu oharra + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + Bat ere ez + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &Garbitu zerrenda + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Azkenaldiak &erabiliak + + + + &Clear list + &Garbitu zerrenda + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + &Portaera + + + + &Graphics + &Grafikoak + + + + &Interface + &Interfazea + + + + &Shortcuts + + + + + &Modifiers + &Aldatzaileak + + + + Defaults + Lehenespenak + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Ireki URLa: + + + + Auto-refresh: + Freskatu automatikoki: + + + + + + + + + + + + Effective after restart. + Berrabiarazi ondoren du eragina. + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + Leheneratu fitxak: + + + + Restore bookmarks: + Leheneratu laster-markak: + + + + Restore per-file settings: + Leheneratu fitxategi bakoitzeko ezarpenak: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sinkronizatu aurkezpena: + + + + Default + Lehenetsia + + + + Presentation screen: + Aurkezpenaren pantaila: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Bat ere ez + + + + Highlight duration: + Nabarmentzearen iraupena: + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + Iturburu-editorea: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Apaindu orriak: + + + + Decorate links: + Apaindu estekak: + + + + Decorate form fields: + Apaindu inprimaki-eremuak: + + + + Background color: + Atzeko planoaren kolorea: + + + + Paper color: + Paperaren kolorea: + + + + Presentation background color: + + + + + Pages per row: + Orriak errenkadako: + + + + + + px + + + + + Page spacing: + Orri arteko tartea: + + + + Thumbnail spacing: + Koadro txikien arteko tartea: + + + + Thumbnail size: + Koadro txikien tamaina: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Cache-aren tamaina: + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Goia + + + + Bottom + Behea + + + + Left + Ezkerra + + + + Right + Eskuina + + + + Tab position: + Fitxaren kokapena: + + + + As needed + Behar denean + + + + Always + Beti + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Inoiz ez + + + + Settings + + + + + Tab visibility: + Fitxaren ikusgaitasuna: + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Fitxategia tresna-barra: + + + + Edit tool bar: + Editatu tresna-barra: + + + + View tool bar: + Ikusi tresna-barra: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + &Zabaldu dena + + + + &Collapse all + &Tolestu dena + + + diff --git a/translations/qpdfview_fa.ts b/translations/qpdfview_fa.ts new file mode 100644 index 0000000..875530e --- /dev/null +++ b/translations/qpdfview_fa.ts @@ -0,0 +1,1994 @@ + + + + Persian <fa@li.org> + Goudarz Jafari <Unknown> + 2017-09-26 20:39+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Persian translation for qpdfview +# Copyright (c) 2017 Rosetta Contributors and Canonical Ltd 2017 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2017. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + تصویر (%1) + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_fi.ts b/translations/qpdfview_fi.ts new file mode 100644 index 0000000..72b8147 --- /dev/null +++ b/translations/qpdfview_fi.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Kuva (%1) + + + + Size + Koko + + + + Resolution + Koko + + + + Depth + Syvyys + + + + + + + + + Format + + + + + Monochrome + Yksivärinen + + + + Indexed + Indeksoitu + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + Linearisoitu + + + + Name + Nimi + + + + Type + Tyyppi + + + + Embedded + Upotettu + + + + Subset + Osajoukko + + + + File + Tiedosto + + + + + + + Yes + Kyllä + + + + PDF version + PDF-versio + + + + Encrypted + Salattu + + + + + + + No + Ei + + + + Model::PdfPage + + + Information + Tiedot + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Huomautusten lisääminen tai poistaminen vaatiin Poppler-kirjaston version 0.20.1 tai uudemman. + + + + Model::PsDocument + + + Title + Otsikko + + + + Created for + + + + + Creator + Tekijä + + + + Creation date + Luomispäivä + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Vaihto + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Vaihto ja Ctrl + + + + Shift and Alt + Vaihto ja Alt + + + + Ctrl and Alt + Ctrl ja Ctrl + + + + Right mouse button + Hiiren oikea painike + + + + Middle mouse button + Hiiren keskimmäinen painike + + + + None + Ei mitään + + + + qpdfview::BookmarkDialog + + + Bookmark + Kirjanmerkki + + + + Page: + Sivu: + + + + Label: + Nimike: + + + + Comment: + Kommentti: + + + + Modified: + Muokattu: + + + + qpdfview::BookmarkMenu + + + &Open + &Avaa + + + + Open in new &tab + Avaa uudessa välilehdessä + + + + &Remove bookmark + Poista kirjanmerkki + + + + qpdfview::Database + + + Jump to page %1 + Siirry sivulle %1 + + + + qpdfview::DocumentView + + + + Information + Tiedot + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + URL-ositteiden avaaminen on otettu asetuksissa pois käytöstä. + + + + Warning + Varoitus + + + + + SyncTeX data for '%1' could not be found. + SyncTeX tietoja tiedostolle '%1' ei löydetty. + + + + Printing '%1'... + Tulostetaan tiedostoa '%1'... + + + + Unlock %1 + Lukitse %1 + + + + Password: + Salasana: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Tallenna... + + + + Save and open... + Tallenna ja avaa... + + + + Save file attachment + Tallenna liitetiedosto + + + + + Warning + Varoitus + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + Ohje + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Etsi edellinen + + + + Find next + Etsi seuraava + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Varoitus + + + + + Could not open '%1'. + Älä avaa kohdetta '%1'. + + + + Copy file path + Kopioi tiedostopolku + + + + Select file path + Valitse tiedostopolku + + + + Close all tabs + Sulje kaikki välilehdet + + + + Close all tabs but this one + Sulje kaikki paitsi tämä välilehti + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Avaa + + + + Open in new tab + Avaa uudessa välilehdessä + + + + + + Could not refresh '%1'. + Älä päivitä kohdetta '%1'. + + + + Save copy + Tallenna kopio + + + + Could not save copy at '%1'. + + + + + Save as + Tallenna nimellä + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Ei voitu tallentaa nimellä '%1'. + + + + Could not print '%1'. + Älä tulosta kohdetta '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Siirry sivulle + + + + Page: + Sivu: + + + + Jump to page %1 + Siirry sivulle %1 + + + + About qpdfview + Tietoja qpdfview:istä + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview on välilehdellinen asiakirjojen katseluohjelma käyttäen Qt:ta.</p><p>Tämä versio sisältää:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + &Muokkaa kirjanmerkkiä + + + + The document '%1' has been modified. Do you want to save your changes? + Asiakirjaa '%1' on muokattu. Haluatko tallentaa muutokset? + + + + Page width + Sivun leveys + + + + Page size + Sivun koko + + + + Match &case + Huomioi &kirjainkoko + + + + Whole &words + + + + + Highlight &all + Korosta &kaikki + + + + &Open... + &Avaa... + + + + Open in new &tab... + Avaa uuteen &välilehteen... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Päivitä + + + + Information + Tiedot + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Tallenn&a nimellä... + + + + Save &copy... + Tallenna &kopio... + + + + &Print... + &Tulosta... + + + + E&xit + + + + + &Previous page + &Edellinen sivu + + + + &Next page + &Seuraava sivu + + + + &First page + &Ensimmäinen sivu + + + + &Last page + &Viimeinen sivu + + + + &Set first page... + + + + + &Jump to page... + &Siirry sivulle... + + + + Jump &backward + Siirry &taaksepäin + + + + Jump for&ward + Siirry &eteenpäin + + + + &Search... + &Etsi... + + + + Find previous + Etsi edellinen + + + + Find next + Etsi seuraava + + + + Cancel search + Peruuta haku + + + + &Copy to clipboard + &Kopioi leikepöydälle + + + + &Add annotation + Lisää huom&autus + + + + Settings... + Asetukset... + + + + &Continuous + &Jatkuva + + + + &Two pages + &Kaksi sivua + + + + Two pages &with cover page + Kaksi sivua &kansilehdellä + + + + &Multiple pages + &Useita sivuja + + + + Right to left + Oikealta vasemmalle + + + + Zoom &in + Zoomaa &lähemmäs + + + + Zoom &out + Zoomaa &kaiemmas + + + + Original &size + Alkuperäinen &koko + + + + Fit to page width + Sovita sivun leveys + + + + Fit to page size + Sovita sivuun + + + + Rotate &left + Käännä &vasemmalle + + + + Rotate &right + Käännä &oikealle + + + + Invert colors + Käännä värit + + + + Convert to grayscale + Muunna harmaasävyksi + + + + Trim margins + Leikkaa marginaaleja + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fontit... + + + + &Fullscreen + &Koko näyttö + + + + &Presentation... + &Esitys + + + + &Previous tab + &Edellinen välilehti + + + + &Next tab + &Seuraava välilehti + + + + &Close tab + &Sulje ikkuna + + + + Close &all tabs + Sulje &kaikki ikkunat + + + + Close all tabs &but current tab + Sulje kaikki &paitsi valittu välilehti + + + + Restore &most recently closed tab + Palauta &viimeisin suljettu välilehti + + + + &Previous bookmark + &Edellinen kirjanmerkki + + + + &Next bookmark + &Seuraava kirjanmerkki + + + + &Add bookmark + &Lisää kirjanmerkki + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Pienois&kuvat + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Poista kirjanmerkki + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + &Tallenna + + + + Remove all bookmarks + Poista kaikki kirjanmerkit + + + + &Contents + &Sisältö + + + + &About + &Tietoja + + + + + &File + &Tiedosto + + + + + &Edit + &Muokkaa + + + + + &View + &Näytä + + + + &Outline + &Yleiskatsaus + + + + &Properties + &Ominaisuudet + + + + &Search + &Etsi + + + + &Tool bars + &Työkalupalkit + + + + &Docks + &Telakoitavat + + + + &Tabs + &Välilehdet + + + + &Bookmarks + &Kirjanmerkit + + + + &Help + O&hje + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Siirry sivulle %1 + + + + Go to page %1 of file '%2'. + Siirry sivulle %1 tiedostosta '%2'. + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + Kopioi &teksti + + + + &Select text + + + + + Copy &image + Kopioi &kuva + + + + Save image to &file... + Tallenna kuva &tiedostoon... + + + + Save image to file + Tallenna kuva tiedostoon + + + + Warning + Varoitus + + + + Could not save image to file '%1'. + Tiedostoa '%1' ei voitu tallentaa. + + + + Add &text + Lisää &teksti + + + + Add &highlight + Lisää &korostus + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &Poista huomautus + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Reunanpehmennys: + + + + Text antialiasing: + Tekstin reunanpehmennys: + + + + + None + Ei mitään + + + + Full + Täysi + + + + Reduced + Vaimennettu + + + + + Text hinting: + Tekstin vihjeistys: + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + Kuva (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + Kaksi sivua + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + Kuusitoista sivua + + + + Number-up: + + + + + Bottom to top and left to right + Alhaalta ylös ja vasemmalta oikealle + + + + Bottom to top and right to left + Alhaalta ylös ja oikealta vasemmalle + + + + Left to right and bottom to top + Vasemmalta oikealle ja alhaalta ylös + + + + Left to right and top to bottom + Vasemmalta oikealle ja ylhäältä alas + + + + Right to left and bottom to top + Oikealta vasemmalle ja alhaalta ylös + + + + Right to left and top to bottom + Oikealta vasemmalle ja ylhäältä alas + + + + Top to bottom and left to right + Ylhäältä alas ja vasemmalta oikealle + + + + Top to bottom and right to left + Ylhäältä alas ja oikealta vasemmalle + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Grafiikan reunanpehmennys bitit: + + + + Text antialias bits: + Tekstin reunanpehmennys bitit + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Viimeksi suljetut + + + + &Clear list + &Tyhjennä lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Viimeksi &käytetyt + + + + &Clear list + &Tyhjennä lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Yleiset + + + + &Behavior + &Toiminta + + + + &Graphics + + + + + &Interface + &Käyttöliittymä + + + + &Shortcuts + + + + + &Modifiers + &Muokkaajat + + + + Defaults + Oletusasetukset + + + + Defaults on current tab + Oletusasetukset nykyisessä välililehdessä + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Avaa URL-osoite: + + + + Auto-refresh: + Automaattinen päivitys: + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + Seuraa viimeksi käytettyjä: + + + + Keep recently closed: + Säilytä viimeksi suljetut: + + + + Restore tabs: + Palauta välilehdet + + + + Restore bookmarks: + Palauta kirjanmerkit + + + + Restore per-file settings: + Palauta tiedostokohtaiset asetukset: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Synkronoi esitys: + + + + Default + Palauta oletusarvot + + + + Presentation screen: + Esitysnäyttö: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Ei mitään + + + + Highlight duration: + Korostuksen kesto: + + + + Highlight color: + Korostusväri: + + + + Annotation color: + Huomautusten väri: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + Käytä laatoitusta: + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Koristele sivut: + + + + Decorate links: + Koristele linkit: + + + + Decorate form fields: + Koristele lomakekentät: + + + + Background color: + Taustaväri + + + + Paper color: + Paperin väri: + + + + Presentation background color: + Esityksen taustaväri: + + + + Pages per row: + Sivuja rivillä: + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + Pienoiskuvien välinen etäisyys: + + + + Thumbnail size: + Pienoiskuvien koko: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Välimuistin koko: + + + + Minimal scrolling: + Minimi vieritys: + + + + Prefetch: + Esihaku: + + + + Prefetch distance: + Esihaku etäisyys: + + + + Top + Ylös + + + + Bottom + Alas + + + + Left + Vasen + + + + Right + Oikea + + + + Tab position: + Välilehtien sijainti: + + + + As needed + Tarvittaessa + + + + Always + Aina + + + + Exit after last tab: + Poistu viimeisen välilehden jälkeen: + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Ei koskaan + + + + Settings + Asetukset + + + + Tab visibility: + Välilehden näkyvyys: + + + + Spread tabs: + Levitä välilehtiä: + + + + New tab next to current tab: + Uusi välilehti nykyisen välilehden viereen: + + + + Recently used count: + Viimeksi käytettyjen määrä: + + + + Recently closed count: + Viimeksi suljettujen määrä: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + Muokkaa työkaluriviä: + + + + View tool bar: + Näytä työkalurivi: + + + + Use page label: + + + + + Document title as tab title: + Asiakirjan otsikko välilehden otsikkona: + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + Korosta nykyinen pienoiskuva: + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + Käännä: + + + + Scroll: + + + + + Copy to clipboard: + Kopioi leikepöydälle: + + + + Add annotation: + Lisää huomautus: + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + Siirrä oikealle + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_fr.ts b/translations/qpdfview_fr.ts new file mode 100644 index 0000000..306a866 --- /dev/null +++ b/translations/qpdfview_fr.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Image (%1) + + + + Size + Taille + + + + Resolution + Résolution + + + + Depth + Profondeur + + + + + + + + + Format + Format + + + + Monochrome + Monochrome + + + + Indexed + Indexé + + + + 32 bits RGB + RVB 32 bits + + + + 32 bits ARGB + RVBA 32 bits + + + + 16 bits RGB + RVB 16 bits + + + + 24 bits RGB + RVB 24 bits + + + + Model::PdfDocument + + + Linearized + Linéarisé + + + + Name + Nom + + + + Type + Type + + + + Embedded + Incorporé + + + + Subset + Jeu partiel + + + + File + Fichier + + + + + + + Yes + Oui + + + + PDF version + Version PDF + + + + Encrypted + Chiffré + + + + + + + No + Non + + + + Model::PdfPage + + + Information + Information + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Une version 0.20.1 ou supérieure de la bibliothèque Poppler est requise pour ajouter ou supprimer des annotations. + + + + Model::PsDocument + + + Title + Titre + + + + Created for + Créé pour + + + + Creator + Créateur + + + + Creation date + Date de création + + + + Format + Format + + + + Language level + Niveau de langue + + + + QObject + + + An empty instance name is not allowed. + Un nom d'instance vide n'est pas autorisé. + + + + An empty search text is not allowed. + Une recherche vide n’est pas autorisée. + + + + Unknown command-line option '%1'. + Option de ligne de commande « %1 » inconnue. + + + + Using '--instance' requires an instance name. + Utiliser « --instance » nécessite un nom d'instance. + + + + Using '--instance' is not allowed without using '--unique'. + Utiliser « --instance » n'est pas autorisé sans l'utilisation de « --unique ». + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Un nom d'instance ne doit contenir que les caractères « [A-Z][a-z][0-9]_ » et ne doit pas commencer par un nombre. + + + + Using '--search' requires a search text. + L'utilisation de « --search » nécessite un texte de recherche. + + + + Could not prepare signal handler. + Impossible de préparer le gestionnaire de signaux. + + + + QShortcut + + + Shift + Maj + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Maj et Ctrl + + + + Shift and Alt + Maj et Alt + + + + Ctrl and Alt + Ctrl et Alt + + + + Right mouse button + Bouton droit de la souris + + + + Middle mouse button + Bouton du milieu de la souris + + + + None + Aucun + + + + qpdfview::BookmarkDialog + + + Bookmark + Signet + + + + Page: + Page : + + + + Label: + Étiquette : + + + + Comment: + Commentaires : + + + + Modified: + Modifié le : + + + + qpdfview::BookmarkMenu + + + &Open + &Ouvrir + + + + Open in new &tab + Ouvrir dans un nouvel &onglet + + + + &Remove bookmark + &Supprimer le signet + + + + qpdfview::Database + + + Jump to page %1 + Aller à la page %1 + + + + qpdfview::DocumentView + + + + Information + Informations + + + + The source editor has not been set. + L'éditeur de source n'a pas été configuré. + + + + Opening URL is disabled in the settings. + L'ouverture d'URL est désactivée dans les paramètres. + + + + Warning + Avertissement + + + + + SyncTeX data for '%1' could not be found. + Impossible de trouver les données SyncTeX pour « %1 ». + + + + Printing '%1'... + Impression de « %1 »… + + + + Unlock %1 + Déverrouiller %1 + + + + Password: + Mot de passe : + + + + Page %1 + Page %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Enregistrer… + + + + Save and open... + Enregistrer et ouvrir… + + + + Save file attachment + Enregistrer la pièce jointe + + + + + Warning + Avertissement + + + + Could not open file attachment saved to '%1'. + Impossible d'ouvrir la pièce jointe enregistrée dans « %1 ». + + + + Could not save file attachment to '%1'. + Impossible d'enregistrer la pièce jointe dans « %1 ». + + + + qpdfview::FontsDialog + + + Fonts + Police de caractères + + + + qpdfview::HelpDialog + + + Help + Aide + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_fr.html + + + + Find previous + Rechercher le précédent + + + + Find next + Rechercher le suivant + + + + qpdfview::MainWindow + + + Toggle tool bars + Affichage de la barre d'outils + + + + Toggle menu bar + Affichage de la barre de menu + + + + + + + + + + + + + + Warning + Avertissement + + + + + Could not open '%1'. + Impossible d'ouvrir « %1 ». + + + + Copy file path + Copier le chemin d'accès du fichier + + + + Select file path + Sélectionner le chemin d'accès du fichier + + + + Close all tabs + Fermer tous les onglets + + + + Close all tabs but this one + Fermer tous les onglets sauf celui-ci + + + + Close all tabs to the left + Fermer tous les onglets sur la gauche + + + + Close all tabs to the right + Fermer tous les onglets sur la droite + + + + + Open + Ouvrir + + + + Open in new tab + Ouvrir dans un nouvel onglet + + + + + + Could not refresh '%1'. + Impossible d'actualiser « %1 ». + + + + Save copy + Enregistrer une copie + + + + Could not save copy at '%1'. + Impossible d'enregistrer la copie vers « %1 ». + + + + Save as + Enregistrer sous + + + + + Move to instance + Déplacer vers l'instance + + + + + Failed to access instance '%1'. + Impossible d'accéder à l'instance « %1 ». + + + + + + Could not save as '%1'. + Impossible d'enregistrer en tant que « %1 ». + + + + Could not print '%1'. + Impossible d'imprimer « %1 ». + + + + Set first page + Définir la première page + + + + Select the first page of the body matter: + Sélectionner la première page du corps de matière : + + + + Jump to page + Aller à la page + + + + Page: + Page : + + + + Jump to page %1 + Aller à la page %1 + + + + About qpdfview + À propos de qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview est une visionneuse de documents avec onglets utilisant Qt.</p><p>Cette version inclut :<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Prise en charge PDF utilisant Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Prise en charge PS utilisant libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Prise en charge DjVu utilisant DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Prise en charge PDF utilisant Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Service d'impression utilisant CUPS %1</li> + + + + &Edit bookmark + &Éditer le signet + + + + The document '%1' has been modified. Do you want to save your changes? + Le document « %1 » a été modifié. Voulez-vous enregistrer les changements ? + + + + Page width + Largeur de la page + + + + Page size + Taille de la page + + + + Match &case + Respecter la &casse + + + + Whole &words + &Mots entiers + + + + Highlight &all + &Tout mettre en surbrillance + + + + &Open... + &Ouvrir… + + + + Open in new &tab... + Ouvrir dans un nouvel &onglet… + + + + Open &copy in new tab + Ouvrir et &copier dans un nouvel onglet + + + + Move to &instance... + Déplacer vers l'&instance… + + + + &Refresh + &Actualiser + + + + Information + xx + + + + Instance-to-instance communication requires D-Bus support. + La communication d’instance à instance nécessite le support D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Consulter<a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> pour plus d’informations.</p><p>&copy; %1 Les développeurs de qpdfview</p> + + + + Save &as... + Enregistrer &sous… + + + + Save &copy... + Enregistrer une &copie… + + + + &Print... + &Imprimer… + + + + E&xit + &Quitter + + + + &Previous page + Page &précédente + + + + &Next page + Page &suivante + + + + &First page + &Première page + + + + &Last page + &Dernière page + + + + &Set first page... + &Définir la première page… + + + + &Jump to page... + &Aller à la page… + + + + Jump &backward + Aller vers l'a&rrière + + + + Jump for&ward + Aller vers l'a&vant + + + + &Search... + &Rechercher… + + + + Find previous + Rechercher le précédent + + + + Find next + Rechercher le suivant + + + + Cancel search + Annuler la recherche + + + + &Copy to clipboard + &Copier dans le presse-papiers + + + + &Add annotation + &Ajouter une annotation + + + + Settings... + Paramètres… + + + + &Continuous + &Continu + + + + &Two pages + &Deux pages + + + + Two pages &with cover page + Deux pages &avec page de couverture + + + + &Multiple pages + &Pages multiples + + + + Right to left + De droite à gauche + + + + Zoom &in + Zoom &avant + + + + Zoom &out + Zoom &arrière + + + + Original &size + Taille &réelle + + + + Fit to page width + Ajuster à la largeur de la page + + + + Fit to page size + Ajuster à la taille de la page + + + + Rotate &left + Rotation vers la &gauche + + + + Rotate &right + Rotation vers la &droite + + + + Invert colors + Inverser les couleurs + + + + Convert to grayscale + Convertir en niveaux de gris + + + + Trim margins + Rogner les marges + + + + Darken with paper color + Foncé avec couleur papier + + + + Lighten with paper color + Clair avec couleur papier + + + + Fonts... + Polices… + + + + &Fullscreen + &Plein écran + + + + &Presentation... + &Présentation… + + + + &Previous tab + Onglet &précédent + + + + &Next tab + Onglet &suivant + + + + &Close tab + &Fermer l'onglet + + + + Close &all tabs + Fermer &tous les onglets + + + + Close all tabs &but current tab + Fermer tous les onglets &sauf l'onglet actuel + + + + Restore &most recently closed tab + &Restaurer les onglets récemment fermés + + + + &Previous bookmark + Signet &précédent + + + + &Next bookmark + Signet &suivant + + + + &Add bookmark + &Ajouter un signet + + + + Open copy in new &window + Ouvrir la copie dans une nouvelle &fenêtre + + + + Split view horizontally... + Scinder la vue horizontalement… + + + + Split view vertically... + Scinder la vue verticalement… + + + + Close current view + Fermer la vue actuelle + + + + Thumb&nails + &Miniatures + + + + Book&marks + &Signets + + + + Composition + Profil + + + + + &Remove bookmark + &Supprimer le signet + + + + Edit '%1' at %2,%3... + Éditer « %1 » à %2, %3… + + + + Open containing &folder + Ouvrir le &dossier source + + + + &Save + &Enregistrer + + + + Remove all bookmarks + Supprimer tous les signets + + + + &Contents + &Guide d'utilisation + + + + &About + À &propos + + + + + &File + &Fichier + + + + + &Edit + &Éditer + + + + + &View + &Affichage + + + + &Outline + &Sommaire + + + + &Properties + &Propriétés + + + + &Search + &Rechercher + + + + &Tool bars + &Barres d'outils + + + + &Docks + &Barre latérale des fonctionnalités + + + + &Tabs + &Onglets + + + + &Bookmarks + &Signets + + + + &Help + &Aide + + + + + Choose instance + Choisir une instance + + + + + Instance: + Instance : + + + + qpdfview::PageItem + + + Go to page %1. + Aller à la page %1. + + + + Go to page %1 of file '%2'. + Aller à la page %1 du fichier « %2 ». + + + + Open '%1'. + Ouvrir « %1 ». + + + + Edit form field '%1'. + Éditer le champ du formulaire « %1 ». + + + + Copy &text + Copier le &texte + + + + &Select text + &Sélectionner le texte + + + + Copy &image + Copier &l'image + + + + Save image to &file... + Enregistrer l'image dans le &fichier… + + + + Save image to file + Enregistrer l'image dans un fichier + + + + Warning + Avertissement + + + + Could not save image to file '%1'. + Impossible d'enregistrer l'image dans le fichier « %1 ». + + + + Add &text + Ajouter du &texte + + + + Add &highlight + Mettre en &surbrillance + + + + &Copy link address + &Copier l'adresse du lien + + + + &Select link address + &Sélectionner l'adresse du lien + + + + &Remove annotation + &Supprimer les annotations + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Anticrénelage : + + + + Text antialiasing: + Anticrénelage du texte : + + + + + None + Aucun + + + + Full + Complet + + + + Reduced + Réduit + + + + + Text hinting: + Optimisation de rendu du texte : + + + + Ignore paper color: + Ignorer la couleur papier : + + + + Overprint preview: + Sur-imprimer l'aperçu : + + + + Solid + Trait continu + + + + Shaped + Déformé + + + + Thin line mode: + Mode ligne fine : + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Arrière-plan : + + + + qpdfview::PluginHandler + + + Image (%1) + Image (%1) + + + + Compressed (%1) + Compressé (%1) + + + + Supported formats (%1) + Formats supportés (%1) + + + + Could not decompress '%1'! + Impossible de décompresser « %1 » ! + + + + Could not match file type of '%1'! + Correspondance impossible pour le type de fichier de « %1 » ! + + + + Critical + Critique + + + + Could not load plug-in for file type '%1'! + Impossible de charger le greffon pour le type de fichier « %1 » ! + + + + qpdfview::PrintDialog + + + Fit to page: + Ajuster à la page : + + + + Page ranges: + Groupes de page : + + + + All pages + Toutes les pages + + + + Even pages + Pages paires + + + + Odd pages + Pages impaires + + + + Page set: + Configuration de pages : + + + + Single page + Page unique + + + + Two pages + Deux pages + + + + Four pages + Quatre pages + + + + Six pages + Six pages + + + + Nine pages + Neuf pages + + + + Sixteen pages + Seize pages + + + + Number-up: + Pages par feuille : + + + + Bottom to top and left to right + De bas en haut et de gauche à droite + + + + Bottom to top and right to left + De bas en haut et de droite à gauche + + + + Left to right and bottom to top + De gauche à droite et de bas en haut + + + + Left to right and top to bottom + De gauche à droite et de haut en bas + + + + Right to left and bottom to top + De droite à gauche et de bas en haut + + + + Right to left and top to bottom + De droite à gauche et de haut en bas + + + + Top to bottom and left to right + De haut en bas et de gauche à droite + + + + Top to bottom and right to left + De haut en bas et de droite à gauche + + + + Number-up layout: + Ordre des pages : + + + + Extended options + Options avancées + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Nombre de bits d'anticrénelage graphique : + + + + Text antialias bits: + Nombre de bits d'anticrénelage du texte : + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Récemment fermé + + + + &Clear list + &Vider la liste + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &Récemment ouvert + + + + &Clear list + &Vider la liste + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> occurrence(s) + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> occurrence(s) sur la page <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Recherche de « %1 »… + + + + qpdfview::SettingsDialog + + + General + Général + + + + &Behavior + &Comportement + + + + &Graphics + &Affichage + + + + &Interface + &Interface + + + + &Shortcuts + &Raccourcis + + + + &Modifiers + &Modificateurs + + + + Defaults + Rétablir les paramètres par défaut + + + + Defaults on current tab + Rétablir les paramètres par défaut sur l'onglet actuel + + + + Mouse wheel modifiers + Modificateurs de la molette de la souris + + + + Mouse button modifiers + Modificateurs du bouton de la souris + + + + Open URL: + Ouvrir une URL : + + + + Auto-refresh: + Actualisation automatique : + + + + + + + + + + + + Effective after restart. + Effectif après redémarrage. + + + + Track recently used: + Conserver les fichiers récemment ouverts : + + + + Keep recently closed: + Conserver les fichiers récemment fermés : + + + + Restore tabs: + Restaurer les onglets : + + + + Restore bookmarks: + Restaurer les signets : + + + + Restore per-file settings: + Restaurer les paramètres par fichier : + + + + min + min + + + + Save database interval: + Intervalle de sauvegarde de la base de données : + + + + Synchronize presentation: + Synchroniser la présentation : + + + + Default + Par défaut + + + + Presentation screen: + Écran de présentation : + + + + Synchronize split views: + Synchroniser les vues scindées : + + + + Zoom factor: + Niveau de zoom : + + + + Parallel search execution: + Exécution de recherche parallèle + + + + ms + ms + + + + None + Aucun + + + + Highlight duration: + Durée de mise en surbrillance : + + + + Highlight color: + Couleur de surlignement : + + + + Annotation color: + Couleur d'annotation : + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + « %1 » est remplacé par le chemin d'accès absolu. « %2 » et « %3 » sont remplacés respectivement par le numéro de ligne et le numéro de colonne. + + + + Source editor: + Éditeur de source : + + + + Use tiling: + Utiliser le mode tuile : + + + + Keep obsolete pixmaps: + Conserver l'affichage lors du zoom : + + + + Use device pixel ratio: + Utiliser le taux de pixel du périphérique : + + + + Decorate pages: + Décorer les pages : + + + + Decorate links: + Décorer les liens : + + + + Decorate form fields: + Décorer les champs de formulaire : + + + + Background color: + Couleur de l'arrière plan : + + + + Paper color: + Couleur du papier : + + + + Presentation background color: + Couleur de l'arrière-plan en mode présentation : + + + + Pages per row: + Pages par ligne : + + + + + + px + px + + + + Page spacing: + Espacement des pages : + + + + Thumbnail spacing: + Espacement des miniatures : + + + + Thumbnail size: + Taille des miniatures : + + + + Fit to viewport + Adapter à la fenêtre d'affichage + + + + Document context menu: + Menu contextuel du document : + + + + Tab context menu: + Menu contextuel de l'onglet : + + + + Open in source editor: + Ouvrir dans l'éditeur source : + + + + + %1 MB + %1 Mo + + + + Cache size: + Taille du cache : + + + + Minimal scrolling: + Défilement minimum : + + + + Prefetch: + Préchargement : + + + + Prefetch distance: + Distance de préchargement : + + + + Top + Haut + + + + Bottom + Bas + + + + Left + Gauche + + + + Right + Droite + + + + Tab position: + Position de l'onglet : + + + + As needed + Si nécessaire + + + + Always + Toujours + + + + Exit after last tab: + Quitter après le dernier onglet : + + + + Scrollable menus: + Menus déroulants : + + + + Searchable menus: + Menus consultables : + + + + Zoom to selection: + Zoomer sur la sélection : + + + + + Never + Jamais + + + + Settings + Paramètres + + + + Tab visibility: + Visibilité de l'onglet : + + + + Spread tabs: + Répartir les onglets : + + + + New tab next to current tab: + Nouvel onglet à côté de l'onglet actuel : + + + + Recently used count: + Nombre de fichiers récemment ouverts : + + + + Recently closed count: + Nombre de fichiers récemment fermés : + + + + Extended search dock: + Barre de recherche avancée : + + + + Toggle tool and menu bars with fullscreen: + Affichage des barres d'outils et de menu en mode plein écran : + + + + File tool bar: + Barre d'outils Fichier : + + + + Edit tool bar: + Barre d'outils Édition : + + + + View tool bar: + Barre d'outils Affichage : + + + + Use page label: + Utiliser le libellé de la page : + + + + Document title as tab title: + Titre du document comme titre d'onglet : + + + + Current page in window title: + Page actuelle dans le titre de la fenêtre : + + + + Instance name in window title: + Afficher le nom d'instance dans le titre de la fenêtre : + + + + Synchronize outline view: + Synchroniser le sommaire : + + + + Highlight current thumbnail: + Surligner la miniature actuelle : + + + + Limit thumbnails to results: + Limiter les miniatures aux résultats : + + + + Annotation overlay: + Superposition des annotations : + + + + Form field overlay: + Superposition des champs de formulaire : + + + + Zoom: + Zoomer : + + + + Rotate: + Faire pivoter : + + + + Scroll: + Faire défiler : + + + + Copy to clipboard: + Copier dans le presse-papiers : + + + + Add annotation: + Ajouter une annotation : + + + + qpdfview::ShortcutHandler + + + Action + Action + + + + Key sequence + Séquence clavier + + + + Skip backward + Reculer + + + + Skip forward + Avancer + + + + Move up + Déplacer vers le haut + + + + Move down + Déplacer vers le bas + + + + Move left + Déplacer vers la gauche + + + + Move right + Déplacer vers la droite + + + + qpdfview::TreeView + + + &Expand all + &Tout développer + + + + &Collapse all + &Tout réduire + + + diff --git a/translations/qpdfview_gl.ts b/translations/qpdfview_gl.ts new file mode 100644 index 0000000..6169aeb --- /dev/null +++ b/translations/qpdfview_gl.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Formato + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nome + + + + Type + Tipo + + + + Embedded + Encaixado + + + + Subset + Subconxunto + + + + File + Ficheiro + + + + + + + Yes + Si + + + + PDF version + + + + + Encrypted + + + + + + + + No + Non + + + + Model::PdfPage + + + Information + Información + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Precísase a version 0.20.1 ou superior da biblioteca Poppler para engadir ou eliminar anotacións. + + + + Model::PsDocument + + + Title + Título + + + + Created for + Creado para + + + + Creator + Creador + + + + Creation date + Data de creación + + + + Format + Formato + + + + Language level + Nivel de idioma + + + + QObject + + + An empty instance name is not allowed. + Non se permite un nome de instancia baleiro. + + + + An empty search text is not allowed. + Non se permite un texto de busca baleiro. + + + + Unknown command-line option '%1'. + Opción de liña de ordes descoñecida «%1». + + + + Using '--instance' requires an instance name. + O uso de «--instance» require un nome de instancia. + + + + Using '--instance' is not allowed without using '--unique'. + Non se permite o uso de «--instance» sen usar «--unique». + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + O nome dunha instancia debe conter só os caracteres «[A-Z][a-z][0-9]_» e non debe comezar cun díxito. + + + + Using '--search' requires a search text. + O uso de «--search» require un texto de busca. + + + + Could not prepare signal handler. + Non foi posíbel preparar o xestor de sinais. + + + + QShortcut + + + Shift + Maiús. + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Maiús e Ctrl + + + + Shift and Alt + Maiús e Alt + + + + Ctrl and Alt + Ctrl e Alt + + + + Right mouse button + Botón dereito do rato + + + + Middle mouse button + Botón central do rato + + + + None + Ningún + + + + qpdfview::BookmarkDialog + + + Bookmark + Marcador + + + + Page: + Páxina: + + + + Label: + Etiqueta: + + + + Comment: + Comentario: + + + + Modified: + Modificado: + + + + qpdfview::BookmarkMenu + + + &Open + &Abrir + + + + Open in new &tab + &Abrir nunha nova lapela + + + + &Remove bookmark + &Retirar marcador + + + + qpdfview::Database + + + Jump to page %1 + Ir á páxina %1 + + + + qpdfview::DocumentView + + + + Information + Información + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + A apertura de URL está desactivada nos axustes. + + + + Warning + Aviso + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Imprimindo «%1»... + + + + Unlock %1 + Desbloquear %1 + + + + Password: + Contrasinal: + + + + Page %1 + Páxina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Gardar... + + + + Save and open... + Gardar e abrir... + + + + Save file attachment + Gardar anexo + + + + + Warning + Aviso + + + + Could not open file attachment saved to '%1'. + Non foi posíbel abrir o ficheiro do anexo gardado en «%1». + + + + Could not save file attachment to '%1'. + Non foi posíbel gardar o anexo en «%1». + + + + qpdfview::FontsDialog + + + Fonts + Tipos de letra + + + + qpdfview::HelpDialog + + + Help + Axuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Buscar anterior + + + + Find next + Buscar seguinte + + + + qpdfview::MainWindow + + + Toggle tool bars + Alternar barra de ferramentas + + + + Toggle menu bar + Alternar barra do menú + + + + + + + + + + + + + + Warning + Aviso + + + + + Could not open '%1'. + Non foi posíbel abrir «%1». + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Pechar todas as lapelas + + + + Close all tabs but this one + Pechar todas as lapelas excepto este + + + + Close all tabs to the left + Pechar todas as lapelas á esquerda + + + + Close all tabs to the right + Pechar todas as lapelas á dereita + + + + + Open + Abrir + + + + Open in new tab + Abrir nunha nova lapela + + + + + + Could not refresh '%1'. + Non foi posíbel actualizar «%1». + + + + Save copy + Gardar unha copia + + + + Could not save copy at '%1'. + Non foi posíbel gardar unha copia en «%1». + + + + Save as + Gardar como + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Non foi posíbel gardalo como «%1». + + + + Could not print '%1'. + Non foi posíbel imprimir «%1». + + + + Set first page + Estabelecer a primeira páxina + + + + Select the first page of the body matter: + Seleccionar a primeira páxina do corpo principal: + + + + Jump to page + Ir á páxina + + + + Page: + Páxina: + + + + Jump to page %1 + Ir á páxina %1 + + + + About qpdfview + Sobre qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview é un visor de documentos provisto de lapelas e que usa QT.</p><p>Esta versión inclúe:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Compatibilidade PDF usando Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Compatibilidade PS usando libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Compatibilidade DjVu usando DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Compatibilidade PDF usando Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Compatibilidade coa impresión usando CUPS %1</li> + + + + &Edit bookmark + &Editar o marcador + + + + The document '%1' has been modified. Do you want to save your changes? + O documento «%1» modificouse. Desexa gardar os cambios? + + + + Page width + Largo da páxina + + + + Page size + Tamaño da páxina + + + + Match &case + Distinguir &maiúsculas + + + + Whole &words + &Palabras completas + + + + Highlight &all + Destacar &todos + + + + &Open... + &Abrir... + + + + Open in new &tab... + Abrir nunha nova &lapela... + + + + Open &copy in new tab + Abrir e &copiar nunha nova lapela + + + + Move to &instance... + + + + + &Refresh + &Actualizar + + + + Information + Información + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Gardar &como... + + + + Save &copy... + + + + + &Print... + &Imprimir... + + + + E&xit + &Saír + + + + &Previous page + Páxina &anterior + + + + &Next page + Páxina &seguinte + + + + &First page + &Primeira páxina + + + + &Last page + &Última páxina + + + + &Set first page... + E&stabelecer a primeira páxina... + + + + &Jump to page... + &Ir á páxina... + + + + Jump &backward + Ir cara a a&trás + + + + Jump for&ward + Ir cara a a&diante + + + + &Search... + &Buscar... + + + + Find previous + Buscar anterior + + + + Find next + Buscar seguinte + + + + Cancel search + Cancelar busca + + + + &Copy to clipboard + &Copiar ao portapapeis + + + + &Add annotation + &Engadir anotación + + + + Settings... + Axustes... + + + + &Continuous + &Contínuo + + + + &Two pages + &Dúas páxinas + + + + Two pages &with cover page + Dúas páxinas &con portada + + + + &Multiple pages + &Múltiples páxinas + + + + Right to left + De dereita a esquerda + + + + Zoom &in + &Ampliar + + + + Zoom &out + &Reducir + + + + Original &size + &Tamaño orixinal + + + + Fit to page width + Axustar á largura da páxina + + + + Fit to page size + Axustar ao tamaño da páxina + + + + Rotate &left + Rotar á &esquerda + + + + Rotate &right + Rotar á &dereita + + + + Invert colors + Inverter as cores + + + + Convert to grayscale + Converter a escala de grisis + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Tipos de letra... + + + + &Fullscreen + &Pantalla completa + + + + &Presentation... + &Presentación... + + + + &Previous tab + Lapela &anterior + + + + &Next tab + Lapela &seguinte + + + + &Close tab + &Pechar a lapela + + + + Close &all tabs + Pechar &todas as lapelas + + + + Close all tabs &but current tab + Pechar todas as lapelas &agás a actual + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Marcador &anterior + + + + &Next bookmark + Marcador &seguinte + + + + &Add bookmark + &Engadir marcador + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Mi&niaturas + + + + Book&marks + &Marcadores + + + + Composition + + + + + + &Remove bookmark + &Retirar marcador + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + Abrir o cart&fol que o contén + + + + &Save + + + + + Remove all bookmarks + Retirar todos os marcadores + + + + &Contents + &Contidos + + + + &About + &Sobre + + + + + &File + &Ficheiro + + + + + &Edit + &Editar + + + + + &View + &Ver + + + + &Outline + &Esquema + + + + &Properties + &Propiedades + + + + &Search + &Buscar + + + + &Tool bars + &Barras de ferramentas + + + + &Docks + &Docas + + + + &Tabs + &Lapelas + + + + &Bookmarks + &Marcadores + + + + &Help + &Axuda + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Ir á páxina %1. + + + + Go to page %1 of file '%2'. + Ir á páxina %1 do ficheiro «%2». + + + + Open '%1'. + Abrir «%1». + + + + Edit form field '%1'. + Editar campo do formulario «%1». + + + + Copy &text + &Copiar texto + + + + &Select text + &Seleccionar o texto + + + + Copy &image + Copiar &imaxe + + + + Save image to &file... + Gardar a imaxe nun &ficheiro... + + + + Save image to file + Gardar a imaxe nun ficheiro + + + + Warning + Aviso + + + + Could not save image to file '%1'. + Non foi posíbel gardar a imaxe no ficheiro «%1». + + + + Add &text + Engadir &texto + + + + Add &highlight + Engadir &resalte + + + + &Copy link address + &Copiar o enderezo da ligazón + + + + &Select link address + &Seleccionar o enderezo da ligazón + + + + &Remove annotation + &Retirar a anotación + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Suavizado: + + + + Text antialiasing: + Suavizado do texto: + + + + + None + Ningún + + + + Full + Completo + + + + Reduced + Reducido + + + + + Text hinting: + Optimización do texto: + + + + Ignore paper color: + + + + + Overprint preview: + Previsualización da sobreimpresión: + + + + Solid + Sólido + + + + Shaped + Con forma + + + + Thin line mode: + Modo de liña fina: + + + + Splash + Pantalla inicial + + + + Arthur + Arthur + + + + Backend: + Infraestrutura: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Non foi posíbel atopar un tipo de ficheiro «%1». + + + + Critical + Crítico + + + + Could not load plug-in for file type '%1'! + Non foi posíbel cargar o engadido para o tipo de ficheiro «%1». + + + + qpdfview::PrintDialog + + + Fit to page: + Axustar a páxina: + + + + Page ranges: + Intervalo de páxinas: + + + + All pages + Todas as páxinas + + + + Even pages + Páxinas pares + + + + Odd pages + Páxinas impares + + + + Page set: + Grupo de páxinas: + + + + Single page + Páxina única + + + + Two pages + Dúas páxinas + + + + Four pages + Catro páxinas + + + + Six pages + Seis páxinas + + + + Nine pages + Nove páxinas + + + + Sixteen pages + Dezaseis páxinas + + + + Number-up: + Número de páxinas: + + + + Bottom to top and left to right + De abaixo a arriba e de esquerda a dereita + + + + Bottom to top and right to left + De abaixo a arriba e de dereita a esquerda + + + + Left to right and bottom to top + De esquerda a dereita e de abaixo a arriba + + + + Left to right and top to bottom + De esquerda a dereita e de arriba a abaixo + + + + Right to left and bottom to top + De dereita a esquerda e de abaixo a arriba + + + + Right to left and top to bottom + De dereita a esquerda e de arriba a abaixo + + + + Top to bottom and left to right + De arriba a abaixo e de esquerda a dereita + + + + Top to bottom and right to left + De arriba a abaixo e de dereita a esquerda + + + + Number-up layout: + Disposición das páxinas: + + + + Extended options + Opcións ampliadas + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits de suavizado de gráficos: + + + + Text antialias bits: + Bits de suavizado de texto: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Pechados &recentemente + + + + &Clear list + &Borrar lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Usados &recentemente + + + + &Clear list + &Limpar lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> ocorrencias + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> ocorrencias na páxina <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Buscar «%1»... + + + + qpdfview::SettingsDialog + + + General + Xeral + + + + &Behavior + &Comportamento + + + + &Graphics + &Gráficos + + + + &Interface + &Interface + + + + &Shortcuts + &Atallos + + + + &Modifiers + &Modificadores + + + + Defaults + Predeterminados + + + + Defaults on current tab + Predefinicións na lapela actual + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Abrir URL: + + + + Auto-refresh: + Actualización automática: + + + + + + + + + + + + Effective after restart. + Efectivo tras reiniciar. + + + + Track recently used: + Lembrar os ficheiros recentes: + + + + Keep recently closed: + Manter os pechados recentemente: + + + + Restore tabs: + Restaurar lapelas: + + + + Restore bookmarks: + Restaurar marcadores: + + + + Restore per-file settings: + Restaurar axustes por-ficheiro: + + + + min + min. + + + + Save database interval: + Gardar o intervalo da base de datos: + + + + Synchronize presentation: + Sincronizar a presentación: + + + + Default + Predeterminado + + + + Presentation screen: + Pantalla de presentación: + + + + Synchronize split views: + + + + + Zoom factor: + Factor de ampliación: + + + + Parallel search execution: + + + + + ms + ms. + + + + None + Ningún + + + + Highlight duration: + Duración do resalte: + + + + Highlight color: + Cor de resalte: + + + + Annotation color: + Cor da anotación: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + «%1» é substituído pola ruta absoluta ao ficheiro «%2» correspondente, «%3» é substituído pola liña correspondente ao número de columna. + + + + Source editor: + Editor de orixes: + + + + Use tiling: + Usar mosaico: + + + + Keep obsolete pixmaps: + Manter os mapas de píxeles obsoletos: + + + + Use device pixel ratio: + Usar a taxa de píxeles do dispositivo: + + + + Decorate pages: + Decorar páxinas: + + + + Decorate links: + Decorar ligazóns: + + + + Decorate form fields: + Decorar campos do formulario: + + + + Background color: + Cor do fondo: + + + + Paper color: + Cor do papel: + + + + Presentation background color: + Cor do fondo da presentación: + + + + Pages per row: + Páxinas por liña: + + + + + + px + px + + + + Page spacing: + Espazado de páxina: + + + + Thumbnail spacing: + Espazado de miniaturas: + + + + Thumbnail size: + Tamaño das miniaturas: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Tamaño da caché: + + + + Minimal scrolling: + + + + + Prefetch: + Precargar: + + + + Prefetch distance: + Distancia de precargado: + + + + Top + Arriba + + + + Bottom + Abaixo + + + + Left + Esquerda + + + + Right + Dereita + + + + Tab position: + Posición da lapela: + + + + As needed + Cando se precise + + + + Always + Sempre + + + + Exit after last tab: + Saír despois da última lapela: + + + + Scrollable menus: + Menús despregábeis: + + + + Searchable menus: + Menús que se poden buscar: + + + + Zoom to selection: + Ampliar a selección: + + + + + Never + Nunca + + + + Settings + Axustes + + + + Tab visibility: + Visibilidade da lapela: + + + + Spread tabs: + Espallar lapelas: + + + + New tab next to current tab: + A nova lapela despois da actual: + + + + Recently used count: + Nº de usados recentemente: + + + + Recently closed count: + Conta de pechados recentemente: + + + + Extended search dock: + Doca de busca ampliada: + + + + Toggle tool and menu bars with fullscreen: + Alternar barra de ferramentas e do menú en pantalla completa: + + + + File tool bar: + Barra de ferramentas de ficheiro: + + + + Edit tool bar: + Barra de ferramentas de edición: + + + + View tool bar: + Barra de ferramentas de Ver: + + + + Use page label: + Usar etiqueta de páxina: + + + + Document title as tab title: + Título do documento como título da lapela: + + + + Current page in window title: + Páxina actual no título da xanela: + + + + Instance name in window title: + Nome da instancia no título da xanela: + + + + Synchronize outline view: + Sincronizar a vista en esquema: + + + + Highlight current thumbnail: + Resaltar a miniatura actual: + + + + Limit thumbnails to results: + Mostrar só as miniaturas con resultados: + + + + Annotation overlay: + Anotación superposta: + + + + Form field overlay: + Superposición dos campos do formulario: + + + + Zoom: + Ampliación: + + + + Rotate: + Rotar: + + + + Scroll: + Desprazamento: + + + + Copy to clipboard: + Copiar ao portapapeis: + + + + Add annotation: + Engadir anotación: + + + + qpdfview::ShortcutHandler + + + Action + Acción + + + + Key sequence + Secuencia de teclas + + + + Skip backward + Saltar cara a atrás + + + + Skip forward + Saltar cara a adiante + + + + Move up + Mover cara a arriba + + + + Move down + Mover cara a abaixo + + + + Move left + Mover cara a esquerda + + + + Move right + Mover cara a dereita + + + + qpdfview::TreeView + + + &Expand all + &Expandir todo + + + + &Collapse all + &Contraer todo + + + diff --git a/translations/qpdfview_he.ts b/translations/qpdfview_he.ts new file mode 100644 index 0000000..a20d58b --- /dev/null +++ b/translations/qpdfview_he.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + עיצוב + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + שם + + + + Type + סוג + + + + Embedded + מוטמע + + + + Subset + + + + + File + קובץ + + + + + + + Yes + כן + + + + PDF version + + + + + Encrypted + + + + + + + + No + לא + + + + Model::PdfPage + + + Information + פרטים + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + כותרת + + + + Created for + נוצר עבור + + + + Creator + יוצר + + + + Creation date + תאריך היצירה + + + + Format + עיצוב + + + + Language level + רמת השפה + + + + QObject + + + An empty instance name is not allowed. + An empty instance name is not allowed. + + + + An empty search text is not allowed. + אסור לחפש טקסט ריק. + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + Using '--instance' requires an instance name. + + + + Using '--instance' is not allowed without using '--unique'. + Using '--instance' is not allowed without using '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + לא ניתן להכין את המטפל באותות. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift ו־Ctrl + + + + Shift and Alt + Shift ו־Alt + + + + Ctrl and Alt + Ctrl ו־Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + עמוד: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &פתיחה + + + + Open in new &tab + פתיחה ב&לשונית חדשה + + + + &Remove bookmark + הס&רת הסימנייה + + + + qpdfview::Database + + + Jump to page %1 + מעבר לעמוד %1 + + + + qpdfview::DocumentView + + + + Information + פרטים + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + פתיחת כתובות מנוטרלת בהגדרות. + + + + Warning + אזהרה + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' בהדפסה... + + + + Unlock %1 + שחרור %1 + + + + Password: + ססמה: + + + + Page %1 + עמוד %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + שמירה... + + + + Save and open... + שמירה ופתיחה... + + + + Save file attachment + + + + + + Warning + אזהרה + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + חיפוש הקודם + + + + Find next + חיפוש הבא + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + אזהרה + + + + + Could not open '%1'. + לא ניתן לפתוח את '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + סגירת כל הלשוניות + + + + Close all tabs but this one + סגירת כל הלשוניות למעט זו + + + + Close all tabs to the left + סגירת כל הלשוניות לשמאל + + + + Close all tabs to the right + + + + + + Open + פתיחה + + + + Open in new tab + פתיחה בלשונית חדשה + + + + + + Could not refresh '%1'. + לא ניתן לרענן את '%1'. + + + + Save copy + שמירת עותק + + + + Could not save copy at '%1'. + לא ניתן לשמור עותק למיקום '%1'. + + + + Save as + שמירה בשם + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + לא ניתן לשמור בשם ‚%1‘. + + + + Could not print '%1'. + לא ניתן להדפיס את '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + מעבר לעמוד + + + + Page: + עמוד: + + + + Jump to page %1 + מעבר לעמוד %1 + + + + About qpdfview + על אודות qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview הנו מציג מסמכים בלשוניות לסביבת Qt.</p><p>גרסה זו כוללת:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + רוחב העמוד + + + + Page size + גודל עמוד + + + + Match &case + התאמת &רישיות + + + + Whole &words + + + + + Highlight &all + ה&דגשה של הכול + + + + &Open... + &פתיחה... + + + + Open in new &tab... + פתיחה ב&לשונית חדשה... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &רענון + + + + Information + פרטים + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + שמירה &בשם... + + + + Save &copy... + + + + + &Print... + הד&פסה... + + + + E&xit + י&ציאה + + + + &Previous page + העמוד ה&קודם + + + + &Next page + העמוד ה&בא + + + + &First page + העמוד ה&ראשון + + + + &Last page + העמוד ה&אחרון + + + + &Set first page... + + + + + &Jump to page... + מ&עבר לעמוד... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &חיפוש... + + + + Find previous + חיפוש הקודם + + + + Find next + חיפוש הבא + + + + Cancel search + ביטול החיפוש + + + + &Copy to clipboard + ה&עתקה ללוח הגזירים + + + + &Add annotation + הוספת ה&ערה + + + + Settings... + הגדרות... + + + + &Continuous + מ&תמשך + + + + &Two pages + &שני עמודים + + + + Two pages &with cover page + &שני עמודים עם עמוד שער + + + + &Multiple pages + מ&ספר עמודים + + + + Right to left + ימין לשמאל + + + + Zoom &in + הת&קרבות + + + + Zoom &out + הת&רחקות + + + + Original &size + גודל מ&קורי + + + + Fit to page width + התאמת העמוד לרוחב + + + + Fit to page size + התאמה לגודל העמוד + + + + Rotate &left + הטייה &שמאלה + + + + Rotate &right + הטייה ימי&נה + + + + Invert colors + היפוך צבעים + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + גופנים... + + + + &Fullscreen + מ&סך מלא + + + + &Presentation... + מ&צגת... + + + + &Previous tab + הלשונית ה&קודמת + + + + &Next tab + הלשונית ה&באה + + + + &Close tab + &סגירת הלשונית + + + + Close &all tabs + סגירת &כל הלשוניות + + + + Close all tabs &but current tab + סגירת כל הלשוניות &פרטי לנוכחית + + + + Restore &most recently closed tab + + + + + &Previous bookmark + הסימנייה ה&קודמת + + + + &Next bookmark + הסימנייה ה&באה + + + + &Add bookmark + הוס&פת סימנייה + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + הס&רת הסימנייה + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + הסרת כל הסימניות + + + + &Contents + ת&כנים + + + + &About + על &אודות + + + + + &File + &קובץ + + + + + &Edit + ע&ריכה + + + + + &View + ת&צוגה + + + + &Outline + מ&תאר + + + + &Properties + מ&אפיינים + + + + &Search + &חיפוש + + + + &Tool bars + סרגלי &כלים + + + + &Docks + מ&עגנים + + + + &Tabs + &לשוניות + + + + &Bookmarks + &סימניות + + + + &Help + ע&זרה + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + מעבר לעמוד %1. + + + + Go to page %1 of file '%2'. + מעבר לעמוד %1 בקובץ '%2'. + + + + Open '%1'. + פתיחת '%1'. + + + + Edit form field '%1'. + עריכת שדה הטופס '%1'. + + + + Copy &text + ה&עתקת טקסט + + + + &Select text + + + + + Copy &image + העתקת ת&מונה + + + + Save image to &file... + שמירת תמונה ל&קובץ... + + + + Save image to file + שמירת תמונה לקובץ + + + + Warning + אזהרה + + + + Could not save image to file '%1'. + לא ניתן לשמור את התמונה לקובץ '%1'. + + + + Add &text + הוספת &טקסט + + + + Add &highlight + הוספת ה&דגשה + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + הסרת ה&ערה + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + החלקת קצוות: + + + + Text antialiasing: + החלקת קצוות גופנים: + + + + + None + אין + + + + Full + מלא + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + טווחי + + + + Solid + אחיד + + + + Shaped + + + + + Thin line mode: + + + + + Splash + מסך פתיחה + + + + Arthur + + + + + Backend: + מנגנון: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + קריטי + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + התאמה לעמוד: + + + + Page ranges: + טווחי עמודים: + + + + All pages + כל העמודים + + + + Even pages + עמודים זוגיים + + + + Odd pages + עמודים אי־זוגיים + + + + Page set: + + + + + Single page + עמוד יחיד + + + + Two pages + שני עמודים + + + + Four pages + ארבעה עמודים + + + + Six pages + שישה עמודים + + + + Nine pages + תשעה עמודים + + + + Sixteen pages + שישה עשר עמודים + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + משמאל לימין ומלמטה למעלה + + + + Left to right and top to bottom + משמאל לימין ומלמעלה למטה + + + + Right to left and bottom to top + מימין לשמאל ומלמטה למעלה + + + + Right to left and top to bottom + מימין לשמאל ומלמעלה למטה + + + + Top to bottom and left to right + מלמעלה למטה ומשמאל לימין + + + + Top to bottom and right to left + מלמעלה למטה ומימין לשמאל + + + + Number-up layout: + + + + + Extended options + אפשרויות מורחבות + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &פינוי הרשימה + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + בשימוש לא&חרונה + + + + &Clear list + &פינוי הרשימה + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + כללי + + + + &Behavior + הת&נהגות + + + + &Graphics + &גרפיקה + + + + &Interface + מ&נשק + + + + &Shortcuts + &קיצורי מקשים + + + + &Modifiers + מקשי ה&חלפה + + + + Defaults + בררות מחדל + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + פתיחת כתובת: + + + + Auto-refresh: + &רענון אוטומטי: + + + + + + + + + + + + Effective after restart. + ייכנס לתוקף אחרי הפעלה מחדש. + + + + Track recently used: + מעקב אחר האחרונים בשימוש: + + + + Keep recently closed: + + + + + Restore tabs: + שחזור לשוניות: + + + + Restore bookmarks: + שחזור סימניות: + + + + Restore per-file settings: + שחזור ההגדרות לפי קובץ: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + סנכרון מצגת: + + + + Default + בררת מחדל + + + + Presentation screen: + מסך המצגת: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + ללא + + + + Highlight duration: + משך ההדגשה: + + + + Highlight color: + צבע ההדגשה: + + + + Annotation color: + צבע ההערות: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' יוחלף בנתיב המלא והמוחלט. '%2' ו־'%3' יוחלפו בשורה ובמספר העמודה בהתאמה. + + + + Source editor: + עורך המקור: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + קישוט עמודים: + + + + Decorate links: + קישוט קישורים: + + + + Decorate form fields: + עיצוב שדות הטופס: + + + + Background color: + צבע הרקע: + + + + Paper color: + צבע הנייר: + + + + Presentation background color: + + + + + Pages per row: + עמודים בשורה: + + + + + + px + + + + + Page spacing: + ריווח עמודים: + + + + Thumbnail spacing: + ריווח בין התמונות הממוזערות: + + + + Thumbnail size: + גודל תמונה ממוזערת: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 מ״ב + + + + Cache size: + גודל מטמון: + + + + Minimal scrolling: + + + + + Prefetch: + אחזור קדם: + + + + Prefetch distance: + מרחק בין אחזורי הקדם: + + + + Top + למעלה + + + + Bottom + למטה + + + + Left + משמאל + + + + Right + מימין + + + + Tab position: + מיקום הלשונית: + + + + As needed + לפי הצורך + + + + Always + תמיד + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + לעולם לא + + + + Settings + + + + + Tab visibility: + הופעת הלשונית: + + + + Spread tabs: + + + + + New tab next to current tab: + לשונית חדשה ליד הלשונית הנוכחית: + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + סרגל הכלים קובץ: + + + + Edit tool bar: + סרגל הכלים עריכה: + + + + View tool bar: + סרגל כלים הצגה: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + העמוד הנוכחי בכותרת החלון: + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + הדגשת התמונה הממוזערת הנוכחית: + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + מרחק מתצוגה: + + + + Rotate: + סיבוב: + + + + Scroll: + גלילה: + + + + Copy to clipboard: + העתקה ללוח הגזירים: + + + + Add annotation: + הוספת הערה: + + + + qpdfview::ShortcutHandler + + + Action + פעולה + + + + Key sequence + צירוף מקשים + + + + Skip backward + דילוג אחורה + + + + Skip forward + דילוג קדימה + + + + Move up + הזזה מעלה + + + + Move down + הזזה למטה + + + + Move left + הזזה שמאלה + + + + Move right + הזזה ימינה + + + + qpdfview::TreeView + + + &Expand all + ה&רחבה של הכול + + + + &Collapse all + &צמצום של הכול + + + diff --git a/translations/qpdfview_hr.ts b/translations/qpdfview_hr.ts new file mode 100644 index 0000000..d333e26 --- /dev/null +++ b/translations/qpdfview_hr.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Format + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Naziv + + + + Type + Tip + + + + Embedded + Ugrađen + + + + Subset + Podskupina + + + + File + Datoteka + + + + + + + Yes + Da + + + + PDF version + + + + + Encrypted + + + + + + + + No + Ne + + + + Model::PdfPage + + + Information + Informacija + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Verzija 0.20.1 ili novija Poppler biblioteke su potrebni za dodavanje ili uklanjanje napomena. + + + + Model::PsDocument + + + Title + Naslov + + + + Created for + Napravljeno za + + + + Creator + Tvorac + + + + Creation date + Datum izrade + + + + Format + Format + + + + Language level + Razina jezika + + + + QObject + + + An empty instance name is not allowed. + Prazna instanca imena nije dopuštena. + + + + An empty search text is not allowed. + Prazan izraz nije dozvoljen. + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + Koristim '--instance' potražuje naziv instance. + + + + Using '--instance' is not allowed without using '--unique'. + Koristim '--instance' nije dozvoljeno bez korištenja '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + Korištenje '--search' potražuje upis teksta. + + + + Could not prepare signal handler. + Neuspjelo pripremanje signal poslužitelja. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift i Ctrl + + + + Shift and Alt + Shift i Alt + + + + Ctrl and Alt + Ctrl i Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Stranica: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Otvori + + + + Open in new &tab + Otvori u novoj &kartici + + + + &Remove bookmark + &Ukloni oznaku + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Informacija + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Otvaranje URL je onemogućeno u postavkama. + + + + Warning + Upozorenje + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Tiskanje '%1'... + + + + Unlock %1 + Otključaj %1 + + + + Password: + Lozinka: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Upozorenje + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Pronađi prethodno + + + + Find next + Pronađi sljedeće + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Upozorenje + + + + + Could not open '%1'. + Ne mogu otvoriti '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Otvori + + + + Open in new tab + Otvori u novoj kartici + + + + + + Could not refresh '%1'. + Ne mogu osvježiti '%1'. + + + + Save copy + Spremi kopiju + + + + Could not save copy at '%1'. + Ne mogu spremiti kopiju na '%1'. + + + + Save as + Spremi kao + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Ne mogu spremiti kao '%1'. + + + + Could not print '%1'. + Ne može se ispisati '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Skoči na stranicu + + + + Page: + Stranica: + + + + Jump to page %1 + + + + + About qpdfview + O qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview je preglednik dokumenata s mogućom upotrbom kartica, a napravljen je koristeći Qt.</p><p>Ova verzija uključuje:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Širina stranice + + + + Page size + Veličina stranice + + + + Match &case + Odgovara &slučaju + + + + Whole &words + + + + + Highlight &all + Označi &sve + + + + &Open... + &Otvori... + + + + Open in new &tab... + Otvori u novoj &kartici... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Osvježi + + + + Information + Informacija + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Spremi &kao + + + + Save &copy... + + + + + &Print... + &Tiskanje... + + + + E&xit + I&zlaz + + + + &Previous page + &Prethodna stranica + + + + &Next page + &Sljedeća stranica + + + + &First page + &Početna stranica + + + + &Last page + &Posljednja stranica + + + + &Set first page... + + + + + &Jump to page... + &Skoči na stranicu... + + + + Jump &backward + Skok &natrag + + + + Jump for&ward + Skok nap&rijed + + + + &Search... + &Traži... + + + + Find previous + Pronađi prethodno + + + + Find next + Pronađi sljedeće + + + + Cancel search + Otkaži pretraživanje + + + + &Copy to clipboard + &Kopiraj u međuspremnik + + + + &Add annotation + &Dodaj anotaciju + + + + Settings... + Postavke... + + + + &Continuous + &Neprekidno + + + + &Two pages + &Dvije stranice + + + + Two pages &with cover page + Dvije stranice &sa naslovnicom + + + + &Multiple pages + &Višestruke stranice + + + + Right to left + + + + + Zoom &in + Zumiraj &unutra + + + + Zoom &out + Zumiraj &van + + + + Original &size + Originalna &veličina + + + + Fit to page width + Podesi prema širini stranice + + + + Fit to page size + Prilagodi po veličini stranice + + + + Rotate &left + Rotiraj &lijevo + + + + Rotate &right + Rotiraj &desno + + + + Invert colors + Izokreni boje + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fontovi... + + + + &Fullscreen + &Na cijelom zaslonu + + + + &Presentation... + &Prezentacija... + + + + &Previous tab + &Prethodna kartica + + + + &Next tab + &Sljedeća kartica + + + + &Close tab + &Zatvori karticu + + + + Close &all tabs + Zatvori &sve kartice + + + + Close all tabs &but current tab + Zatvorite sve kartice &osim trenutnu karticu + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Pijašnja oznaka + + + + &Next bookmark + &Sljedeća oznaka + + + + &Add bookmark + &Dodaj oznaku + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Ukloni oznaku + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Uklonite sve oznake + + + + &Contents + &Sadržaj + + + + &About + &O programu + + + + + &File + &Datoteka + + + + + &Edit + &Uredi + + + + + &View + &Prikaz + + + + &Outline + &Obris + + + + &Properties + &Karakteristike + + + + &Search + &Pretraživanje + + + + &Tool bars + &Alatne trake + + + + &Docks + &Dokovi + + + + &Tabs + &Kartice + + + + &Bookmarks + &Oznake + + + + &Help + &Pomoć + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Idi na stranicu %1. + + + + Go to page %1 of file '%2'. + Idi na stranicu %1 datoteke '%2'. + + + + Open '%1'. + Otvori '%1'. + + + + Edit form field '%1'. + Uredi iz polja '%1'. + + + + Copy &text + Kopiraj &tekst + + + + &Select text + + + + + Copy &image + Kopiraj &sliku + + + + Save image to &file... + Sačuvaj sliku u &datoteci... + + + + Save image to file + Sačuvaj sliku u datoteci + + + + Warning + Upozorenje + + + + Could not save image to file '%1'. + Nemoguće je spremiti sliku u datoteku '%1'. + + + + Add &text + Dodaj &tekst + + + + Add &highlight + Dodaj &istakni + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &Odstrani napomenu + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiasing: + + + + Text antialiasing: + Antialiasing teksta: + + + + + None + Nijedno + + + + Full + Potpuno + + + + Reduced + Smanjeno + + + + + Text hinting: + Aludiranje teksta: + + + + Ignore paper color: + + + + + Overprint preview: + Pregled pretiska: + + + + Solid + Čvrsto + + + + Shaped + Oblikovano + + + + Thin line mode: + Način tanke linije: + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Kritično + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + Prilagodi stranici: + + + + Page ranges: + Opseg stranica: + + + + All pages + Sve stranice + + + + Even pages + Parne stranice + + + + Odd pages + Neparne stranice + + + + Page set: + Set stranica: + + + + Single page + Jedna stranica + + + + Two pages + Dvije stranice + + + + Four pages + Četiri stranice + + + + Six pages + Šest stranica + + + + Nine pages + Devet stranica + + + + Sixteen pages + Šesnaest stranica + + + + Number-up: + Broj-više: + + + + Bottom to top and left to right + Dno na vrh i lijevo na desno + + + + Bottom to top and right to left + Dno na vrh i desno na lijevo + + + + Left to right and bottom to top + Lijevo na desno i dno na vrh + + + + Left to right and top to bottom + S lijeva na desno i vrha do dna + + + + Right to left and bottom to top + Desno na lijevo i dno na vrh + + + + Right to left and top to bottom + Desno na lijevo i vrh na dno + + + + Top to bottom and left to right + Vrh na dno i lijevo na desno + + + + Top to bottom and right to left + Vrh na dno i desno na lijevo + + + + Number-up layout: + Broj van sučelja: + + + + Extended options + Proširene opcije + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bitovi grafičkog popravljanja: + + + + Text antialias bits: + Bitovi ispravljanja teksta: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &Očisti listu + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Nedavno &korišteno + + + + &Clear list + &Očisti listu + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Općenito + + + + &Behavior + &Ponašanje + + + + &Graphics + &Grafika + + + + &Interface + &Sučelje + + + + &Shortcuts + &Prečice + + + + &Modifiers + &Modifikatori + + + + Defaults + Zadano + + + + Defaults on current tab + Zadano na trenutačnoj kartici + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Otvori URL: + + + + Auto-refresh: + Auto-osvježavanje: + + + + + + + + + + + + Effective after restart. + Učinkovito nakon ponovnog pokretanja. + + + + Track recently used: + Prati nedavno korišteno: + + + + Keep recently closed: + + + + + Restore tabs: + Vrati kartice: + + + + Restore bookmarks: + Vraćanje oznaka: + + + + Restore per-file settings: + Vrati postavke za svaku datoteku posebno: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sinkroniziraj prezentaciju: + + + + Default + Zadana vrijednost + + + + Presentation screen: + Zaslon prezentacije: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Nijedan + + + + Highlight duration: + Označite trajanje: + + + + Highlight color: + Boja za označavanje: + + + + Annotation color: + Boja napomene: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' je zamijenjen za apsolutnu putanju. '%2' resp. '%3' je zamijenjen za resp. broj stupca. + + + + Source editor: + Uređivač izvora: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Dekoriraj stranice: + + + + Decorate links: + Dekoriraj veze: + + + + Decorate form fields: + Dekoriranje polja forme: + + + + Background color: + Boja pozadine: + + + + Paper color: + Boja stranice: + + + + Presentation background color: + + + + + Pages per row: + Stranice po redu: + + + + + + px + + + + + Page spacing: + Razmak stranica: + + + + Thumbnail spacing: + Razmak sličica: + + + + Thumbnail size: + Veličina sličice: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Veličina predmemorije: + + + + Minimal scrolling: + + + + + Prefetch: + Pretpreuzmi: + + + + Prefetch distance: + Pretpreuzmi udaljenost: + + + + Top + Vrh + + + + Bottom + Dno + + + + Left + Lijevo + + + + Right + Desno + + + + Tab position: + Položaj kartice: + + + + As needed + Po potrebi + + + + Always + Uvijek + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Nikada + + + + Settings + + + + + Tab visibility: + Vidljivost kartice: + + + + Spread tabs: + + + + + New tab next to current tab: + Nova kartica uz trenutnu karticu: + + + + Recently used count: + Zbroj nedavno korištenih: + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Alatna traka datoteke: + + + + Edit tool bar: + Alatna traka za uređivanje: + + + + View tool bar: + Alatna traka pregleda: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + Trenutna stranica u naslovu prozora: + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + Označite trenutnu sličicu: + + + + Limit thumbnails to results: + Ograniči sličicu na rezultate: + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Zumiraj: + + + + Rotate: + Rotiraj: + + + + Scroll: + Pomicanje: + + + + Copy to clipboard: + Kopiraj u međuspremnik: + + + + Add annotation: + Dodaj napomenu: + + + + qpdfview::ShortcutHandler + + + Action + Akcija + + + + Key sequence + Niz tipaka + + + + Skip backward + Preskoči unazad + + + + Skip forward + Preskoči unaprijed + + + + Move up + Pomakni gore + + + + Move down + Pomakni dolje + + + + Move left + Pomakni lijevo + + + + Move right + Pomakni desno + + + + qpdfview::TreeView + + + &Expand all + &Raširi sve + + + + &Collapse all + &Sažmi sve + + + diff --git a/translations/qpdfview_hu.ts b/translations/qpdfview_hu.ts new file mode 100644 index 0000000..de3d42f --- /dev/null +++ b/translations/qpdfview_hu.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Formátum + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + linearizált + + + + Name + Név + + + + Type + Típus + + + + Embedded + Beágyazott + + + + Subset + + + + + File + Fájl + + + + + + + Yes + Igen + + + + PDF version + PDF verzió + + + + Encrypted + Titkosított + + + + + + + No + Nem + + + + Model::PdfPage + + + Information + Információ + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Kommentár hozzáadásához vagy eltávolításához a Poppler függvénytár 0.20.1 vagy magasabb verziója szükséges. + + + + Model::PsDocument + + + Title + Cím + + + + Created for + + + + + Creator + Készítő + + + + Creation date + Létrehozás dátuma + + + + Format + Formátum + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + Üres keresendő szöveg nem megengedett. + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift + Ctrl + + + + Shift and Alt + Shift + Alt + + + + Ctrl and Alt + Ctrl + Alt + + + + Right mouse button + Jobb egérgomb + + + + Middle mouse button + Középső egérgomb + + + + None + Nincs + + + + qpdfview::BookmarkDialog + + + Bookmark + Könyvjelző + + + + Page: + Oldal: + + + + Label: + Címke: + + + + Comment: + Megjegyzés: + + + + Modified: + Módosítva: + + + + qpdfview::BookmarkMenu + + + &Open + &Megnyitás + + + + Open in new &tab + Megnyitás új &lapon + + + + &Remove bookmark + Könyvjelző &törlése + + + + qpdfview::Database + + + Jump to page %1 + %1. oldalra ugrás + + + + qpdfview::DocumentView + + + + Information + Információ + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + URL menyitása nincs engedélyezve a beállításokban. + + + + Warning + Figyelmeztetés + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' nyomtatása... + + + + Unlock %1 + %1 feloldása + + + + Password: + Jelszó: + + + + Page %1 + %1. oldal + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Mentés... + + + + Save and open... + Mentés és megnyitás... + + + + Save file attachment + Fájlcsatolás mentése + + + + + Warning + Figyelmeztetés + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + Betűtípusok + + + + qpdfview::HelpDialog + + + Help + Segítség + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Előző keresése + + + + Find next + Következő keresése + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Figyelmeztetés + + + + + Could not open '%1'. + '%1' nem nyitható meg. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Minden lap bezárása + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Megnyitás + + + + Open in new tab + Megnyitás új lapon + + + + + + Could not refresh '%1'. + '%1' nem frissíthető. + + + + Save copy + Másolat mentése + + + + Could not save copy at '%1'. + + + + + Save as + Mentés másként + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Nem menthető, mint '%1'. + + + + Could not print '%1'. + '%1' nem nyomtatható. + + + + Set first page + Első oldal beállítása + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + Oldal: + + + + Jump to page %1 + %1. oldalra ugrás + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + Könyvjelző &szerkesztése + + + + The document '%1' has been modified. Do you want to save your changes? + '%1' dokumentum megváltozott. Kívánja menteni a változásokat? + + + + Page width + Oldalszélesség + + + + Page size + Oldalméret + + + + Match &case + Nagybetűér&zékeny + + + + Whole &words + Teljes szavak + + + + Highlight &all + Összes &kiemelése + + + + &Open... + &Megnyitás… + + + + Open in new &tab... + Megnyitás új &lapon + + + + Open &copy in new tab + Másolat &megnyitása új lapon + + + + Move to &instance... + + + + + &Refresh + &Frissítés + + + + Information + Információ + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Mentés má&sként... + + + + Save &copy... + + + + + &Print... + &Nyomtatás... + + + + E&xit + &Kilépés + + + + &Previous page + &Előző oldal + + + + &Next page + &Következő oldal + + + + &First page + &Első oldal + + + + &Last page + &Utolsó oldal + + + + &Set first page... + Első oldal &beállítása... + + + + &Jump to page... + U&grás oldalra... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &Keresés… + + + + Find previous + Előző keresése + + + + Find next + Következő keresése + + + + Cancel search + Keresés leállítása + + + + &Copy to clipboard + Másolás a &vágólapra + + + + &Add annotation + Kommentár &hozzáadása + + + + Settings... + Beállítások... + + + + &Continuous + &Folyamatos + + + + &Two pages + &Két oldal + + + + Two pages &with cover page + Két oldal &fedőlappal + + + + &Multiple pages + &Több oldal + + + + Right to left + Jobbról balra + + + + Zoom &in + &Nagyítás + + + + Zoom &out + &Kicsinyítés + + + + Original &size + &Eredeti méret + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + Forgatás &balra + + + + Rotate &right + Forgatás &jobbra + + + + Invert colors + Színek invertálása + + + + Convert to grayscale + Átalakítás szürkeárnyalatosra + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Betűkészletek... + + + + &Fullscreen + &Teljes képernyő + + + + &Presentation... + &Prezentáció... + + + + &Previous tab + &Előző lap + + + + &Next tab + &Következő lap + + + + &Close tab + &Lap bezárása + + + + Close &all tabs + &Minden lap bezárása + + + + Close all tabs &but current tab + Minden lap bezárása az aktuális &kivételével + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &Előző könyvjelző + + + + &Next bookmark + &Következő könyvjelző + + + + &Add bookmark + Könyvjelző &hozzáadása + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Bélye&gképek + + + + Book&marks + Könyv&jelzők + + + + Composition + + + + + + &Remove bookmark + Könyvjelző &törlése + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + A &fájlt tartalmazó mappa megnyitása + + + + &Save + + + + + Remove all bookmarks + Összes könyvjelző törlése + + + + &Contents + &Tartalom + + + + &About + &Névjegy + + + + + &File + &Fájl + + + + + &Edit + &Szerkesztés + + + + + &View + &Nézet + + + + &Outline + Á&ttekintés + + + + &Properties + &Tulajdonságok + + + + &Search + &Keresés + + + + &Tool bars + &Eszköztárak + + + + &Docks + + + + + &Tabs + &Lapok + + + + &Bookmarks + &Könyvjelzők + + + + &Help + &Súgó + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + '%1' megnyitása + + + + Edit form field '%1'. + + + + + Copy &text + Szöveg &másolása + + + + &Select text + Szöveg &kijelölése + + + + Copy &image + Kép má&solása + + + + Save image to &file... + Kép mentése &fájlba... + + + + Save image to file + Kép mentése fájlba + + + + Warning + Figyelmeztetés + + + + Could not save image to file '%1'. + + + + + Add &text + Szöveg &hozzáadása + + + + Add &highlight + Ki&emelés hozzáadása + + + + &Copy link address + Hivatkozás címének &másolása + + + + &Select link address + Hivatkozás címének &kijelölése + + + + &Remove annotation + Kommentár &eltávolítása + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Élsimítás: + + + + Text antialiasing: + Szöveg élsimítás: + + + + + None + Nincs + + + + Full + Teljes + + + + Reduced + Csökkentett + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + Egyszerű + + + + Shaped + Formázott + + + + Thin line mode: + + + + + Splash + Indítókép + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + Támogatott formátumok (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Kritikus + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + Oldalak: + + + + All pages + Minden oldal + + + + Even pages + Páros oldalak + + + + Odd pages + Páratlan oldalak + + + + Page set: + Oldal tartomány: + + + + Single page + Egy oldal + + + + Two pages + 2 oldal + + + + Four pages + 4 oldal + + + + Six pages + 6 oldal + + + + Nine pages + 9 oldal + + + + Sixteen pages + 16 oldal + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Nemrég bezárt + + + + &Clear list + &Lista törlése + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &Nemrég használt + + + + &Clear list + &Lista törlése + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> találat + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> találat a(z) <b>%2</b> oldalon + + + + qpdfview::SearchableMenu + + + Search for '%1'... + '%1' keresése... + + + + qpdfview::SettingsDialog + + + General + Általános + + + + &Behavior + &Működés + + + + &Graphics + &Grafika + + + + &Interface + + + + + &Shortcuts + &Billentyűparancsok + + + + &Modifiers + + + + + Defaults + Alapértelmezések + + + + Defaults on current tab + Alapértelmezések az aktuális lapon + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + URL megnyitása: + + + + Auto-refresh: + Automatikus frissítés: + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + Lapok visszaállítása: + + + + Restore bookmarks: + Könyvjelzők visszaállítása: + + + + Restore per-file settings: + Fájlonkénti beállítások visszaállítása: + + + + min + perc + + + + Save database interval: + Adatbázis mentés időköze: + + + + Synchronize presentation: + + + + + Default + Alapértelmezett + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + Nagyítás faktor: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Nincs + + + + Highlight duration: + Kiemelés időtartama: + + + + Highlight color: + Kiemelés színe: + + + + Annotation color: + Kommentár színe: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + Háttérszín: + + + + Paper color: + Papírszín: + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + képpont + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + Bélyegkép mérete: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + A gyorsítótár mérete: + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Fent + + + + Bottom + Lent + + + + Left + Bal oldalon + + + + Right + Jobb oldalon + + + + Tab position: + A lapok helye: + + + + As needed + Ha szükséges + + + + Always + Mindig + + + + Exit after last tab: + + + + + Scrollable menus: + Görgethető menük: + + + + Searchable menus: + Kereshető menük: + + + + Zoom to selection: + + + + + + Never + Soha + + + + Settings + Beállítások + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Nagyítás: + + + + Rotate: + Forgatás: + + + + Scroll: + Görgetés: + + + + Copy to clipboard: + Másolás a vágólapra: + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + Művelet + + + + Key sequence + Billentyűparancs + + + + Skip backward + + + + + Skip forward + + + + + Move up + Mozgatás fel + + + + Move down + Mozgatás le + + + + Move left + Mozgatás balra + + + + Move right + Mozgatás jobbra + + + + qpdfview::TreeView + + + &Expand all + &Mindet kibont + + + + &Collapse all + &Mindet összecsukja + + + diff --git a/translations/qpdfview_id.ts b/translations/qpdfview_id.ts new file mode 100644 index 0000000..9987aaf --- /dev/null +++ b/translations/qpdfview_id.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Gambar (%1) + + + + Size + Ukuran + + + + Resolution + Resolusi + + + + Depth + Kedalaman + + + + + + + + + Format + Format + + + + Monochrome + Monokrom + + + + Indexed + Terindeks + + + + 32 bits RGB + 32 bits RGB + + + + 32 bits ARGB + 32 bits ARGB + + + + 16 bits RGB + 16 bits RGB + + + + 24 bits RGB + 24 bits RGB + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nama + + + + Type + Tipe + + + + Embedded + Tertanam + + + + Subset + Subset + + + + File + Berkas + + + + + + + Yes + Ya + + + + PDF version + Versi PDF + + + + Encrypted + Terenkripsi + + + + + + + No + Tidak + + + + Model::PdfPage + + + Information + Informasi + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Versi 0.20.1 atau lebih baru dari pustaka Poppler diperlukan untuk menambah atau menghapus anotasi. + + + + Model::PsDocument + + + Title + Judul + + + + Created for + Dibuat untuk + + + + Creator + Pembuat + + + + Creation date + Tanggal pembuatan + + + + Format + Format + + + + Language level + Level bahasa + + + + QObject + + + An empty instance name is not allowed. + Nama instansi tidak diperkenankan kosong. + + + + An empty search text is not allowed. + Teks pencarian kosong tidak diperkenankan. + + + + Unknown command-line option '%1'. + Pilihan baris perintah tak diketahui '%1'. + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + Penggunaan '--search' membutuhkan sebuah teks pencarian. + + + + Could not prepare signal handler. + Tak dapat mempersiapkan pengendali sinyal. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift dan Ctrl + + + + Shift and Alt + Shift dan Alt + + + + Ctrl and Alt + Ctrl dan Alt + + + + Right mouse button + Tombol kanan tetikus + + + + Middle mouse button + Tombol tengah tetikus + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Halaman: + + + + Label: + Label: + + + + Comment: + Komentar: + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Buka + + + + Open in new &tab + Buka di &tab baru + + + + &Remove bookmark + &Hilangkan penanda + + + + qpdfview::Database + + + Jump to page %1 + Lompat ke halaman %1 + + + + qpdfview::DocumentView + + + + Information + Informasi + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Membuka URL dimatikan pada pengaturan. + + + + Warning + Peringatan + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Mencetak '%1'... + + + + Unlock %1 + Buka kunci %1 + + + + Password: + Sandi: + + + + Page %1 + Halaman %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Simpan... + + + + Save and open... + Simpan dan buka... + + + + Save file attachment + SImpan lampiran berkas + + + + + Warning + Peringatan + + + + Could not open file attachment saved to '%1'. + Tidak bisa membuka lampiran berkas yang disimpan ke '%1'. + + + + Could not save file attachment to '%1'. + Tidak bisa menyimpan lampiran berkas ke '%1'. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Cari sebelumnya + + + + Find next + Cari berikutnya + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Peringatan + + + + + Could not open '%1'. + Tidak dapat membuka '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Tutup semua tab + + + + Close all tabs but this one + Tutup semua tab kecuali yang satu ini. + + + + Close all tabs to the left + Tutup semua tab ke kiri + + + + Close all tabs to the right + Tutup semua tab ke kanan + + + + + Open + Buka + + + + Open in new tab + Buka di tab baru + + + + + + Could not refresh '%1'. + Takdapat menyegarkan '%1' + + + + Save copy + Simpan salinan + + + + Could not save copy at '%1'. + Tidak bisa menyimpan salinan pada '%1'. + + + + Save as + Simpan sebagai + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Tidak dapat menyimpan sebagai '%1'. + + + + Could not print '%1'. + Tidak dapat mencetak '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Lompat ke halaman + + + + Page: + Halaman: + + + + Jump to page %1 + Lompat ke halaman %1 + + + + About qpdfview + Tentang qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview merupakan penampil dokumen bertab yang menggunakan Qt.</p><p>Versi ini mengandungi:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Dokumen '%1' telah diubah. Apakah Anda ingin menyimpan perubahan? + + + + Page width + Lebar halaman + + + + Page size + Ukuran halaman + + + + Match &case + Cocokkan &huruf + + + + Whole &words + + + + + Highlight &all + Soroti &semua + + + + &Open... + &Buka... + + + + Open in new &tab... + Buka di &tab baru... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + Sega&rkan + + + + Information + Informasi + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Simp&an sebagai... + + + + Save &copy... + + + + + &Print... + &Cetak... + + + + E&xit + &Keluar + + + + &Previous page + Halaman Se&belumnya + + + + &Next page + Halaman Se&lanjutnya + + + + &First page + Halaman &Pertama + + + + &Last page + Halaman &Terakhir + + + + &Set first page... + + + + + &Jump to page... + &Lompat ke halaman... + + + + Jump &backward + Lompat &mundur + + + + Jump for&ward + Lompat ma&ju + + + + &Search... + &Cari... + + + + Find previous + Cari sebelumnya + + + + Find next + Cari selanjutnya + + + + Cancel search + Batalkan pencarian + + + + &Copy to clipboard + &Salin ke papan klip + + + + &Add annotation + Tambah &catatan + + + + Settings... + Pengaturan... + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + Kanan ke kiri + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + Komposisi + + + + + &Remove bookmark + &Hilangkan penanda + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + &Simpan + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + Peringatan + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + Gambar (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_it.ts b/translations/qpdfview_it.ts new file mode 100644 index 0000000..c1b96cf --- /dev/null +++ b/translations/qpdfview_it.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Immagine (%1) + + + + Size + Dimensioni + + + + Resolution + Risoluzione + + + + Depth + Profondità + + + + + + + + + Format + Formato + + + + Monochrome + Monocromatica + + + + Indexed + Indicizzata + + + + 32 bits RGB + 32 bits RGB + + + + 32 bits ARGB + 32 bits ARGB + + + + 16 bits RGB + 16 bits RGB + + + + 24 bits RGB + 24 bits RGB + + + + Model::PdfDocument + + + Linearized + Linearizzato + + + + Name + Nome + + + + Type + Tipo + + + + Embedded + Incorporato + + + + Subset + Sottoinsieme + + + + File + File + + + + + + + Yes + + + + + PDF version + Versione PDF + + + + Encrypted + Cifrato + + + + + + + No + No + + + + Model::PdfPage + + + Information + Informazioni + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + È necessaria la libreria Poppler versione 0.20.1 o successiva per aggiungere o rimuovere le annotazioni. + + + + Model::PsDocument + + + Title + Titolo + + + + Created for + Creato per + + + + Creator + Autore + + + + Creation date + Data di creazione + + + + Format + Formato + + + + Language level + Livello linguaggio + + + + QObject + + + An empty instance name is not allowed. + Non è consentito un nome vuoto dell'istanza + + + + An empty search text is not allowed. + Non è consentita una stringa di ricerca vuota. + + + + Unknown command-line option '%1'. + Opzione per la riga di comando «%1» sconosciuta. + + + + Using '--instance' requires an instance name. + L'uso di "--instance" richiede il nome di un'istanza + + + + Using '--instance' is not allowed without using '--unique'. + L'uso di "--instance" non è consentito senza usare "--unique" + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Il nome dell'istanza deve contenere solo i caratteri "[A-Z][a-z][0-9]_" e non deve iniziare con una cifra. + + + + Using '--search' requires a search text. + L'uso dell'opzione "--search" richiede una ricerca testuale- + + + + Could not prepare signal handler. + Impossibile preparare il gestore di segnale + + + + QShortcut + + + Shift + Maiusc + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Maiusc e Ctrl + + + + Shift and Alt + Maiusc e Alt + + + + Ctrl and Alt + Ctrl e Alt + + + + Right mouse button + Pulsante destro del mouse + + + + Middle mouse button + Pulsante centrale del mouse + + + + None + Nessuna + + + + qpdfview::BookmarkDialog + + + Bookmark + Segnalibri + + + + Page: + Pagina: + + + + Label: + Etichetta: + + + + Comment: + Commento: + + + + Modified: + Ultima modifica: + + + + qpdfview::BookmarkMenu + + + &Open + &Apri + + + + Open in new &tab + Apri in nuova &scheda + + + + &Remove bookmark + &Rimuovi segnalibro + + + + qpdfview::Database + + + Jump to page %1 + Vai alla pagina %1 + + + + qpdfview::DocumentView + + + + Information + Informazioni + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Apertura degli URL disabilitata nelle impostazioni. + + + + Warning + Avviso + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Stampa di «%1»... + + + + Unlock %1 + Sblocca %1 + + + + Password: + Password: + + + + Page %1 + Pagina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Salva... + + + + Save and open... + Salva e apri... + + + + Save file attachment + Salva allegato + + + + + Warning + Avviso + + + + Could not open file attachment saved to '%1'. + Impossibile aprire l'allegato salvato in "%1". + + + + Could not save file attachment to '%1'. + Impossibile salvare l'allegato in '%1' + + + + qpdfview::FontsDialog + + + Fonts + Tipi di carattere + + + + qpdfview::HelpDialog + + + Help + Aiuto + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_it.html + + + + Find previous + Trova precedente + + + + Find next + Trova successivo + + + + qpdfview::MainWindow + + + Toggle tool bars + Attiva/Disattiva barre degli strumenti + + + + Toggle menu bar + Attiva/Disattiva barra dei menù + + + + + + + + + + + + + + Warning + Avviso + + + + + Could not open '%1'. + Impossibile aprire «%1». + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Chiudi tutte le schede + + + + Close all tabs but this one + Chiudi tutte le schede tranne questa + + + + Close all tabs to the left + Chiudi tutte le schede alla sinistra + + + + Close all tabs to the right + Chiudi tutte le schede alla destra + + + + + Open + Apri + + + + Open in new tab + Apri in nuova scheda + + + + + + Could not refresh '%1'. + Impossibile aggiornare «%1». + + + + Save copy + Salva una copia + + + + Could not save copy at '%1'. + Impossibile salvare in «%1». + + + + Save as + Salva come + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Impossibile salvare come «%1» + + + + Could not print '%1'. + Impossibile stampare «%1». + + + + Set first page + Imposta prima pagina + + + + Select the first page of the body matter: + Selezionare la prima pagina del documento: + + + + Jump to page + Vai alla pagina + + + + Page: + Pagina: + + + + Jump to page %1 + Va alla pagina %1 + + + + About qpdfview + Informazioni su qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview è un visualizzatore di documenti a schede che usa Qt.</p><p>Questa versione include:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Supporto PDF usando Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Supporto PS usando libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Supporto DjVu usando DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Supporto PDF usando Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Supporto per la stampa usando CUPS %1</li> + + + + &Edit bookmark + Modifica s&egnalibro + + + + The document '%1' has been modified. Do you want to save your changes? + Il documento «%1» è stato modificato. Salvare le modifiche? + + + + Page width + Larghezza pagina + + + + Page size + Dimensione pagina + + + + Match &case + &Corrispondenza MAIUSCOLO/minuscolo + + + + Whole &words + Parol_e intere + + + + Highlight &all + E&videnzia tutto + + + + &Open... + &Apri... + + + + Open in new &tab... + Apri in nuova &scheda... + + + + Open &copy in new tab + Apri _copia in nuova scheda + + + + Move to &instance... + + + + + &Refresh + Aggio&rna + + + + Information + Informazioni + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Sa&lva come... + + + + Save &copy... + + + + + &Print... + Stam&pa... + + + + E&xit + &Esci + + + + &Previous page + &Pagina precedente + + + + &Next page + Pagina &successiva + + + + &First page + Pr&ima pagina + + + + &Last page + &Ultima pagina + + + + &Set first page... + Impo&sta prima pagina... + + + + &Jump to page... + &Vai alla pagina... + + + + Jump &backward + Va indietro + + + + Jump for&ward + Va avanti + + + + &Search... + C&erca... + + + + Find previous + Trova precedente + + + + Find next + Trova successivo + + + + Cancel search + Annulla ricerca + + + + &Copy to clipboard + &Copia negli appunti + + + + &Add annotation + &Aggiungi nota + + + + Settings... + Impostazioni... + + + + &Continuous + &Continuo + + + + &Two pages + &Due pagine + + + + Two pages &with cover page + Due pagine co&mpresa la copertina + + + + &Multiple pages + Pagine &multiple + + + + Right to left + Da destra a sinistra + + + + Zoom &in + A&umenta + + + + Zoom &out + Ri&duci + + + + Original &size + Dimen&sione originale + + + + Fit to page width + Adatta alla larghezza della pagina + + + + Fit to page size + Adatta alla dimensione della pagina + + + + Rotate &left + Ruota a si&nistra + + + + Rotate &right + &Ruota a destra + + + + Invert colors + Inverti colori + + + + Convert to grayscale + Converti in scale di grigi + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Caratteri... + + + + &Fullscreen + Sc&hermo intero + + + + &Presentation... + &Presentazione... + + + + &Previous tab + Scheda &precedente + + + + &Next tab + S&cheda successiva + + + + &Close tab + &Chiusi scheda + + + + Close &all tabs + Chiudi &tutte le schede + + + + Close all tabs &but current tab + Chiudi tutte le schede t&ranne questa + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Segnalibro &precedente + + + + &Next bookmark + Seg&nalibro successivo + + + + &Add bookmark + &Aggiungi segnalibro + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Mi_niature + + + + Book&marks + Se&gnalibri + + + + Composition + + + + + + &Remove bookmark + &Rimuovi segnalibro + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + A&pri cartella contenitore + + + + &Save + + + + + Remove all bookmarks + Rimuovi tutti i segnalibri + + + + &Contents + &Contenuti + + + + &About + I&nformazioni + + + + + &File + &File + + + + + &Edit + &Modifica + + + + + &View + &Visualizza + + + + &Outline + St&ruttura + + + + &Properties + &Proprietà + + + + &Search + &Cerca + + + + &Tool bars + Barre degli s&trumenti + + + + &Docks + &Elementi + + + + &Tabs + &Schede + + + + &Bookmarks + Segnali&bri + + + + &Help + A&iuto + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Va alla pagina %1 + + + + Go to page %1 of file '%2'. + Va alla pagina %1 del file «%2» + + + + Open '%1'. + Apre «%1» + + + + Edit form field '%1'. + Modifica campo del form «%1». + + + + Copy &text + Copia &testo + + + + &Select text + &Seleziona testo + + + + Copy &image + Copia &immagine + + + + Save image to &file... + Salva immagine in un &file... + + + + Save image to file + Salva immagine in un file + + + + Warning + Avviso + + + + Could not save image to file '%1'. + Impossibile salvare l'immagine nel file «%1». + + + + Add &text + Aggiungi &testo + + + + Add &highlight + Aggiungi e&videnziazione + + + + &Copy link address + &Copia indirizzo del collegamento + + + + &Select link address + &Seleziona indirizzo del collegamento + + + + &Remove annotation + &Rimuovi nota + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiasing: + + + + Text antialiasing: + Antialiasing del testo: + + + + + None + Nessuna + + + + Full + Completa + + + + Reduced + Ridotta + + + + + Text hinting: + Approssimazione del testo: + + + + Ignore paper color: + + + + + Overprint preview: + Anteprima sovrastampa: + + + + Solid + Solida + + + + Shaped + Sagomata + + + + Thin line mode: + Modalità per le linee sottili: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Backend: + + + + qpdfview::PluginHandler + + + Image (%1) + Immagine (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Impossibile confrontare il tipo di file per "%1". + + + + Critical + Attenzione + + + + Could not load plug-in for file type '%1'! + Impossibile caricare il plugin per il tipo di file "%1". + + + + qpdfview::PrintDialog + + + Fit to page: + Adattare alla pagina: + + + + Page ranges: + Intervalli di pagine: + + + + All pages + Tutte le pagine + + + + Even pages + Pagine pari + + + + Odd pages + Pagine dispari + + + + Page set: + Pagine da stampare: + + + + Single page + Pagina singola + + + + Two pages + Due pagine + + + + Four pages + Quattro pagine + + + + Six pages + Sei pagine + + + + Nine pages + NOve pagine + + + + Sixteen pages + Sedici pagine + + + + Number-up: + Number-up: + + + + Bottom to top and left to right + Dal basso all'alto e da sinistra a destra + + + + Bottom to top and right to left + Dal basso all'alto e da destra a sinistra + + + + Left to right and bottom to top + Da sinistra a destra e dal basso all'alto + + + + Left to right and top to bottom + Da sinistra a destra e dall'alto al basso + + + + Right to left and bottom to top + Da destra a sinistra e dal basso all'alto + + + + Right to left and top to bottom + Da destra a sinistra e dall'alto al basso + + + + Top to bottom and left to right + Dall'alto al basso e da sinistra a destra + + + + Top to bottom and right to left + Dall'alto al basso e da destra a sinistra + + + + Number-up layout: + Disposizione number-up: + + + + Extended options + Opzioni estese + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bit antialias grafica: + + + + Text antialias bits: + Bit antialias testo: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Chiusi di &recente + + + + &Clear list + Pulis&ci elenco + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &Usati di recente + + + + &Clear list + Pulis&ci elenco + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + Corrispondenze <b>%1</b> + + + + <b>%1</b> occurrences on page <b>%2</b> + Corrispondenze sulla pagina <b>%2</b>: <b>%1</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Ricerca di "%1"... + + + + qpdfview::SettingsDialog + + + General + Generali + + + + &Behavior + Co&mportamento + + + + &Graphics + &Grafica + + + + &Interface + &Interfaccia + + + + &Shortcuts + &Scorciatoie + + + + &Modifiers + &Modificatori + + + + Defaults + Predefiniti + + + + Defaults on current tab + Ripristina i valori predefiniti per la scheda attuale + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Aprire URL: + + + + Auto-refresh: + Aggiornare automaticamente: + + + + + + + + + + + + Effective after restart. + Effettive al riavvio. + + + + Track recently used: + Memorizzare usati di recente: + + + + Keep recently closed: + Mantenere chiusi di recente: + + + + Restore tabs: + Ripristinare schede: + + + + Restore bookmarks: + Ripristinare segnalibri: + + + + Restore per-file settings: + Modificare impostazioni per singoli fie: + + + + min + min + + + + Save database interval: + Salva intervallo del database: + + + + Synchronize presentation: + Sincronizzare presentazione: + + + + Default + Predefinito + + + + Presentation screen: + Schermo per presentazione: + + + + Synchronize split views: + + + + + Zoom factor: + Fattore di zoom: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Nessuna + + + + Highlight duration: + Durata dell'evidenziatore: + + + + Highlight color: + Colore dell'evidenziatore: + + + + Annotation color: + Colore dell'annotazione: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + «%1» viene sostituito dal percorso assoluto del file. «%2» relativamente a «%3» viene sostituito dalla riga relativamente al numero della colonna. + + + + Source editor: + Editor sorgente: + + + + Use tiling: + Usa piastrelle: + + + + Keep obsolete pixmaps: + Mantenere pixmap obsoleti: + + + + Use device pixel ratio: + Usare il rapporto pixel del dispositivo: + + + + Decorate pages: + Decorare pagine: + + + + Decorate links: + Decorare collegamenti: + + + + Decorate form fields: + Decorare campo del form: + + + + Background color: + Colore di fondo: + + + + Paper color: + Colore della carta: + + + + Presentation background color: + Colore sfondo presentazione: + + + + Pages per row: + Pagine per riga: + + + + + + px + px + + + + Page spacing: + Spaziatura pagina: + + + + Thumbnail spacing: + Spaziatura miniatura: + + + + Thumbnail size: + Dimensione miniatura: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Dimensione cache: + + + + Minimal scrolling: + + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Distanza di prefetch: + + + + Top + In alto + + + + Bottom + In basso + + + + Left + A sinistra + + + + Right + A destra + + + + Tab position: + Posizione scheda: + + + + As needed + Quando necessaria + + + + Always + Sempre + + + + Exit after last tab: + Uscire dopo l'ultima sceda: + + + + Scrollable menus: + Menù scorrevoli: + + + + Searchable menus: + Ricerca nei menù: + + + + Zoom to selection: + Ingrandimento alla sezione: + + + + + Never + Mai + + + + Settings + Impostazioni + + + + Tab visibility: + Visibilità scheda: + + + + Spread tabs: + Mostra schede: + + + + New tab next to current tab: + Nuova scheda dopo quella attuale: + + + + Recently used count: + Conteggio usati di recente: + + + + Recently closed count: + Conteggio chiusi di recente: + + + + Extended search dock: + Elemento di ricerca esteso: + + + + Toggle tool and menu bars with fullscreen: + Attiva/Disattiva barre dei menù e degli strumenti a schermo intero: + + + + File tool bar: + Barra degli strumenti «File»: + + + + Edit tool bar: + Barra degli strumenti «Modifica»: + + + + View tool bar: + Barra degli strumenti «Visualizza»: + + + + Use page label: + Usare etichetta della pagina: + + + + Document title as tab title: + Titolo del documento come titolo della scheda: + + + + Current page in window title: + Pagina attuale nel titolo della finestra: + + + + Instance name in window title: + Nome dell'istanza nel titolo della finestra: + + + + Synchronize outline view: + Sincronizzare vista struttura: + + + + Highlight current thumbnail: + Evidenziare scheda corrente: + + + + Limit thumbnails to results: + Limitare le miniature nei risultati: + + + + Annotation overlay: + Motivo annotazione: + + + + Form field overlay: + Motivo campo del form: + + + + Zoom: + Ingrandimento: + + + + Rotate: + Rotazione: + + + + Scroll: + Scorrimento: + + + + Copy to clipboard: + Copia negli appunti: + + + + Add annotation: + Aggiungi nota: + + + + qpdfview::ShortcutHandler + + + Action + Azione + + + + Key sequence + Scorciatoia da tastiera + + + + Skip backward + Salta indietro + + + + Skip forward + Salta avanti + + + + Move up + Sposta su + + + + Move down + Sposta giù + + + + Move left + Sposta a sinistra + + + + Move right + Sposta a destra + + + + qpdfview::TreeView + + + &Expand all + &Espandi tutto + + + + &Collapse all + &Comprimi tutto + + + diff --git a/translations/qpdfview_ja.ts b/translations/qpdfview_ja.ts new file mode 100644 index 0000000..6440e97 --- /dev/null +++ b/translations/qpdfview_ja.ts @@ -0,0 +1,2001 @@ + + + + Japanese <ja@li.org> + Shinichirou Yamada <yamada_strong_yamada_nice_64bit@yahoo.co.jp> + 2018-12-17 17:45+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-12-18 05:38+0000 + # Japanese translation for qpdfview +# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2015. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + 画像(%1) + + + + Size + 寸法 + + + + Resolution + 解像度 + + + + Depth + 深度 + + + + + + + + + Format + 形式 + + + + Monochrome + モノクロ + + + + Indexed + インデックス済 + + + + 32 bits RGB + 32ビットRGB + + + + 32 bits ARGB + 32ビットARGB + + + + 16 bits RGB + 16ビットRGB + + + + 24 bits RGB + 24ビットRGB + + + + Model::PdfDocument + + + Linearized + 線形化済 + + + + Name + 名称 + + + + Type + 種類 + + + + Embedded + 埋込済 + + + + Subset + 一部分 + + + + File + ファイル + + + + + + + Yes + はい + + + + PDF version + PDFバージョン + + + + Encrypted + 暗号化済 + + + + + + + No + いいえ + + + + Model::PdfPage + + + Information + 情報 + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + 註釈の追加や削除をするには、第0.20.1版以降のPopplerライブラリが必要です。 + + + + Model::PsDocument + + + Title + 表題 + + + + Created for + + + + + Creator + 作成者 + + + + Creation date + 作成日時 + + + + Format + 形式 + + + + Language level + 言語レベル + + + + QObject + + + An empty instance name is not allowed. + インスタンス名を空にしておくことはできません。 + + + + An empty search text is not allowed. + 検索文字列は空であってはなりません。 + + + + Unknown command-line option '%1'. + 「%1」というコマンドラインオプションはありません。 + + + + Using '--instance' requires an instance name. + 「--instance」を使うにはインスタンス名も必要です。 + + + + Using '--instance' is not allowed without using '--unique'. + 「--instance」は「--unique」とともに使わなくてはなりません。 + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + インスタンス名には「[A-Z][a-z][0-9]_」以外の文字は使えません。また数字から始まってはなりません。 + + + + Using '--search' requires a search text. + 「--search」を使うには検索文字列も必要です。 + + + + Could not prepare signal handler. + シグナルハンドラを用意できませんでした。 + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + ShiftおよびCtrl + + + + Shift and Alt + ShiftおよびAlt + + + + Ctrl and Alt + CtrlおよびAlt + + + + Right mouse button + 右マウスボタン + + + + Middle mouse button + 中央マウスボタン + + + + None + なし + + + + qpdfview::BookmarkDialog + + + Bookmark + しおり + + + + Page: + ページ: + + + + Label: + ラベル: + + + + Comment: + コメント: + + + + Modified: + 更新日時: + + + + qpdfview::BookmarkMenu + + + &Open + 開く(&O) + + + + Open in new &tab + 新規タブで開く(&T) + + + + &Remove bookmark + しおりを外す(&R) + + + + qpdfview::Database + + + Jump to page %1 + %1ページヘ跳ぶ + + + + qpdfview::DocumentView + + + + Information + 情報 + + + + The source editor has not been set. + ソースエディタが設定されていません。 + + + + Opening URL is disabled in the settings. + URLを開くことは不可に設定されています。 + + + + Warning + 警告 + + + + + SyncTeX data for '%1' could not be found. + 「%1」に対応するSyncTeXデータは見つかりませんでした。 + + + + Printing '%1'... + 「%1」を印刷中です... + + + + Unlock %1 + %1を解除 + + + + Password: + パスワード: + + + + Page %1 + %1 ページ + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + 保存... + + + + Save and open... + 保存して開く... + + + + Save file attachment + ファイル添付物を保存 + + + + + Warning + 警告 + + + + Could not open file attachment saved to '%1'. + 「%1」に保存されているファイル保存物を開くことができませんでした。 + + + + Could not save file attachment to '%1'. + ファイル添付物を「%1」に保存することができませんでした。 + + + + qpdfview::FontsDialog + + + Fonts + フォント + + + + qpdfview::HelpDialog + + + Help + ヘルプ + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + help.html + + + + Find previous + 前を検索 + + + + Find next + 次を検索 + + + + qpdfview::MainWindow + + + Toggle tool bars + ツールバーを入切 + + + + Toggle menu bar + メニューバーを入切 + + + + + + + + + + + + + + Warning + 警告 + + + + + Could not open '%1'. + 「%1」を開くことができませんでした。 + + + + Copy file path + ファイルパスをコピー + + + + Select file path + ファイルパスを選択 + + + + Close all tabs + 全てのタブを閉じる + + + + Close all tabs but this one + これ以外のタブを全て閉じる + + + + Close all tabs to the left + 左側のタブを全て閉じる + + + + Close all tabs to the right + 右側のタブを全て閉じる + + + + + Open + 開く + + + + Open in new tab + 新規タブで開く + + + + + + Could not refresh '%1'. + 「%1」を再読込できませんでした。 + + + + Save copy + コピーを保存 + + + + Could not save copy at '%1'. + コピーを「%1」に保存することができませんでした。 + + + + Save as + 名前を付けて保存 + + + + + Move to instance + インスタンスへ移動 + + + + + Failed to access instance '%1'. + インスタンス「%1」へのアクセスに失敗しました。 + + + + + + Could not save as '%1'. + 「%1」として保存することができませんでした。 + + + + Could not print '%1'. + 「%1」を印刷することができませんでした。 + + + + Set first page + 最初のページを設定 + + + + Select the first page of the body matter: + 本体の最初のページを選択してください: + + + + Jump to page + 指定ページへ跳ぶ + + + + Page: + ページ: + + + + Jump to page %1 + %1ページヘ跳ぶ + + + + About qpdfview + qpdfviewについて + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfviewはQtを使用したタブ式文書ビューアです。</p><p>この版は下記のサポートを提供しています:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDFサポート(Poppler %1を使用)</li> + + + + <li>PS support using libspectre %1</li> + <li>PSサポート(libspectre %1を使用)</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVuサポート(DjVuLibre %1を使用)</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDFサポート(Fitz %1を使用)</li> + + + + <li>Printing support using CUPS %1</li> + <li>印刷サポート(CUPS %1を使用)</li> + + + + &Edit bookmark + しおりを編集(&E) + + + + The document '%1' has been modified. Do you want to save your changes? + 文書「%1」は修正されています。変更分を保存しますか? + + + + Page width + ページ幅 + + + + Page size + ページ寸法 + + + + Match &case + 大文字と小文字を区別(&C) + + + + Whole &words + 単語全体(&W) + + + + Highlight &all + 全て強調(&A) + + + + &Open... + 開く(&O)... + + + + Open in new &tab... + 新規タブに開く(&T)... + + + + Open &copy in new tab + 新規タブにコピーを開く(&C) + + + + Move to &instance... + インスタンスへ移動(&I)... + + + + &Refresh + 再読込(&R) + + + + Information + 情報 + + + + Instance-to-instance communication requires D-Bus support. + インスタンス間のやり取りにはD-Busサポートが必要です。 + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>より詳しい情報は<a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a>をご覧ください。</p><p>&copy; %1 The qpdfview developers</p> + + + + Save &as... + 名前を付けて保存(&A)... + + + + Save &copy... + コピーを保存(&C)... + + + + &Print... + 印刷(&P)... + + + + E&xit + 終了(&X) + + + + &Previous page + 前ページ(&P) + + + + &Next page + 次ページ(&N) + + + + &First page + 最初のページ(&F) + + + + &Last page + 最後のページ(&L) + + + + &Set first page... + 最初のページを設定(&S)... + + + + &Jump to page... + 指定ページへ跳ぶ(&J)... + + + + Jump &backward + 後ろに跳ぶ(&B) + + + + Jump for&ward + 前に跳ぶ(&W) + + + + &Search... + 検索(&S)... + + + + Find previous + 前を検索 + + + + Find next + 次を検索 + + + + Cancel search + 検索を取り消す + + + + &Copy to clipboard + クリップボードにコピー(&C) + + + + &Add annotation + 註釈を追加(&A) + + + + Settings... + 設定... + + + + &Continuous + 連続表示(&C) + + + + &Two pages + 見開き(&T) + + + + Two pages &with cover page + 見開き(表紙付き)(&W) + + + + &Multiple pages + 複数ページ(&M) + + + + Right to left + 右から左 + + + + Zoom &in + 拡大(&I) + + + + Zoom &out + 縮小(&O) + + + + Original &size + 原寸大(&S) + + + + Fit to page width + ページ幅に合わせる + + + + Fit to page size + ページ寸法に合わせる + + + + Rotate &left + 左に回転(&L) + + + + Rotate &right + 右に回転(&R) + + + + Invert colors + 色を反転 + + + + Convert to grayscale + グレースケールに変換 + + + + Trim margins + 余白を落とす + + + + Darken with paper color + 紙の色で暗くする + + + + Lighten with paper color + 紙の色で明るくする + + + + Fonts... + フォント... + + + + &Fullscreen + 全画面表示(&F) + + + + &Presentation... + プレゼンテーション(&P)... + + + + &Previous tab + 前のタブ(&P) + + + + &Next tab + 次のタブ(&N) + + + + &Close tab + タブを閉じる(&C) + + + + Close &all tabs + 全てのタブを閉じる(&A) + + + + Close all tabs &but current tab + 現在のタブ以外全て閉じる(&B) + + + + Restore &most recently closed tab + 直前に閉じたタブを復元(&M) + + + + &Previous bookmark + 前のしおり(&P) + + + + &Next bookmark + 次のしおり(&N) + + + + &Add bookmark + しおりを付ける(&A) + + + + Open copy in new &window + 新規ウィンドウにコピーを開く(&W) + + + + Split view horizontally... + ビューを左右に分割... + + + + Split view vertically... + ビューを上下に分割... + + + + Close current view + 現在のビューを閉じる + + + + Thumb&nails + サムネイル(&N) + + + + Book&marks + しおり(&M) + + + + Composition + 合成 + + + + + &Remove bookmark + しおりを外す(&R) + + + + Edit '%1' at %2,%3... + 「%1」の%2行%3列を編集... + + + + Open containing &folder + 文書のあるフォルダを開く(&F) + + + + &Save + 保存(&S) + + + + Remove all bookmarks + しおりを全て外す + + + + &Contents + 目次(&C) + + + + &About + qpdfviewについて(&A) + + + + + &File + ファイル(&F) + + + + + &Edit + 編集(&E) + + + + + &View + 表示(&V) + + + + &Outline + 概要(&O) + + + + &Properties + 設定(&P) + + + + &Search + 検索(&S) + + + + &Tool bars + ツールバー(&T) + + + + &Docks + ドック(&D) + + + + &Tabs + タブ(&T) + + + + &Bookmarks + しおり(&B) + + + + &Help + ヘルプ(&H) + + + + + Choose instance + インスタンスを選択 + + + + + Instance: + インスタンス: + + + + qpdfview::PageItem + + + Go to page %1. + %1ページに跳びます。 + + + + Go to page %1 of file '%2'. + ファイル「%2」の%1ページに跳びます。 + + + + Open '%1'. + 「%1」を開きます。 + + + + Edit form field '%1'. + フォームフィールド「%1」を編集します。 + + + + Copy &text + 文をコピー(&T) + + + + &Select text + 文を選択(&S) + + + + Copy &image + 画像をコピー(&I) + + + + Save image to &file... + 画像をファイルに保存(&F)... + + + + Save image to file + 画像をファイルに保存 + + + + Warning + 警告 + + + + Could not save image to file '%1'. + 画像をファイル「%1」に保存できませんでした。 + + + + Add &text + 文を追加(&T) + + + + Add &highlight + 強調部を追加(&H) + + + + &Copy link address + リンクアドレスをコピー(&C) + + + + &Select link address + リンクアドレスを選択(&S) + + + + &Remove annotation + 註釈を削除(&R) + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + アンチエイリアス: + + + + Text antialiasing: + テキストのアンチエイリアス: + + + + + None + なし + + + + Full + 完全 + + + + Reduced + 軽減 + + + + + Text hinting: + テキストのヒンティング: + + + + Ignore paper color: + ページ色を無視: + + + + Overprint preview: + 重ね刷りをプレビュー: + + + + Solid + 単色 + + + + Shaped + シェイプ + + + + Thin line mode: + 細線モード: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + バックエンド: + + + + qpdfview::PluginHandler + + + Image (%1) + 画像(%1) + + + + Compressed (%1) + 圧縮済(%1) + + + + Supported formats (%1) + サポート形式(%1) + + + + Could not decompress '%1'! + 「%1」を展開できませんでした! + + + + Could not match file type of '%1'! + 「%1」のファイル形式に一致しませんでした! + + + + Critical + 致命的 + + + + Could not load plug-in for file type '%1'! + ファイル形式「%1」のプラグインを読み込めませんでした! + + + + qpdfview::PrintDialog + + + Fit to page: + ページに合わせる: + + + + Page ranges: + ページ範囲: + + + + All pages + 全ページ + + + + Even pages + 偶数ページ + + + + Odd pages + 奇数ページ + + + + Page set: + ページセット: + + + + Single page + 1ページ + + + + Two pages + 2ページ + + + + Four pages + 4ページ + + + + Six pages + 6ページ + + + + Nine pages + 9ページ + + + + Sixteen pages + 16ページ + + + + Number-up: + 連番付け: + + + + Bottom to top and left to right + 下から上および左から右 + + + + Bottom to top and right to left + 下から上および右から左 + + + + Left to right and bottom to top + 左から右および下から上 + + + + Left to right and top to bottom + 左から右および上から下 + + + + Right to left and bottom to top + 右から左および下から上 + + + + Right to left and top to bottom + 右から左および上から下 + + + + Top to bottom and left to right + 上から下および左から右 + + + + Top to bottom and right to left + 上から下および右から左 + + + + Number-up layout: + 連番付けのレイアウト: + + + + Extended options + 拡張オプション + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + 画像アンチエイリアスビット: + + + + Text antialias bits: + 文字アンチエイリアスビット: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + 最近閉じたもの(&R) + + + + &Clear list + 一覧をクリア(&C) + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + 最近使用したもの(&U) + + + + &Clear list + 一覧をクリア(&C) + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> 件 + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%2</b>ページに<b>%1</b>件 + + + + qpdfview::SearchableMenu + + + Search for '%1'... + 「%1」を検索... + + + + qpdfview::SettingsDialog + + + General + 汎用 + + + + &Behavior + 挙動(&B) + + + + &Graphics + 画像(&G) + + + + &Interface + インタフェース(&I) + + + + &Shortcuts + ショートカット(&S) + + + + &Modifiers + 修飾キー(&M) + + + + Defaults + 既定 + + + + Defaults on current tab + このタブの既定値 + + + + Mouse wheel modifiers + マウスホイール修飾キー + + + + Mouse button modifiers + マウスボタン修飾キー + + + + Open URL: + URLを開く: + + + + Auto-refresh: + 自動更新: + + + + + + + + + + + + Effective after restart. + 再起動後に有効になります。 + + + + Track recently used: + 最近使用したものを追跡: + + + + Keep recently closed: + 最近閉じたものを保持: + + + + Restore tabs: + タブを復元: + + + + Restore bookmarks: + しおりを復元: + + + + Restore per-file settings: + ファイル毎の設定を復元: + + + + min + + + + + Save database interval: + データベース保存間隔: + + + + Synchronize presentation: + プレゼンテーションを同期: + + + + Default + 既定 + + + + Presentation screen: + プレゼンテーション画面: + + + + Synchronize split views: + 分割ビューを同期: + + + + Zoom factor: + 拡大比: + + + + Parallel search execution: + 並行検索の実行: + + + + ms + ミリ秒 + + + + None + なし + + + + Highlight duration: + 強調する時間: + + + + Highlight color: + 強調表示の色: + + + + Annotation color: + 註釈の色: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + 「%1」は絶対ファイルパスで置き換えられます。「%2」および「%3」は、それぞれ行番号と列番号で置き換えられます。 + + + + Source editor: + ソースエディタ: + + + + Use tiling: + タイル配置を使用: + + + + Keep obsolete pixmaps: + 旧いピックスマップを保持: + + + + Use device pixel ratio: + デバイスのピクセル比を使用: + + + + Decorate pages: + ページを装飾: + + + + Decorate links: + リンクを装飾: + + + + Decorate form fields: + フォームフィールドを装飾: + + + + Background color: + 背景色: + + + + Paper color: + 紙の色: + + + + Presentation background color: + プレゼンテーション背景色: + + + + Pages per row: + 行あたりページ数: + + + + + + px + ピクセル + + + + Page spacing: + ページ間隔: + + + + Thumbnail spacing: + サムネイル間隔: + + + + Thumbnail size: + サムネイル寸法: + + + + Fit to viewport + ビューポートに合わせる + + + + Document context menu: + 文書のコンテキストメニュー: + + + + Tab context menu: + タブのコンテキストメニュー: + + + + Open in source editor: + ソースエディタで開く: + + + + + %1 MB + %1 MB + + + + Cache size: + キャッシュ容量: + + + + Minimal scrolling: + 最小限のスクロール: + + + + Prefetch: + 事前読込: + + + + Prefetch distance: + 事前読込数: + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + タブの位置: + + + + As needed + 必要時 + + + + Always + 常時 + + + + Exit after last tab: + 最後のタブを閉じたら終了: + + + + Scrollable menus: + スクロール可能なメニュー: + + + + Searchable menus: + 検索可能なメニュー: + + + + Zoom to selection: + 選択部を拡大: + + + + + Never + なし + + + + Settings + 設定 + + + + Tab visibility: + タブの可視性: + + + + Spread tabs: + タブを広げる: + + + + New tab next to current tab: + 現タブの隣に新規タブ: + + + + Recently used count: + 最近使用したものの数: + + + + Recently closed count: + 最近閉じたものの数: + + + + Extended search dock: + 拡張検索ドック: + + + + Toggle tool and menu bars with fullscreen: + 全画面表示でのツールバーとメニューバーを入切: + + + + File tool bar: + ファイルツールバー: + + + + Edit tool bar: + 編集ツールバー: + + + + View tool bar: + 表示ツールバー: + + + + Use page label: + ページラベルを使用: + + + + Document title as tab title: + 文書表題をタブに表示: + + + + Current page in window title: + 現ページをタイトルバーに表示: + + + + Instance name in window title: + インスタンス名をタイトルバーに表示: + + + + Synchronize outline view: + 概要表示を同期: + + + + Highlight current thumbnail: + 現サムネイルを強調: + + + + Limit thumbnails to results: + サムネイルを検索結果に限定: + + + + Annotation overlay: + 註釈の重ね置き: + + + + Form field overlay: + フォームフィールドの重ね置き: + + + + Zoom: + 表示倍率: + + + + Rotate: + 回転: + + + + Scroll: + スクロール: + + + + Copy to clipboard: + クリップボードにコピー: + + + + Add annotation: + 註釈を追加: + + + + qpdfview::ShortcutHandler + + + Action + 動作 + + + + Key sequence + キーシーケンス + + + + Skip backward + 後ろに跳ぶ + + + + Skip forward + 前に跳ぶ + + + + Move up + 上へ移動 + + + + Move down + 下へ移動 + + + + Move left + 左へ移動 + + + + Move right + 右へ移動 + + + + qpdfview::TreeView + + + &Expand all + 全て展開(&E) + + + + &Collapse all + 全て畳む(&C) + + + + MainWindow + + &Save copy... + コピーを保存(&S) + + + diff --git a/translations/qpdfview_kk.ts b/translations/qpdfview_kk.ts new file mode 100644 index 0000000..ddcd110 --- /dev/null +++ b/translations/qpdfview_kk.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Пішімі + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Аты + + + + Type + Түрі + + + + Embedded + Енгізілген + + + + Subset + Ішкі жиын + + + + File + Файл + + + + + + + Yes + Иә + + + + PDF version + + + + + Encrypted + + + + + + + + No + Жоқ + + + + Model::PdfPage + + + Information + Ақпараты + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Аңдатпаларды қосу не өшіру үшін Poppler библиотекасының 0.20.1 не одан жоғары нұсқасы керек. + + + + Model::PsDocument + + + Title + Атауы + + + + Created for + Үшін жасалған + + + + Creator + Жасаған + + + + Creation date + Жасалған күні + + + + Format + Пішімі + + + + Language level + Тіл деңгейі + + + + QObject + + + An empty instance name is not allowed. + Экземплярдың бос атына рұқсат жоқ. + + + + An empty search text is not allowed. + Іздеу үшін мәтін бос болмауы тиіс. + + + + Unknown command-line option '%1'. + Белгісіз '%1' командалық жол опциясы. + + + + Using '--instance' requires an instance name. + '--instance' опциясын қолдану экземпляр атын талап етеді. + + + + Using '--instance' is not allowed without using '--unique'. + '--instance' опциясын '--unique' опциясыз қолдану рұқсат етілмеген. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + '--search' опциясы іздеу үшін мәтінді талап етеді. + + + + Could not prepare signal handler. + Сигнал талдаушысын дайындау мүмкін емес. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift және Ctrl + + + + Shift and Alt + Shift және Alt + + + + Ctrl and Alt + Ctrl және Alt + + + + Right mouse button + Тышқанның оң жақ батырмасы + + + + Middle mouse button + Тышқанның орта батырмасы + + + + None + Ешнәрсе + + + + qpdfview::BookmarkDialog + + + Bookmark + Бетбелгі + + + + Page: + Бет: + + + + Label: + Белгі: + + + + Comment: + Түсіндірме: + + + + Modified: + Түзетілген: + + + + qpdfview::BookmarkMenu + + + &Open + А&шу + + + + Open in new &tab + Жаңа бе&тте ашу + + + + &Remove bookmark + Бетбелгіні ө&шіру + + + + qpdfview::Database + + + Jump to page %1 + %1 бетіне өту + + + + qpdfview::DocumentView + + + + Information + Ақпараты + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Сілтемелерді ашу мүмкіндігі баптауларда сөндірілген. + + + + Warning + Ескерту + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' баспаға шығару... + + + + Unlock %1 + %1 босату + + + + Password: + Пароль: + + + + Page %1 + Бет %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Сақтау... + + + + Save and open... + Сақтау және ашу... + + + + Save file attachment + Файл салынымын сақтау + + + + + Warning + Ескерту + + + + Could not open file attachment saved to '%1'. + '%1' жерінде сақталған файл салынымын ашу мүмкін емес. + + + + Could not save file attachment to '%1'. + Файл салынымын '%1' жеріне сақтау мүмкін емес. + + + + qpdfview::FontsDialog + + + Fonts + Қаріптер + + + + qpdfview::HelpDialog + + + Help + Көмек + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Алдыңғысын табу + + + + Find next + Келесісін табу + + + + qpdfview::MainWindow + + + Toggle tool bars + Саймандар панельдерін көрсету/жасыру + + + + Toggle menu bar + Мәзір жолағын көрсету/жасыру + + + + + + + + + + + + + + Warning + Ескерту + + + + + Could not open '%1'. + '%1' ашу мүмкін емес. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Барлық беттерді жабу + + + + Close all tabs but this one + Осыдан басқа барлық бетті жабу + + + + Close all tabs to the left + Сол жақта барлық бетті жабу + + + + Close all tabs to the right + Оң жақта барлық бетті жабу + + + + + Open + Ашу + + + + Open in new tab + Жаңа бетте ашу + + + + + + Could not refresh '%1'. + '%1' жаңарту мүмкін емес. + + + + Save copy + Көшірмесін сақтау + + + + Could not save copy at '%1'. + Көшірмені '%1' жерінде сақтау мүмкін емес. + + + + Save as + Қалайша сақтау + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + '%1' ретінде сақтау мүмкін емес. + + + + Could not print '%1'. + '%1' баспаға шығару мүмкін емес. + + + + Set first page + Бірінші бетті орнату + + + + Select the first page of the body matter: + + + + + Jump to page + Бетке өту + + + + Page: + Бет: + + + + Jump to page %1 + %1 бетіне өту + + + + About qpdfview + qpdfview туралы + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview - құжаттарды көрсетушісі, Qt қолданады.</p><p>Бұл нұсқада бар:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF қолдауы Poppler %1 негізінде</li> + + + + <li>PS support using libspectre %1</li> + <li>PS қолдауы libspectre %1 негізінде</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu қолдауы DjVuLibre %1 негізінде</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF қолдауы Fitz %1 негізінде</li> + + + + <li>Printing support using CUPS %1</li> + <li>Баспаға шығару CUPS %1 негізінде</li> + + + + &Edit bookmark + Бетбелгіні түз&ету + + + + The document '%1' has been modified. Do you want to save your changes? + '%1' құжаты өзгертілген. Өзгерістерді сақтау керек пе? + + + + Page width + Бет ені + + + + Page size + Бет өлшемдері + + + + Match &case + Ре&гистрін ескеру + + + + Whole &words + + + + + Highlight &all + Б&арлығын түспен ерекшелеу + + + + &Open... + А&шу... + + + + Open in new &tab... + Жаңа бе&тте ашу... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + Жаңа&рту + + + + Information + Ақпараты + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Қала&йша сақтау... + + + + Save &copy... + + + + + &Print... + Бас&паға шығару... + + + + E&xit + &Шығу + + + + &Previous page + А&лдыңғы бет + + + + &Next page + К&елесі бет + + + + &First page + &Бірінші бет + + + + &Last page + С&оңғы бет + + + + &Set first page... + + + + + &Jump to page... + Б&етке өту... + + + + Jump &backward + Ар&тқа секіру + + + + Jump for&ward + А&лға секіру + + + + &Search... + І&здеу... + + + + Find previous + Алдыңғысын табу + + + + Find next + Келесісін табу + + + + Cancel search + Іздеуден бас тарту + + + + &Copy to clipboard + Алмасу буферіне &көшіру + + + + &Add annotation + Аңдатпаны қ&осу + + + + Settings... + Баптаулар... + + + + &Continuous + Ү&зіліссіз + + + + &Two pages + &Екі бет + + + + Two pages &with cover page + Екі бет, мұқабамен &бірге + + + + &Multiple pages + Бірн&еше бет + + + + Right to left + + + + + Zoom &in + Үлке&йту + + + + Zoom &out + Кі&шірейту + + + + Original &size + Бастапқы ө&лшемі + + + + Fit to page width + Бет енімен сыйдыру + + + + Fit to page size + Бет өлшемімен сыйдыру + + + + Rotate &left + &Солға бұру + + + + Rotate &right + &Оңға бұру + + + + Invert colors + Түстерді терістеу + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Қаріптер... + + + + &Fullscreen + Толық &экранға + + + + &Presentation... + &Презентация... + + + + &Previous tab + А&лдыңғы бет + + + + &Next tab + К&елесі бет + + + + &Close tab + Бетті жа&бу + + + + Close &all tabs + Б&арлық беттерді жабу + + + + Close all tabs &but current tab + Ағ&ымдағы беттен барлық басқа беттерді жабу + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Ал&дыңғы бетбелгі + + + + &Next bookmark + Ке&лесі бетбелгі + + + + &Add bookmark + Бе&тбелгіні қосу + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Бетбелгіні ө&шіру + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Барлық бетбелгілерді өшіру + + + + &Contents + Құра&масы + + + + &About + &Осы туралы + + + + + &File + &Файл + + + + + &Edit + &Түзету + + + + + &View + Тү&рі + + + + &Outline + &Мазмұны + + + + &Properties + Қас&иеттері + + + + &Search + І&здеу + + + + &Tool bars + &Саймандар панельдері + + + + &Docks + &Бекіткіштер + + + + &Tabs + Б&еттер + + + + &Bookmarks + &Бетбелгілер + + + + &Help + &Көмек + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + %1 бетке өту. + + + + Go to page %1 of file '%2'. + %1 бетке өту, '%2' файлы ішінде. + + + + Open '%1'. + %1' ашу. + + + + Edit form field '%1'. + '%1' форма өрісін түзету. + + + + Copy &text + Мә&тінін көшіріп алу + + + + &Select text + + + + + Copy &image + Сурет&ті көшіру + + + + Save image to &file... + Суретті &файлға сақтау... + + + + Save image to file + Суретті файлға сақтау + + + + Warning + Ескерту + + + + Could not save image to file '%1'. + Суретті '%1' файлын сақтау мүмкін емес. + + + + Add &text + Мә&тінді қосу + + + + Add &highlight + Түспен ер&екшелеуді қосу + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Аңдатпаны ө&шіру + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Тегістеу: + + + + Text antialiasing: + Мәтінді тегістеу: + + + + + None + Ешнәрсе + + + + Full + Толық + + + + Reduced + Кішірейтілген + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + Бүтін + + + + Shaped + Пішінделген + + + + Thin line mode: + Жұқа сызық режимі: + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Критикалық + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + Бетке сыйдыру: + + + + Page ranges: + Беттер ауқымы: + + + + All pages + Барлық беттер + + + + Even pages + Жұп беттер + + + + Odd pages + Тақ беттер + + + + Page set: + Баспаға шығарылатын беттер: + + + + Single page + Бір бет + + + + Two pages + Екі бет + + + + Four pages + Төрт бет + + + + Six pages + Алты бет + + + + Nine pages + Тоғыз бет + + + + Sixteen pages + Он алты бет + + + + Number-up: + + + + + Bottom to top and left to right + Төменнен жоғарыға, солдан оңға + + + + Bottom to top and right to left + Төменнен жоғарыға, оңнан солға + + + + Left to right and bottom to top + Солдан оңға, төменнен жоғарыға + + + + Left to right and top to bottom + Солдан оңға, жоғарыдан төмен + + + + Right to left and bottom to top + Оңнан солға, төменнен жоғарыға + + + + Right to left and top to bottom + Оңнан солға, жоғарыдан төмен + + + + Top to bottom and left to right + Жоғарыдан төмен, солдан оңға + + + + Top to bottom and right to left + Жоғарыдан төмен, оңнан солға + + + + Number-up layout: + Беттер реті: + + + + Extended options + Кеңейтілген баптаулар + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + Тізімді та&зарту + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Соңғы қ&олданылған + + + + &Clear list + Тізімді та&зарту + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Жалпы + + + + &Behavior + Мінез-құл&ығы + + + + &Graphics + &Графика + + + + &Interface + &Интерфейс + + + + &Shortcuts + Жа&рлықтар + + + + &Modifiers + &Түрлендіргіштер + + + + Defaults + Бастапқы мәндер + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Сілтемені ашу: + + + + Auto-refresh: + Автожаңарту: + + + + + + + + + + + + Effective after restart. + Қайта қосудан кейін іске асады. + + + + Track recently used: + Жақында қолданылғанды бақылау: + + + + Keep recently closed: + + + + + Restore tabs: + Беттерді қалпына келтіру: + + + + Restore bookmarks: + Бетбелгілерді қалпына келтіру: + + + + Restore per-file settings: + Жеке файлдарға қатысты баптауларды қалпына келтіру: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Презентацияны синхрондау: + + + + Default + Бастапқы + + + + Presentation screen: + Презентация экраны + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Ешнәрсе + + + + Highlight duration: + Түспен ерекшелеу ұзақтығы: + + + + Highlight color: + Түспен ерекшелеу түсі: + + + + Annotation color: + Аңдатпа түсі: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' файлға дейінгі абсолютті орналасу жолымен алмастырылады. '%2' және '%3' сәйкесінше жол және баған нөмерімен алмастырылады. + + + + Source editor: + Бастапқы код түзеткіші: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Бет қоршауы: + + + + Decorate links: + Сілтемелерді ерекшелеу: + + + + Decorate form fields: + Формалар өрістерін ерекшелеу: + + + + Background color: + Фон түсі: + + + + Paper color: + Қағаз түсі: + + + + Presentation background color: + + + + + Pages per row: + Бір жолдағы беттер саны + + + + + + px + + + + + Page spacing: + Беттер аралығы: + + + + Thumbnail spacing: + Үлгілер аралығы: + + + + Thumbnail size: + Үлгі өлшемі: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 МБ + + + + Cache size: + Кэш өлшемі: + + + + Minimal scrolling: + + + + + Prefetch: + Алдын-ала жүктеу: + + + + Prefetch distance: + Алдын-ала жүктеу қашықтығы: + + + + Top + Жоғары + + + + Bottom + Төмен + + + + Left + Сол жақ + + + + Right + Оң жақ + + + + Tab position: + Беттердің орналасуы: + + + + As needed + Керек болған кезде + + + + Always + Әрқашан + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Ешқашан + + + + Settings + + + + + Tab visibility: + Бет көрінуі: + + + + Spread tabs: + + + + + New tab next to current tab: + Жаңа бетті ағымдағы беттен кейін ашу: + + + + Recently used count: + Жақында қолданылған құжаттар саны: + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Файл саймандар панелі: + + + + Edit tool bar: + Түзету саймандар панелі: + + + + View tool bar: + Түрі саймандар панелі: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + Терезе атауында ағымдағы бет: + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + Ағымдағы үлгіні түспен ерекшелеу: + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Масштаб: + + + + Rotate: + Бұру: + + + + Scroll: + Айналдыру: + + + + Copy to clipboard: + Алмасу буферіне көшіру: + + + + Add annotation: + Аңдатпаны қосу: + + + + qpdfview::ShortcutHandler + + + Action + Әрекет + + + + Key sequence + Пернелер тізбегі + + + + Skip backward + Артқа өткізу + + + + Skip forward + Алға өткізу + + + + Move up + Жоғары жылжыту + + + + Move down + Төмен жылжыту + + + + Move left + Солға жылжыту + + + + Move right + Оңға жылжыту + + + + qpdfview::TreeView + + + &Expand all + Барлығын &жазық қылу + + + + &Collapse all + Барлығын ж&инау + + + diff --git a/translations/qpdfview_ko.ts b/translations/qpdfview_ko.ts new file mode 100644 index 0000000..5ab35b3 --- /dev/null +++ b/translations/qpdfview_ko.ts @@ -0,0 +1,1994 @@ + + + + Korean <ko@li.org> + Hanjin Cho <Unknown> + 2017-07-13 11:03+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Korean translation for qpdfview +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + 파일 크기 + + + + Resolution + 해상도 + + + + Depth + + + + + + + + + + Format + 포맷 + + + + Monochrome + 단색 + + + + Indexed + 색인 + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + 이 탭만 남기고 모두 닫기 + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + gpdfview에 대하여 + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_ku.ts b/translations/qpdfview_ku.ts new file mode 100644 index 0000000..0e721f7 --- /dev/null +++ b/translations/qpdfview_ku.ts @@ -0,0 +1,1994 @@ + + + + Kurdish <ku@li.org> + Rokar ✌ <Unknown> + 2017-02-15 20:44+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Kurdish translation for qpdfview +# Copyright (c) 2017 Rosetta Contributors and Canonical Ltd 2017 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2017. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + Mezinahî + + + + Resolution + Rêjeşane + + + + Depth + Kûrahî + + + + + + + + + Format + Teşe + + + + Monochrome + Reş-spî + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nav + + + + Type + Cûre + + + + Embedded + Veşartî + + + + Subset + Koma Jêr + + + + File + Dosya + + + + + + + Yes + Erê + + + + PDF version + PDF versiyon + + + + Encrypted + Şîfrekirî + + + + + + + No + Na + + + + Model::PdfPage + + + Information + Agahî + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + Sernav + + + + Created for + + + + + Creator + Afirînêr + + + + Creation date + + + + + Format + Teşe + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Bikşîne + + + + Ctrl + Ctrl + + + + Alt + Jêr + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + Bişkojka rastê ya mişk + + + + Middle mouse button + Bişkojka navîn a mişk + + + + None + Tu yek + + + + qpdfview::BookmarkDialog + + + Bookmark + Bijare + + + + Page: + Rûpel: + + + + Label: + Etîket: + + + + Comment: + Şîrove: + + + + Modified: + Guhertî: + + + + qpdfview::BookmarkMenu + + + &Open + &Veke + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Agahî + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + Hişyar + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + Şîfre: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Tomar bike... + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Hişyar + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + Cureyên nivîsê + + + + qpdfview::HelpDialog + + + Help + Alîkarî + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Hişyar + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Hemû hilfirînan bigire + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Veke + + + + Open in new tab + Di hilpekîna nû de veke + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + Cuda tomar bike + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + Rûpel: + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + &Veke... + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Tazekirin + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + &Çap bike... + + + + E&xit + Der&keve + + + + &Previous page + + + + + &Next page + &Rûpela piştre + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + Mîheng... + + + + &Continuous + &Bê navber + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + Rast ber bi çep + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + &DîmenderTijî + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + &Tomar bike + + + + Remove all bookmarks + + + + + &Contents + &Naverok + + + + &About + &Derbarê + + + + + &File + &Dosye + + + + + &Edit + &Biguherhîne + + + + + &View + &Bibîne + + + + &Outline + + + + + &Properties + &Taybetî + + + + &Search + &Lê Bigere + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + &Pekan + + + + &Bookmarks + &Bijare + + + + &Help + &Alîkarî + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + Hişyar + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + Tu yek + + + + Full + Tije + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Krîtîk + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + Rûpelê rêzkirinê: + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Giştî + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + Standard + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + deq + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + Wekî heyî + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Tu yek + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + Rengê bingehê: + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + px + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + Mezinahiya wêneyên biçûk: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Jor + + + + Bottom + Bin + + + + Left + Çep + + + + Right + Rast + + + + Tab position: + + + + + As needed + + + + + Always + Her dem + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Hîç + + + + Settings + Mîheng + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + Çalakî + + + + Key sequence + + + + + Skip backward + Paş de hup bike + + + + Skip forward + Pêşde Hilpeke + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_ky.ts b/translations/qpdfview_ky.ts new file mode 100644 index 0000000..17febc4 --- /dev/null +++ b/translations/qpdfview_ky.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + Маалымат + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Барак: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Ачуу + + + + Open in new &tab + Жаңы &салмадан ачуу + + + + &Remove bookmark + Чөп катты &өчүрүү + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Маалымат + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + Эскертүү + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' басуу... + + + + Unlock %1 + %1 тосмолоодон алуу + + + + Password: + Сырсөз: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + Эскертүү + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + Мурункуну табуу + + + + Find next + Кийинкини табуу + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Эскертүү + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Ачуу + + + + Open in new tab + Жаңы салмадан ачуу + + + + + + Could not refresh '%1'. + + + + + Save copy + Көчүрмөнү сактоо + + + + Could not save copy at '%1'. + + + + + Save as + Ат коюп сактоо + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Баракка өтүү + + + + Page: + Барак: + + + + Jump to page %1 + + + + + About qpdfview + qpdfview жөнүндө + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Барактын туурасы боюнча + + + + Page size + Барактын өлчөмү боюнча + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + &Ачуу... + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Жаңыртуу + + + + Information + Маалымат + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + &Ат коюп сактоо... + + + + Save &copy... + + + + + &Print... + &Басма... + + + + E&xit + + + + + &Previous page + &Мурунку барак + + + + &Next page + &Кийинки барак + + + + &First page + &Биринчи барак + + + + &Last page + &Акыркы барак + + + + &Set first page... + + + + + &Jump to page... + Баракка &өтүү... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &Издөө... + + + + Find previous + Мурункуну табуу + + + + Find next + Кийинкини табуу + + + + Cancel search + Издөөнү жокко чыгаруу + + + + &Copy to clipboard + Алмашуу буферине &көчүрүү + + + + &Add annotation + + + + + Settings... + Ырастоолор... + + + + &Continuous + + + + + &Two pages + &Эки барак + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Чөп катты &өчүрүү + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + Эскертүү + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_lt.ts b/translations/qpdfview_lt.ts new file mode 100644 index 0000000..166669f --- /dev/null +++ b/translations/qpdfview_lt.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Paveikslas (%1) + + + + Size + Dydis + + + + Resolution + Raiška + + + + Depth + Gylis + + + + + + + + + Format + Formatas + + + + Monochrome + Vienspalvis + + + + Indexed + Indeksuotasis + + + + 32 bits RGB + 32 bitų RGB + + + + 32 bits ARGB + 32 bitų ARGB + + + + 16 bits RGB + 16 bitų RGB + + + + 24 bits RGB + 24 bitų RGB + + + + Model::PdfDocument + + + Linearized + Linearizuotas + + + + Name + Pavadinimas + + + + Type + Tipas + + + + Embedded + Įtaisytas + + + + Subset + Poaibis + + + + File + Failas + + + + + + + Yes + Taip + + + + PDF version + PDF versija + + + + Encrypted + Užšifruotas + + + + + + + No + Ne + + + + Model::PdfPage + + + Information + Informacija + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Norint pridėti ar šalinti pastabas, reikalinga Poppler bibliotekos versija 0.20.1 arba aukštesnė. + + + + Model::PsDocument + + + Title + Antraštė + + + + Created for + Sukurta + + + + Creator + Sukūrė + + + + Creation date + Sukūrimo data + + + + Format + Formatas + + + + Language level + Kalbos lygis + + + + QObject + + + An empty instance name is not allowed. + Tuščias egzemplioriaus pavadinimas yre neleidžiamas. + + + + An empty search text is not allowed. + Tuščias paieškos tekstas nėra leidžiamas. + + + + Unknown command-line option '%1'. + Nežinoma komandų eilutės parinktis '%1'. + + + + Using '--instance' requires an instance name. + "--instance" naudojimas reikalauja egzemplioriaus pavadinimo. + + + + Using '--instance' is not allowed without using '--unique'. + "--instance" naudojimas, nenaudojant "--unique" yra neleidžiamas. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Egzemplioriaus pavadinime privalo būti tik simboliai "[A-Z][a-z][0-9]_" ir jis negali prasidėti skaičiumi. + + + + Using '--search' requires a search text. + "--search" naudojimas reikalauja ieškomo teksto. + + + + Could not prepare signal handler. + Nepavyko paruošti signalo doroklės. + + + + QShortcut + + + Shift + Shift (Lyg2) + + + + Ctrl + Ctrl (Vald) + + + + Alt + Alt + + + + Shift and Ctrl + Shift (Lyg2) ir Ctrl (Vald) + + + + Shift and Alt + Shift (Lyg2) ir Alt + + + + Ctrl and Alt + Ctrl (Vald) ir Alt + + + + Right mouse button + Dešinysis pelės mygtukas + + + + Middle mouse button + Vidurinis pelės mygtukas + + + + None + Nėra + + + + qpdfview::BookmarkDialog + + + Bookmark + Žymė + + + + Page: + Puslapis: + + + + Label: + Etiketė: + + + + Comment: + Komentaras: + + + + Modified: + Keista: + + + + qpdfview::BookmarkMenu + + + &Open + &Atverti + + + + Open in new &tab + Atverti naujoje kor&telėje + + + + &Remove bookmark + Ša&linti žymę + + + + qpdfview::Database + + + Jump to page %1 + Pereiti į puslapį %1 + + + + qpdfview::DocumentView + + + + Information + Informacija + + + + The source editor has not been set. + Nėra nustatytas šaltinio redaktorius. + + + + Opening URL is disabled in the settings. + URL atvėrimas yra išjungtas nustatymuose + + + + Warning + Įspėjimas + + + + + SyncTeX data for '%1' could not be found. + Nepavyko rasti SyncTeX duomenų, skirtų "%1". + + + + Printing '%1'... + Spausdinama '%1'... + + + + Unlock %1 + Atrakinti %1 + + + + Password: + Slaptažodis: + + + + Page %1 + Puslapis %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Įrašyti... + + + + Save and open... + Įrašyti ir atverti... + + + + Save file attachment + Įrašyti failo priedą + + + + + Warning + Įspėjimas + + + + Could not open file attachment saved to '%1'. + Nepavyko atverti failo priedo, įrašyto į "%1". + + + + Could not save file attachment to '%1'. + Nepavyko įrašyti failo priedo į "%1". + + + + qpdfview::FontsDialog + + + Fonts + Šriftai + + + + qpdfview::HelpDialog + + + Help + Pagalba + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_lt.html + + + + Find previous + Rasti ankstesnį + + + + Find next + Rasti kitą + + + + qpdfview::MainWindow + + + Toggle tool bars + Perjungti įrankių juostas + + + + Toggle menu bar + Perjungti meniu juostą + + + + + + + + + + + + + + Warning + Įspėjimas + + + + + Could not open '%1'. + Nepavyko atverti '%1'. + + + + Copy file path + Kopijuoti failo kelią + + + + Select file path + Pasirinkti failo kelią + + + + Close all tabs + Užverti visas korteles + + + + Close all tabs but this one + Užverti visas korteles, išskyrus šią + + + + Close all tabs to the left + Užverti visas korteles kairėje + + + + Close all tabs to the right + Užverti visas korteles dešinėje + + + + + Open + Atverti + + + + Open in new tab + Atverti naujoje kortelėje + + + + + + Could not refresh '%1'. + Nepavyko iš naujo įkelti '%1'. + + + + Save copy + Įrašyti kopiją + + + + Could not save copy at '%1'. + Nepavyko įrašyti kopijos į "%1". + + + + Save as + Įrašyti kaip + + + + + Move to instance + Perkelti į egzempliorių + + + + + Failed to access instance '%1'. + Nepavyko gauti prieigos prie egzemplioriaus "%1". + + + + + + Could not save as '%1'. + Nepavyko įrašyti "%1". + + + + Could not print '%1'. + Nepavyko spausdinti "%1". + + + + Set first page + Nustatyti pirmą puslapį + + + + Select the first page of the body matter: + Pasirinkite pirmą pagrindinės dalies medžiagos puslapį: + + + + Jump to page + Pereiti į puslapį + + + + Page: + Puslapis: + + + + Jump to page %1 + Pereiti į puslapį %1 + + + + About qpdfview + Apie qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview yra korteles palaikanti dokumentų peržiūros programa, naudojanti Qt.</p><p>Į šią versiją įeina:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF palaikymas, naudojant Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS palaikymas, naudojant libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu palaikymas, naudojant DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF palaikymas, naudojant Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Spausdinimo palaikymas, naudojant CUPS %1</li> + + + + &Edit bookmark + R&edaguoti žymę + + + + The document '%1' has been modified. Do you want to save your changes? + Dokumentas "%1" buvo modifikuotas. Ar norite įrašyti savo pakeitimus? + + + + Page width + Puslapio plotis + + + + Page size + Puslapio dydis + + + + Match &case + Skirti didžiąsias ir mažąsias raides + + + + Whole &words + Ištisi ž&odžiai + + + + Highlight &all + Par&yškinti visus + + + + &Open... + &Atverti... + + + + Open in new &tab... + Atverti naujoje kor&telėje... + + + + Open &copy in new tab + Atverti &kopiją naujoje kortelėje + + + + Move to &instance... + Perkelti į &egzempliorių... + + + + &Refresh + Įkelti iš nau&jo + + + + Information + Informacija + + + + Instance-to-instance communication requires D-Bus support. + Susisiekimas tarp egzempliorių reikalauja D-Bus palaikymo. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Išsamesnei informacijai, žiūrėkite <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a>.</p><p>&copy; %1 qpdfview kūrėjai</p> + + + + Save &as... + Įrašyti &kaip... + + + + Save &copy... + Įrašyti &kopiją + + + + &Print... + S&pausdinti... + + + + E&xit + Iš&eiti + + + + &Previous page + Ankstesnis &puslapis + + + + &Next page + &Kitas puslapis + + + + &First page + P&irmas puslapis + + + + &Last page + Pask&utinis puslapis + + + + &Set first page... + &Nustatyti pirmą puslapį... + + + + &Jump to page... + Pereiti į pu&slapį + + + + Jump &backward + Pereiti a&tgal + + + + Jump for&ward + Pereiti pi&rmyn + + + + &Search... + &Ieškoti... + + + + Find previous + Rasti ankstesnį + + + + Find next + Rasti kitą + + + + Cancel search + Atsisakyti paieškos + + + + &Copy to clipboard + &Kopijuoti į iškarpinę + + + + &Add annotation + Pridėti p&astabą + + + + Settings... + Nustatymai... + + + + &Continuous + &Ištisai + + + + &Two pages + &Du puslapiai + + + + Two pages &with cover page + Du puslapiai &su viršelio puslapiu + + + + &Multiple pages + &Keli puslapiai + + + + Right to left + Iš dešinės į kairę + + + + Zoom &in + Did&inti + + + + Zoom &out + &Mažinti + + + + Original &size + Originalo dydi&s + + + + Fit to page width + Talpinti į puslapio plotį + + + + Fit to page size + Talpinti į puslapio dydį + + + + Rotate &left + Pasukti &kairėn + + + + Rotate &right + Pasukti &dešinėn + + + + Invert colors + Invertuoti spalvas + + + + Convert to grayscale + Konvertuoti į pilkumo tonus + + + + Trim margins + Apkarpyti paraštes + + + + Darken with paper color + Tamsesnė už popieriaus spalvą + + + + Lighten with paper color + Šviesesnė už popieriaus spalvą + + + + Fonts... + Šriftai... + + + + &Fullscreen + &Visas ekranas + + + + &Presentation... + &Pateiktis... + + + + &Previous tab + &Ankstesnė kortelė + + + + &Next tab + &Kita kortelė + + + + &Close tab + &Užverti kortelę + + + + Close &all tabs + Užverti &visas korteles + + + + Close all tabs &but current tab + Užverti visas korteles, išskyrus &esamą + + + + Restore &most recently closed tab + Atkurti pa&skiausiai užvertą kortelę + + + + &Previous bookmark + &Ankstesnė žymė + + + + &Next bookmark + &Kita žymė + + + + &Add bookmark + &Pridėti žymę + + + + Open copy in new &window + Atverti kopiją naujame &lange + + + + Split view horizontally... + Perskirti rodinį horizontaliai... + + + + Split view vertically... + Perskirti rodinį vertikaliai... + + + + Close current view + Užverti dabartinį rodinį + + + + Thumb&nails + Mi&niatiūros + + + + Book&marks + Žy&mės + + + + Composition + Kompozicija + + + + + &Remove bookmark + Ša&linti žymę + + + + Edit '%1' at %2,%3... + Redaguoti "%1" ties %2,%3... + + + + Open containing &folder + Atverti vidinį apla&nką + + + + &Save + Į&rašyti + + + + Remove all bookmarks + Šalinti visas žymes + + + + &Contents + &Turinys + + + + &About + &Apie + + + + + &File + &Failas + + + + + &Edit + &Taisa + + + + + &View + &Rodinys + + + + &Outline + Sc&hema + + + + &Properties + Savy&bės + + + + &Search + &Paieška + + + + &Tool bars + Įrankių juos&tos + + + + &Docks + Sky&deliai + + + + &Tabs + Kor&telės + + + + &Bookmarks + Ž&ymės + + + + &Help + &Pagalba + + + + + Choose instance + Pasirinkti egzempliorių + + + + + Instance: + Egzempliorius: + + + + qpdfview::PageItem + + + Go to page %1. + Pereiti į %1 puslapį. + + + + Go to page %1 of file '%2'. + Pereiti į failo "%2", %1 puslapį. + + + + Open '%1'. + Atverti "%1". + + + + Edit form field '%1'. + Redaguoti formos lauką "%1". + + + + Copy &text + Kopijuoti &tekstą + + + + &Select text + Ž&ymėti tekstą + + + + Copy &image + Kopijuoti pave&ikslą + + + + Save image to &file... + Įrašyti paveikslą į &failą... + + + + Save image to file + Įrašyti paveikslą į failą + + + + Warning + Įspėjimas + + + + Could not save image to file '%1'. + Nepavyko įrašyti paveikslo į failą '%1'. + + + + Add &text + Pridėti &tekstą + + + + Add &highlight + Pridėti p&aryškinimą + + + + &Copy link address + &Kopijuoti nuorodos adresą + + + + &Select link address + &Pažymėti nuorodos adresą + + + + &Remove annotation + Ša&linti pastabą + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Vaizdo glodinimas: + + + + Text antialiasing: + Teksto glodinimas: + + + + + None + Nėra + + + + Full + Pilna + + + + Reduced + Sumažinta + + + + + Text hinting: + Teksto taškinė korekcija + + + + Ignore paper color: + Nepaisyti popieriaus spalvos: + + + + Overprint preview: + Užspausdinimo peržiūra: + + + + Solid + Vientisa + + + + Shaped + Suformuota + + + + Thin line mode: + Plonos linijos veiksena: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Vidinė pusė: + + + + qpdfview::PluginHandler + + + Image (%1) + Paveikslas (%1) + + + + Compressed (%1) + Suglaudintas (%1) + + + + Supported formats (%1) + Palaikomi formatai (%1) + + + + Could not decompress '%1'! + Nepavyko išglaudinti "%1"! + + + + Could not match file type of '%1'! + Nepavyko atitikti "%1" failo tipą! + + + + Critical + Kritinis + + + + Could not load plug-in for file type '%1'! + Nepavyko įkelti įskiepio, skirto failo tipui "%1"! + + + + qpdfview::PrintDialog + + + Fit to page: + Talpinti į puslapį: + + + + Page ranges: + Puslapių rėžiai: + + + + All pages + Visi puslapiai + + + + Even pages + Lyginiai puslapiai + + + + Odd pages + Nelyginiai puslapiai + + + + Page set: + Puslapių rinkinys: + + + + Single page + 1 puslapis + + + + Two pages + 2 puslapiai + + + + Four pages + 4 puslapiai + + + + Six pages + 6 puslapiai + + + + Nine pages + 9 puslapiai + + + + Sixteen pages + 16 puslapių + + + + Number-up: + Puslapių ant lapo: + + + + Bottom to top and left to right + Nuo apačios į viršų ir iš kairės į dešinę + + + + Bottom to top and right to left + Nuo apačios į viršų ir iš dešinės į kairę + + + + Left to right and bottom to top + Iš kairės į dešinę ir iš apačios į viršų + + + + Left to right and top to bottom + Iš kairės į dešinę ir iš viršaus į apačią + + + + Right to left and bottom to top + Iš dešinės į kairę ir iš apačios į viršų + + + + Right to left and top to bottom + Iš dešinės į kairę ir iš viršaus į apačią + + + + Top to bottom and left to right + Iš viršaus į apačią ir iš kairės į dešinę + + + + Top to bottom and right to left + Iš viršaus į apačią ir iš dešinės į kairę + + + + Number-up layout: + Puslapių ant lapo išdėstymas: + + + + Extended options + Išplėstinės parinktys + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Grafikos glodinimo bitai: + + + + Text antialias bits: + Teksto glodinimo bitai: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Paskiausiai užve&rtos + + + + &Clear list + &Išvalyti sąrašą + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Paskiausiai na&udoti + + + + &Clear list + &Išvalyti sąrašą + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> pasikartojimų + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> pasikartojimų puslapyje <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Ieškoti "%1"... + + + + qpdfview::SettingsDialog + + + General + Bendra + + + + &Behavior + &Elgsena + + + + &Graphics + &Grafika + + + + &Interface + &Sąsaja + + + + &Shortcuts + S&partieji klavišai + + + + &Modifiers + &Modifikavimo klavišai + + + + Defaults + Numatytieji + + + + Defaults on current tab + Numatytieji esamoje kortelėje + + + + Mouse wheel modifiers + Pelės ratuko modifikatoriai + + + + Mouse button modifiers + Pelės mygtuko modifikatorius + + + + Open URL: + Atverti URL: + + + + Auto-refresh: + Automatiškai įkelti iš naujo: + + + + + + + + + + + + Effective after restart. + Įsigalios po paleidimo iš naujo. + + + + Track recently used: + Sekti paskiausiai naudotus: + + + + Keep recently closed: + Laikyti paskiausiai užvertus: + + + + Restore tabs: + Atkurti korteles: + + + + Restore bookmarks: + Atkurti žymes: + + + + Restore per-file settings: + Atkurti pavie + + + + min + min. + + + + Save database interval: + Duomenų bazės įrašymo intervalas: + + + + Synchronize presentation: + Sinchronizuoti pateiktį + + + + Default + Numatytasis + + + + Presentation screen: + Pateikties ekranas + + + + Synchronize split views: + Sinchronizuoti perskirtus rodinius: + + + + Zoom factor: + Mastelio daugiklis: + + + + Parallel search execution: + Lygiagrečios paieškos vykdymas: + + + + ms + ms + + + + None + Nėra + + + + Highlight duration: + Paryškinimo trukmė: + + + + Highlight color: + Paryškinimo spalva: + + + + Annotation color: + Pastabų spalva: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + "%1" yra pakeičiama absoliučiu failo keliu. "%2" ir "%3" yra atitinkamai pakeičiami eilutės ir stulpelio numeriu. + + + + Source editor: + Šaltinio redaktorius: + + + + Use tiling: + Naudoti išklotinę: + + + + Keep obsolete pixmaps: + Išlaikyti pasenusius taškinius paveikslus: + + + + Use device pixel ratio: + Naudoti įrenginio pikselių santykį: + + + + Decorate pages: + Dekoruoti puslapius: + + + + Decorate links: + Dekoruoti nuorodas: + + + + Decorate form fields: + Dekoruoti formos laukus: + + + + Background color: + Fono spalva: + + + + Paper color: + Popieriaus spalva: + + + + Presentation background color: + Pateikties fono spalva: + + + + Pages per row: + Puslapių eilutėje: + + + + + + px + piks. + + + + Page spacing: + Tarpai tarp puslapių: + + + + Thumbnail spacing: + Tarpai tarp miniatiūrų: + + + + Thumbnail size: + Miniatiūrų dydis: + + + + Fit to viewport + Priderinti prie rodymo srities + + + + Document context menu: + Dokumento kontekstinis meniu: + + + + Tab context menu: + Kortelės kontekstinis meniu: + + + + Open in source editor: + Atverti šaltinio redaktoriuje: + + + + + %1 MB + %1 MB + + + + Cache size: + Podėlio dydis: + + + + Minimal scrolling: + Minimalus slinkimas: + + + + Prefetch: + Išankstinis įkėlimas: + + + + Prefetch distance: + Išankstinio įkėlimo nuotolis: + + + + Top + Viršuje + + + + Bottom + Apačioje + + + + Left + Kairėje + + + + Right + Dešinėje + + + + Tab position: + Kortelių vieta: + + + + As needed + Kai reikia + + + + Always + Visada + + + + Exit after last tab: + Išeiti po paskutinės kortelės: + + + + Scrollable menus: + Slankiojamieji meniu: + + + + Searchable menus: + Randami meniu: + + + + Zoom to selection: + Didinti iki pažymėtos srities: + + + + + Never + Niekada + + + + Settings + Nustatymai + + + + Tab visibility: + Kortelių matomumas: + + + + Spread tabs: + Išskleisti korteles: + + + + New tab next to current tab: + Nauja kortelė šalia esamos kortelės: + + + + Recently used count: + Paskiausiai naudotų skaičius: + + + + Recently closed count: + Paskiausiai užvertų skaičius: + + + + Extended search dock: + Išplėstinės paieškos skydelis: + + + + Toggle tool and menu bars with fullscreen: + Perjunginėti įrankių ir meniu juostas su visu ekranu: + + + + File tool bar: + Failo įrankių juosta: + + + + Edit tool bar: + Taisos įrankių juosta: + + + + View tool bar: + Rodinio įrankių juosta: + + + + Use page label: + Naudoti puslapio etiketę: + + + + Document title as tab title: + Dokumento antraštė kaip kortelės antraštė: + + + + Current page in window title: + Esamas puslapis lango antraštėje: + + + + Instance name in window title: + Egzemplioriaus pavadinimas lango antraštėje: + + + + Synchronize outline view: + Sinchronizuoti schemos rodinį: + + + + Highlight current thumbnail: + Paryškinti esamą miniatiūrą: + + + + Limit thumbnails to results: + Apriboti miniatiūras iki rezultatų: + + + + Annotation overlay: + Pastabų perdanga: + + + + Form field overlay: + Formos laukų perdanga: + + + + Zoom: + Mastelis: + + + + Rotate: + Pasukti: + + + + Scroll: + Slinkti: + + + + Copy to clipboard: + Kopijuoti į iškarpinę + + + + Add annotation: + Pridėti pastabą: + + + + qpdfview::ShortcutHandler + + + Action + Veiksmas + + + + Key sequence + Klavišų seka + + + + Skip backward + Peršokti atgal + + + + Skip forward + Peršokti pirmyn + + + + Move up + Judėti aukštyn + + + + Move down + Judėti žemyn + + + + Move left + Judėti kairėn + + + + Move right + Judėti dešinėn + + + + qpdfview::TreeView + + + &Expand all + Išskl&eisti visus + + + + &Collapse all + &Suskleisti visus + + + diff --git a/translations/qpdfview_lv.ts b/translations/qpdfview_lv.ts new file mode 100644 index 0000000..7132c0f --- /dev/null +++ b/translations/qpdfview_lv.ts @@ -0,0 +1,1994 @@ + + + + Latvian <lv@li.org> + Jānis Marks Gailis <jm-gailis@fai-vianet.fr> + 2013-03-12 15:14+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Latvian translation for qpdfview +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Atvērt + + + + Open in new &tab + Atvert Jauna &Cilne + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + Informācija + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Druka '%1'... + + + + Unlock %1 + Atbloket %1 + + + + Password: + Parole: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Uzmanību + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + Atvērt + + + + Open in new tab + Atvērt jaunā cilnē + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + Saglabāt kā + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_ms.ts b/translations/qpdfview_ms.ts new file mode 100644 index 0000000..9756691 --- /dev/null +++ b/translations/qpdfview_ms.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Imej (%1) + + + + Size + Saiz + + + + Resolution + Resolusi + + + + Depth + Kedalaman + + + + + + + + + Format + Format + + + + Monochrome + Monokrom + + + + Indexed + Berindeks + + + + 32 bits RGB + RGB 32 bit + + + + 32 bits ARGB + ARGB 32 bit + + + + 16 bits RGB + RGB 16 bit + + + + 24 bits RGB + RGB 24 bit + + + + Model::PdfDocument + + + Linearized + Dilinearkan + + + + Name + Nama + + + + Type + Jenis + + + + Embedded + Terbenam + + + + Subset + Subset + + + + File + Fail + + + + + + + Yes + Ya + + + + PDF version + Versi PDF + + + + Encrypted + Disulitkan + + + + + + + No + Tidak + + + + Model::PdfPage + + + Information + Maklumat + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Versi pustaka Poppler 0.201 atau lebih tinggi diperlukan untuk tambah atau buang catatan. + + + + Model::PsDocument + + + Title + Tajuk + + + + Created for + Dicipta untuk + + + + Creator + Pencipta + + + + Creation date + Tarikh Ciptaan + + + + Format + Format + + + + Language level + Aras bahasa + + + + QObject + + + An empty instance name is not allowed. + Nama kejadian kosong tidak dibenarkan. + + + + An empty search text is not allowed. + Teks gelintar kosong tidak dibenarkan. + + + + Unknown command-line option '%1'. + Pilihan baris-perintah '%1' tidak diketahui. + + + + Using '--instance' requires an instance name. + Penggunaan '--instance' memerlukan nama kejadian. + + + + Using '--instance' is not allowed without using '--unique'. + Penggunaan '--instance' tidak dibenarkan tanpa menggunakan '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Satu nama kejadian mesti mengandungi aksara "[A-Z][a-z][0-9]_" dan mesti tidak bermula dengan digit. + + + + Using '--search' requires a search text. + Menggunakan '--search' memerlukan teks gelintar. + + + + Could not prepare signal handler. + Tidak dapat sediakan pengendali isyarat. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift dan Ctrl + + + + Shift and Alt + Shift dan Alt + + + + Ctrl and Alt + Ctrl dan Alt + + + + Right mouse button + Butang tetikus kanan + + + + Middle mouse button + Butang tetikus tengah + + + + None + Tiada + + + + qpdfview::BookmarkDialog + + + Bookmark + Tanda Buku + + + + Page: + Halaman: + + + + Label: + Label: + + + + Comment: + Ulasan: + + + + Modified: + Diubahsuai: + + + + qpdfview::BookmarkMenu + + + &Open + &Buka + + + + Open in new &tab + Buka dalam &tab baru + + + + &Remove bookmark + &Buang tanda buku + + + + qpdfview::Database + + + Jump to page %1 + Lompat ke halaman %1 + + + + qpdfview::DocumentView + + + + Information + Maklumat + + + + The source editor has not been set. + Penyunting sumber belum ditetapkan. + + + + Opening URL is disabled in the settings. + Membuka URL dilumpuhkan dalam tetapan. + + + + Warning + Amaran + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Mencetak '%1'... + + + + Unlock %1 + Buka %1 + + + + Password: + Kata Laluan: + + + + Page %1 + Halaman %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Simpan... + + + + Save and open... + Simpan dan buka... + + + + Save file attachment + Simpan lampiran fail + + + + + Warning + Amaran + + + + Could not open file attachment saved to '%1'. + Tidak dapat buka lampiran fail yang tersimpan di dalam '%1'. + + + + Could not save file attachment to '%1'. + Tidak dapat simpan lampiran ke '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Fon + + + + qpdfview::HelpDialog + + + Help + Bantuan + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Cari terdahulu + + + + Find next + Cari berikutnya + + + + qpdfview::MainWindow + + + Toggle tool bars + Togol palang alat + + + + Toggle menu bar + Togol palang menu + + + + + + + + + + + + + + Warning + Amaran + + + + + Could not open '%1'. + Tidak dapat buka '%1'. + + + + Copy file path + Salin laluan fail + + + + Select file path + Pilih laluan fail + + + + Close all tabs + Tutup semua tab + + + + Close all tabs but this one + Tutup semua tab tetapi kecualikan ini + + + + Close all tabs to the left + Tutup semua ke disebelah kiri + + + + Close all tabs to the right + Tutup semua tab disebelah kanan + + + + + Open + Buka + + + + Open in new tab + Buka dalam tab baru + + + + + + Could not refresh '%1'. + Tidak dapat segar semula '%1'. + + + + Save copy + Simpan salinan + + + + Could not save copy at '%1'. + Tidak dapat simpan salinan pada '%1'. + + + + Save as + Simpan sebagai + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Tidak dapat simpan sebagai '%1'. + + + + Could not print '%1'. + Tidak dapat cetak '%1'. + + + + Set first page + Tetapkan halaman pertama + + + + Select the first page of the body matter: + Pilih halaman pertama badan: + + + + Jump to page + Lompat ke halaman + + + + Page: + Halaman: + + + + Jump to page %1 + Lompat ke halaman %1 + + + + About qpdfview + Perihal qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview merupakan pelihat dokumen bertab yang menggunakan Qt.</p><p>Versi ini menyertakan:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Sokongan PDF menggunakan Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Sokongan PS menggunakan libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Sokongan DjVu menggunakan DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Sokongan PDF menggunakan Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Sokongan Percetakan menggunakan CUPS %1</li> + + + + &Edit bookmark + &Sunting tanda buku + + + + The document '%1' has been modified. Do you want to save your changes? + Dokumen '%1' telah diubahsuai. Anda hendak simpan perubahan yang anda buat? + + + + Page width + Lebar halaman + + + + Page size + Saiz halaman + + + + Match &case + Padan &kata + + + + Whole &words + Keseluruhan pe&rkataan + + + + Highlight &all + Sorot semu&a + + + + &Open... + B&uka... + + + + Open in new &tab... + Buka dalam &tab baru... + + + + Open &copy in new tab + Buka sa&linan dalam tab baharu + + + + Move to &instance... + + + + + &Refresh + Sega&r semula + + + + Information + Maklumat + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Simp&an sebagai... + + + + Save &copy... + + + + + &Print... + &Cetak... + + + + E&xit + &Keluar + + + + &Previous page + Halaman te&rdahulu + + + + &Next page + Halaman &berikut + + + + &First page + Halaman per&tama + + + + &Last page + Halaman t&erakhir + + + + &Set first page... + &Tetapkan halaman pertama... + + + + &Jump to page... + L&ompat ke halaman... + + + + Jump &backward + Lompat men&gundur + + + + Jump for&ward + Lompat ma&ju + + + + &Search... + &Gelintar... + + + + Find previous + Cari terdahulu + + + + Find next + Cari berikutnya + + + + Cancel search + Batal gelintar + + + + &Copy to clipboard + Sa&lin ke papan keratan + + + + &Add annotation + T&ambah anotasi + + + + Settings... + Tetapan... + + + + &Continuous + &Bersambung + + + + &Two pages + &Dua halaman + + + + Two pages &with cover page + Dua halaman de&ngan muka hadapan + + + + &Multiple pages + Halaman be&rbilang + + + + Right to left + Kanan ke kiri + + + + Zoom &in + Zum mas&uk + + + + Zoom &out + Zum ke&luar + + + + Original &size + &Saiz asal + + + + Fit to page width + Suai muat mengikut lebar halaman + + + + Fit to page size + Muat mengikut saiz halaman + + + + Rotate &left + Putar k&iri + + + + Rotate &right + Putar ka&nan + + + + Invert colors + Songsangkan warna + + + + Convert to grayscale + Tukar ke skala kelabu + + + + Trim margins + Kerat margin + + + + Darken with paper color + Gelapkan dengan warna kertas + + + + Lighten with paper color + Cerahkan dengan warna kertas + + + + Fonts... + Fon... + + + + &Fullscreen + Skrin &Penuh + + + + &Presentation... + &Persembahan... + + + + &Previous tab + Tab ter&dahulu + + + + &Next tab + Tab b&erikutnya + + + + &Close tab + T&utup tab + + + + Close &all tabs + Tutup semu&a tab + + + + Close all tabs &but current tab + Tutup semua tab ke&cuali tab semasa + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Tanda buku te&rdahulu + + + + &Next bookmark + Tanda buku ber&ikutnya + + + + &Add bookmark + T&ambah tanda buku + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Lakaran &Kenit + + + + Book&marks + &Tanda Buku + + + + Composition + Komposisi + + + + + &Remove bookmark + &Buang tanda buku + + + + Edit '%1' at %2,%3... + Sunting '%1' pada %2,%3... + + + + Open containing &folder + Buka &folder yang dikandungi + + + + &Save + + + + + Remove all bookmarks + Buang semua tanda buku + + + + &Contents + &Kandungan + + + + &About + Perih&al + + + + + &File + &Fail + + + + + &Edit + &Sunting + + + + + &View + &Lihat + + + + &Outline + Garis&luar + + + + &Properties + Si&fat + + + + &Search + &Gelintar + + + + &Tool bars + Palang ala&t + + + + &Docks + La&buh + + + + &Tabs + &Tab + + + + &Bookmarks + Tanda &Buku + + + + &Help + Ban&tuan + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Pergi ke halaman %1. + + + + Go to page %1 of file '%2'. + Pergi ke halaman %1 dari fail '%2'. + + + + Open '%1'. + Buka '%1'. + + + + Edit form field '%1'. + Sunting medan borang '%1'. + + + + Copy &text + Salin &teks + + + + &Select text + &Pilih teks + + + + Copy &image + Salin &imej + + + + Save image to &file... + Simpan imej ke &fail... + + + + Save image to file + Simpan imej ke fail + + + + Warning + Amaran + + + + Could not save image to file '%1'. + Tidak dapat simpan imej ke fail '%1'. + + + + Add &text + Tambah &teks + + + + Add &highlight + Tambah s&orot + + + + &Copy link address + Sa&lin alamat pautan + + + + &Select link address + &Pilih alamat pautan + + + + &Remove annotation + &Buang anotasi + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Anti alias: + + + + Text antialiasing: + Anti alias teks: + + + + + None + Tiada + + + + Full + Penuh + + + + Reduced + Terkurang + + + + + Text hinting: + Pembayang teks: + + + + Ignore paper color: + Abai warna kertas: + + + + Overprint preview: + Pratonton lampau cetak: + + + + Solid + Tegar + + + + Shaped + Terbentuk + + + + Thin line mode: + Mod garis nipis: + + + + Splash + Percikan + + + + Arthur + Arthur + + + + Backend: + Bahagian Belakang: + + + + qpdfview::PluginHandler + + + Image (%1) + Imej (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Format disokong (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Tidak dapat padankan jenis fail '%1'! + + + + Critical + Kritikal + + + + Could not load plug-in for file type '%1'! + Tidak dapat muat pemalam untuk jenis fail '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Suai muat ke halaman: + + + + Page ranges: + Julat halaman: + + + + All pages + Semua halaman + + + + Even pages + Halaman genap + + + + Odd pages + Halaman ganjil + + + + Page set: + Set halaman: + + + + Single page + Halaman tunggal + + + + Two pages + Dua halaman + + + + Four pages + Empat halaman + + + + Six pages + Enam halaman + + + + Nine pages + Sembilan halaman + + + + Sixteen pages + Enam belas halaman + + + + Number-up: + Nombor-menaik: + + + + Bottom to top and left to right + Bawah ke atas dan kiri ke kanan + + + + Bottom to top and right to left + Bawah ke atas dan kanan ke kiri + + + + Left to right and bottom to top + Kiri ke kanan dan bawah ke atas + + + + Left to right and top to bottom + Kiri ke kanan dan atas ke bawah + + + + Right to left and bottom to top + Kanan ke kiri dan bawah ke atas + + + + Right to left and top to bottom + Kanan ke kiri dan atas ke bawah + + + + Top to bottom and left to right + Atas ke bawah dan kiri ke kanan + + + + Top to bottom and right to left + Atas ke bawah dan kanan ke kiri + + + + Number-up layout: + Bentangan nombor-keatas: + + + + Extended options + Pilihan sambungan + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bit antialias grafik + + + + Text antialias bits: + Bit antialias teks: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Ditutup baru-baru ini + + + + &Clear list + K&osongkan senarai + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Digunakan baru-baru &ini + + + + &Clear list + K&osongkan senarai + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> kemunculan + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> kemunculan pada halaman <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Gelintar '%1'... + + + + qpdfview::SettingsDialog + + + General + Am + + + + &Behavior + &Kelakuan + + + + &Graphics + &Grafik + + + + &Interface + Anta&ramuka + + + + &Shortcuts + &Pintasan + + + + &Modifiers + Peng&ubahsuai + + + + Defaults + Lalai + + + + Defaults on current tab + Lalai pada tab semasa + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + URL buka: + + + + Auto-refresh: + Segar-semula-automatik: + + + + + + + + + + + + Effective after restart. + Berkesan selepas mula semula. + + + + Track recently used: + Jejak yang digunakan baru-baru ini: + + + + Keep recently closed: + Kekalkan ditutup baru-baru ini: + + + + Restore tabs: + Pulih tab: + + + + Restore bookmarks: + Piulih tanda buku: + + + + Restore per-file settings: + Pulih tetapan per-fail: + + + + min + min + + + + Save database interval: + Simpan sela pangkalan data: + + + + Synchronize presentation: + Segerakkan persembahan: + + + + Default + Lalai + + + + Presentation screen: + Skrin persembahan: + + + + Synchronize split views: + + + + + Zoom factor: + Faktor zum: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Tiada + + + + Highlight duration: + Sorot jangkamasa: + + + + Highlight color: + Warna sorot: + + + + Annotation color: + Warna catatan: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' diganti dengan laluan fail mutlak. '%2' resp. '%3' diganti dengan nombot lajur resp. baris. + + + + Source editor: + Penyunting sumber: + + + + Use tiling: + Guna penjubinan: + + + + Keep obsolete pixmaps: + Kekalkan peta pix lapuk: + + + + Use device pixel ratio: + Guna nisbah piksel peranti: + + + + Decorate pages: + Hias halaman: + + + + Decorate links: + Hias pautan: + + + + Decorate form fields: + Hias medan borang: + + + + Background color: + Warna latar belakang: + + + + Paper color: + Warna kertas: + + + + Presentation background color: + Warna latar belakang persembahan: + + + + Pages per row: + Halaman per baris: + + + + + + px + px + + + + Page spacing: + Jarak halaman: + + + + Thumbnail spacing: + Jarak thumbnail: + + + + Thumbnail size: + Saiz thumbnail: + + + + Fit to viewport + Suai muat ke port pandang + + + + Document context menu: + Menu konteks dokumen: + + + + Tab context menu: + Menu konteks tab: + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Saiz cache: + + + + Minimal scrolling: + Penatalan minimum: + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Jarak prefetch: + + + + Top + Atas + + + + Bottom + Bawah + + + + Left + Kiri + + + + Right + Kanan + + + + Tab position: + Kedudukan tab: + + + + As needed + Seperti diperlukan + + + + Always + Sentiasa + + + + Exit after last tab: + Keluar selepas tab terakhir: + + + + Scrollable menus: + Menu boleh tatal: + + + + Searchable menus: + Menu boleh gelintar: + + + + Zoom to selection: + Zum ke pemilihan: + + + + + Never + Jangan sesekali + + + + Settings + Tetapan + + + + Tab visibility: + Ketampakan tab: + + + + Spread tabs: + Hampar tab: + + + + New tab next to current tab: + Tab baru bersebelahan tab semasa: + + + + Recently used count: + Kiraan yang terkini digunakan: + + + + Recently closed count: + Kiraan ditutup baru-baru ini: + + + + Extended search dock: + Labuh gelintar tambahan: + + + + Toggle tool and menu bars with fullscreen: + Togol palang alat dan menu dengan skrin penuh: + + + + File tool bar: + Palang alat fail: + + + + Edit tool bar: + Palang alat sunting: + + + + View tool bar: + Palang alat lihat: + + + + Use page label: + Guna label halaman: + + + + Document title as tab title: + Tajuk dokumen sebagai tajuk tab: + + + + Current page in window title: + Halaman semasa dalam tajuk tetingkap: + + + + Instance name in window title: + Nama kejadian dalam tajuk tetingkap: + + + + Synchronize outline view: + Segerak paparan garis luar: + + + + Highlight current thumbnail: + Sorot lakaran kenit semasa: + + + + Limit thumbnails to results: + Had thumbnail terhadap keputusan: + + + + Annotation overlay: + Tindihan catatan: + + + + Form field overlay: + Tindihan medan borang: + + + + Zoom: + Zum: + + + + Rotate: + Putar: + + + + Scroll: + Tatal: + + + + Copy to clipboard: + Salin ke papan keratan: + + + + Add annotation: + Tambah anotasi: + + + + qpdfview::ShortcutHandler + + + Action + Tindakan + + + + Key sequence + Jujukan kekunci + + + + Skip backward + Langkau mengundur + + + + Skip forward + Langkau maju + + + + Move up + Alih ke atas + + + + Move down + Alih ke bawah + + + + Move left + Alih ke kiri + + + + Move right + Alih ke kanan + + + + qpdfview::TreeView + + + &Expand all + K&embang semua + + + + &Collapse all + K&uncup semua + + + diff --git a/translations/qpdfview_my.ts b/translations/qpdfview_my.ts new file mode 100644 index 0000000..c277858 --- /dev/null +++ b/translations/qpdfview_my.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + အချက်အလက် + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + ဘာမျှမဟုတ် + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + စာမျက်နှာ- + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Oဖွင့်မည်။ + + + + Open in new &tab + &t အသစ်တွင်ဖွင့်မည် + + + + &Remove bookmark + &Rမှတ်တမ်းဖြုတ်မည် + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + အချက်အလက် + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Opening URL is disabled in the settings. + + + + Warning + သတိပေးချက် + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + '%1' ကိုစာရွက်ထုတ်နေပါသည် + + + + Unlock %1 + Unlock %1 + + + + Password: + စကားဝှက် − + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + သတိပေးချက် + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + ရှေ့တွင်ရှာမည် + + + + Find next + နောက်တွင်ရှာမည် + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + သတိပေးချက် + + + + + Could not open '%1'. + '%1' ကိုမဖွင့်နိုင်ပါ + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + ဖွင့် + + + + Open in new tab + Tab တစ်ခုတွင်ဖွင့်မည် + + + + + + Could not refresh '%1'. + + + + + Save copy + မိတ္ထူကိုသိမ်းမည် + + + + Could not save copy at '%1'. + '%1' မှာ မိတ္ထူကိုမသိမ်းနိုင်ပါ + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + '%1' ပရင့်မထုတ်နိုင်ပါ + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + စာမျက်နှာသို့သွားမည် + + + + Page: + စာမျက်နှာ- + + + + Jump to page %1 + + + + + About qpdfview + qpdfview အကြောင်း + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + စာမျက်နှာအနံ + + + + Page size + စာမျက်နှာအရွယ်အစား + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + &Oဖွင့် + + + + Open in new &tab... + &t Tab အသစ်တွင်ဖွင့်မည် + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Refresh + + + + Information + အချက်အလက် + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + &P စာရွက်ထုတ်မည် + + + + E&xit + + + + + &Previous page + &P ယခင်စာမျက်နှာ + + + + &Next page + &N နောက်စာမျက်နှာ + + + + &First page + &F ပထမစာမျက်နှာ + + + + &Last page + &L နောက်ဆုံးစာမျက်နှာ + + + + &Set first page... + + + + + &Jump to page... + &J တခြားစာမျက်နှာသို့သွားမည် + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + &S ရှာမည် + + + + Find previous + ရှေ့တွင်ရှာမည် + + + + Find next + နောက်တွင်ရှာမည် + + + + Cancel search + ရှာဖွေခြင်းကိုရပ်မည် + + + + &Copy to clipboard + + + + + &Add annotation + &A မှတ်သားစာထည့်မည် + + + + Settings... + + + + + &Continuous + &C ဆက်လုပ်မည် + + + + &Two pages + & နှစ်မျက်နှာ + + + + Two pages &with cover page + &w အဖုံးစာမျက်နှာနှင့်နှစ်မျက်နှာ + + + + &Multiple pages + &M စာရွက်အမြောက်အများ + + + + Right to left + + + + + Zoom &in + &i ချုံ့မည် + + + + Zoom &out + &o ချဲ့မည် + + + + Original &size + &s မူလအရွယ်အစား + + + + Fit to page width + စာမျက်နှာအနံနှင့်ဆန့်အောင်ထားမည် + + + + Fit to page size + စာမျက်နှာအရွယ်အစားနှင့်ဆန့်အောင်ထားမည် + + + + Rotate &left + &l ဘယ်ဖက်သို့လှည့်မည် + + + + Rotate &right + &r ညာဖက်သို့လှည့်မည် + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + စာလုံးပုံစံ + + + + &Fullscreen + &F စကရင်အပြည့် + + + + &Presentation... + + + + + &Previous tab + &P ယခင် tab + + + + &Next tab + &N နောက် tab + + + + &Close tab + &C tab ကိုပိတ်မည် + + + + Close &all tabs + &a tab များအားလုံးကိုပိတ်မည် + + + + Close all tabs &but current tab + &b ယခု tab မှလွဲပြီး tab များအားလုံးကိုပိတ်မည် + + + + Restore &most recently closed tab + + + + + &Previous bookmark + &P ရှေ့ကမှတ်တမ်း + + + + &Next bookmark + &N နောက်မှတ်တမ်း + + + + &Add bookmark + &A မှတ်တမ်းထည့်မည် + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Rမှတ်တမ်းဖြုတ်မည် + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + မှတ်တမ်းများအားလုံးကိုဖျက်မည် + + + + &Contents + &C မာတိကာ + + + + &About + &A အကြောင်း + + + + + &File + &Fဖိုင် + + + + + &Edit + &Eပြင်ဆင်ရန် + + + + + &View + &V မြင်ကွင်း + + + + &Outline + + + + + &Properties + + + + + &Search + &Sရှာဖွေရေး + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + &Tabs + + + + &Bookmarks + &B မှတ်တမ်းများ + + + + &Help + &H အကူအညီ + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + %1 စာမျက်နှာသို့သွားမည် + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + &t စာများကိုကူးမည် + + + + &Select text + + + + + Copy &image + &i ပုံများကိုကူးမည် + + + + Save image to &file... + &f ပုံများကိုဖိုင်ထဲသို့သိမ်းမည် + + + + Save image to file + ပုံများကို ဖိုင်ထဲသိမ်းမည် + + + + Warning + သတိပေးချက် + + + + Could not save image to file '%1'. + '%1' ဖိုင်ထဲသို့ပုံ မသိမ်းနိုင်ပါ + + + + Add &text + &t စာများထည့်မည် + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + &R မှတ်သားစာဖြုတ်မည် + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + ဘာမျှမဟုတ် + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + &Clear list + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + &u မကြာသေးခင်ကသုံးသွားသော + + + + &Clear list + &Clear list + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + &Graphics + + + + &Interface + &I အသွင်အပြင် + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + နဂိုမူလအတိုင်း + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + URL ကိုဖွင့်မည် - + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + စက်ကိုပိတ်ပြီးပြန်ဖွင့်မှထိရောက်မည် + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + tab များကို ပြန်ထားမည် - + + + + Restore bookmarks: + မှတ်တမ်းများကိုပြန်ထားမည် - + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + မူလပုံစံ + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + ဘာမျှမဟုတ် + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + အလှချယ်ထားသောစာမျက်နှာများ- + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + တစ်တိုင်တွင်စာမျက်နှာများ + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + Thumbnail အရွယ်အစား- + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Cache အရွယ်အစား- + + + + Minimal scrolling: + + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + + + + + Top + ထိပ် + + + + Bottom + အောက်ခြေ + + + + Left + ဘယ်ဖက် + + + + Right + ညာဖက် + + + + Tab position: + Tab တည်နေရာ- + + + + As needed + လိုအပ်သလို + + + + Always + အမြဲတမ်း + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + ဘယ်တော့မှ + + + + Settings + + + + + Tab visibility: + Tab မြင်သာမှု့- + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + ဖိုင် tool bar: + + + + Edit tool bar: + Edit tool bar: + + + + View tool bar: + မြင်ကွင်း tool bar: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + &E အားလုံးကိုဖြန့်မည် + + + + &Collapse all + &C အားလုံးကိုချုံ့မည် + + + diff --git a/translations/qpdfview_nb.ts b/translations/qpdfview_nb.ts new file mode 100644 index 0000000..0672259 --- /dev/null +++ b/translations/qpdfview_nb.ts @@ -0,0 +1,1994 @@ + + + + Norwegian Bokmal <nb@li.org> + Erlend Østlie <erlendandreas12368@gmail.com> + 2018-05-05 22:43+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Norwegian Bokmal translation for qpdfview +# Copyright (c) 2018 Rosetta Contributors and Canonical Ltd 2018 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2018. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + Bilde (%1) + + + + Size + størrelse + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_nds.ts b/translations/qpdfview_nds.ts new file mode 100644 index 0000000..a3367b6 --- /dev/null +++ b/translations/qpdfview_nds.ts @@ -0,0 +1,1994 @@ + + + + Low German <nds@li.org> + A. Kohl <Unknown> + 2012-12-03 22:06+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Low German translation for qpdfview +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Opmaken + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + Passwoort: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_oc.ts b/translations/qpdfview_oc.ts new file mode 100644 index 0000000..f7fb59a --- /dev/null +++ b/translations/qpdfview_oc.ts @@ -0,0 +1,2001 @@ + + + + Occitan (post 1500) <oc@li.org> + Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr> + 2016-12-03 17:28+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Occitan (post 1500) translation for qpdfview +# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2016. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + Imatge (%1) + + + + Size + Talha + + + + Resolution + Resolucion + + + + Depth + Prigondor + + + + + + + + + Format + Format + + + + Monochrome + Monocròme + + + + Indexed + Indexat + + + + 32 bits RGB + RVB 32 bits + + + + 32 bits ARGB + RVBA 32 bits + + + + 16 bits RGB + RVB 16 bits + + + + 24 bits RGB + RVB 24 bits + + + + Model::PdfDocument + + + Linearized + Linearizat + + + + Name + Nom + + + + Type + Tipe + + + + Embedded + Integrat + + + + Subset + Jòc parcial + + + + File + Fichièr + + + + + + + Yes + Òc + + + + PDF version + Version PDF + + + + Encrypted + Chifrat + + + + + + + No + Non + + + + Model::PdfPage + + + Information + Informacion + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + Títol + + + + Created for + Creat per + + + + Creator + Creator + + + + Creation date + Data de creacion + + + + Format + Format + + + + Language level + Nivèl de lenga + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Maj + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Maj e Ctrl + + + + Shift and Alt + Maj e Alt + + + + Ctrl and Alt + Ctrl e Alt + + + + Right mouse button + Boton de dreita + + + + Middle mouse button + Boton de mirga del mitan + + + + None + Pas cap + + + + qpdfview::BookmarkDialog + + + Bookmark + Marcapagina + + + + Page: + Pagina : + + + + Label: + Labèl : + + + + Comment: + Comentari : + + + + Modified: + Modificat lo : + + + + qpdfview::BookmarkMenu + + + &Open + Do&brir + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + Anar a la pagina %1 + + + + qpdfview::DocumentView + + + + Information + Informacion + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + Avertiment + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Impression de « %1 »… + + + + Unlock %1 + Desverrolhar %1 + + + + Password: + Senhal : + + + + Page %1 + Pagina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Enregistrar... + + + + Save and open... + Enregistrar e dobrir… + + + + Save file attachment + Enregistrar la pèça junta + + + + + Warning + Avertiment + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + Poliças + + + + qpdfview::HelpDialog + + + Help + Ajuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + help.html + + + + Find previous + Recercar lo precedent + + + + Find next + Recercar lo seguent + + + + qpdfview::MainWindow + + + Toggle tool bars + Afichatge de la barra d'aisinas + + + + Toggle menu bar + Afichatge de la barra de menú + + + + + + + + + + + + + + Warning + Avertiment + + + + + Could not open '%1'. + Impossible de dobrir « %1 ». + + + + Copy file path + Copiar lo camin d'accès del fichièr + + + + Select file path + + + + + Close all tabs + Tampar totes los onglets + + + + Close all tabs but this one + Tampar totes los onglets levat aqueste + + + + Close all tabs to the left + Tampar totes los onglets a esquèrra + + + + Close all tabs to the right + Tampar totes los onglets a dreita + + + + + Open + Dobrir + + + + Open in new tab + Dobrir dins un onglet novèl + + + + + + Could not refresh '%1'. + Impossible d'actualizar « %1 ». + + + + Save copy + Enregistrar una còpia + + + + Could not save copy at '%1'. + Impossible d'enregistrar la còpia cap a « %1 ». + + + + Save as + Enregistrar jos + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Impossible d'enregistrar en tant que « %1 ». + + + + Could not print '%1'. + Impossible d'imprimir « %1 ». + + + + Set first page + Definir la primièra pagina + + + + Select the first page of the body matter: + + + + + Jump to page + Anar a la pagina + + + + Page: + Pagina : + + + + Jump to page %1 + Anar a la pagina %1 + + + + About qpdfview + A prepaus de qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + &Editar lo signet + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + Largor de pagina + + + + Page size + Talha de las paginas + + + + Match &case + Sensible a la &cassa + + + + Whole &words + &Mots entièrs + + + + Highlight &all + + + + + &Open... + &Dobrir... + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Actualizar + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Enregistrar &jos… + + + + Save &copy... + + + + + &Print... + &Imprimir... + + + + E&xit + &Quitar + + + + &Previous page + Pagina &precedenta + + + + &Next page + Pagina seg&uenta + + + + &First page + &Primièra pagina + + + + &Last page + &Darrièra pagina + + + + &Set first page... + &Definir la primièra pagina… + + + + &Jump to page... + &Anar a la pagina… + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + Rec&ercar... + + + + Find previous + Recercar lo precedent + + + + Find next + Recercar lo seguent + + + + Cancel search + Anullar la recèrca + + + + &Copy to clipboard + &Copiar cap al quichapapièrs + + + + &Add annotation + &Apondre una anotacion + + + + Settings... + Paramètres... + + + + &Continuous + &Continú + + + + &Two pages + &Doas paginas + + + + Two pages &with cover page + + + + + &Multiple pages + &Paginas multiplas + + + + Right to left + De dreita a esquèrra + + + + Zoom &in + Zoom &avant + + + + Zoom &out + Zoom &arrièr + + + + Original &size + Talha &originala + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + Inversar las colors + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Poliças… + + + + &Fullscreen + &Ecran complet + + + + &Presentation... + &Presentacion… + + + + &Previous tab + Onglet &precedent + + + + &Next tab + Onglet &seguent + + + + &Close tab + &Tampar l'onglet + + + + Close &all tabs + Tampar &totes los onglets + + + + Close all tabs &but current tab + Tampar totes los onglets &levat l'onglet actual + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Signet &precedent + + + + &Next bookmark + Signet &seguent + + + + &Add bookmark + &Apondre un signet + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + &Miniaturas + + + + Book&marks + Si&gnets + + + + Composition + Composicion + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + Editar « %1 » a %2, %3… + + + + Open containing &folder + + + + + &Save + &Enregistrar + + + + Remove all bookmarks + + + + + &Contents + En&senhador + + + + &About + &A prepaus de + + + + + &File + &Fichièr + + + + + &Edit + &Editar + + + + + &View + &Afichar + + + + &Outline + + + + + &Properties + &Proprietats + + + + &Search + &Recercar + + + + &Tool bars + &Barras d'aisinas + + + + &Docks + &Encarts + + + + &Tabs + &Tabulacions + + + + &Bookmarks + &Marcapaginas + + + + &Help + &Ajuda + + + + + Choose instance + Causir una instància + + + + + Instance: + Instància : + + + + qpdfview::PageItem + + + Go to page %1. + Anar a la pagina %1. + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + Dobrir « %1 ». + + + + Edit form field '%1'. + + + + + Copy &text + Copiar lo &tèxte + + + + &Select text + &Seleccionar lo tèxte + + + + Copy &image + Copiar &l'imatge + + + + Save image to &file... + Enregistrar l'imatge dins lo &fichièr… + + + + Save image to file + Enregistrar l'imatge dins un fichièr + + + + Warning + Avertiment + + + + Could not save image to file '%1'. + Impossible d'enregistrar l'imatge dins lo fichièr « %1 ». + + + + Add &text + Apondre de &tèxte + + + + Add &highlight + Metre en &susbrilhança + + + + &Copy link address + &Copiar l'adreça del ligam + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Anticrenelatge : + + + + Text antialiasing: + + + + + + None + Pas cap + + + + Full + Plen + + + + Reduced + Reduit + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + Plen + + + + Shaped + Desformat + + + + Thin line mode: + + + + + Splash + + + + + Arthur + Arthur + + + + Backend: + Rèireplan : + + + + qpdfview::PluginHandler + + + Image (%1) + Imatge (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Formats suportats (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + Critic + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + Ajustar a la pagina : + + + + Page ranges: + Mantuna pagina : + + + + All pages + Totas las paginas + + + + Even pages + Paginas paras + + + + Odd pages + Paginas imparas + + + + Page set: + Configuracion de paginas : + + + + Single page + Pagina unica + + + + Two pages + Doas paginas + + + + Four pages + Quatre paginas + + + + Six pages + Sièis paginas + + + + Nine pages + Nòu paginas + + + + Sixteen pages + Setze paginas + + + + Number-up: + Paginas per fuèlh : + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + Òrdre de las paginas : + + + + Extended options + Opcions avançadas + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Tampat &recentament + + + + &Clear list + &Voidar la lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Dobèrt &recentament + + + + &Clear list + &Voidar la lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> ocurréncias + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Recèrca de « %1 »… + + + + qpdfview::SettingsDialog + + + General + General + + + + &Behavior + &Compòrtament + + + + &Graphics + &Afichatge + + + + &Interface + &Interfàcia + + + + &Shortcuts + &Acorchis + + + + &Modifiers + &Modificadors + + + + Defaults + Per defaut + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Dobrir una URL : + + + + Auto-refresh: + Actualizacion automatica : + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + Restablir los onglets : + + + + Restore bookmarks: + Restablir los signets : + + + + Restore per-file settings: + + + + + min + min + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + Per defaut + + + + Presentation screen: + Ecran de presentacion : + + + + Synchronize split views: + + + + + Zoom factor: + Nivèl de zoom : + + + + Parallel search execution: + + + + + ms + ms + + + + None + Pas cap + + + + Highlight duration: + + + + + Highlight color: + Color d'enfasi : + + + + Annotation color: + Color d'anotacion : + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + Editor de font : + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + Decorar las paginas : + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + Color de rèireplan : + + + + Paper color: + Color del papièr : + + + + Presentation background color: + + + + + Pages per row: + Paginas per linha : + + + + + + px + px + + + + Page spacing: + Espaçament de las paginas : + + + + Thumbnail spacing: + Espaçament de las miniaturas : + + + + Thumbnail size: + Talha de las miniaturas : + + + + Fit to viewport + + + + + Document context menu: + Menú contextual del document : + + + + Tab context menu: + Menú contextual de l'onglet : + + + + Open in source editor: + + + + + + %1 MB + %1 Mio + + + + Cache size: + Talha del cache : + + + + Minimal scrolling: + Desfilament minimum : + + + + Prefetch: + Precargament : + + + + Prefetch distance: + + + + + Top + Naut + + + + Bottom + Bas + + + + Left + Esquèrra + + + + Right + Dreita + + + + Tab position: + Posicion de l'onglet : + + + + As needed + Se necessari + + + + Always + Totjorn + + + + Exit after last tab: + + + + + Scrollable menus: + Menús desenrotlants : + + + + Searchable menus: + Menús consultables : + + + + Zoom to selection: + Zoomar sus la seleccion : + + + + + Never + Pas jamai + + + + Settings + Paramètres + + + + Tab visibility: + Visibilitat de l'onglet : + + + + Spread tabs: + Repartir los onglets : + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Barra d'aisinas Fichièr : + + + + Edit tool bar: + Barra d'aisinas Edicion : + + + + View tool bar: + Barra d'aisinas Afichatge : + + + + Use page label: + Utilizar lo libellat de la pagina : + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + Zoom : + + + + Rotate: + Rotacion : + + + + Scroll: + Desfilament : + + + + Copy to clipboard: + + + + + Add annotation: + Apondre una anotacion : + + + + qpdfview::ShortcutHandler + + + Action + Accion + + + + Key sequence + Sequéncia clavièr + + + + Skip backward + Tornar a la precedenta + + + + Skip forward + Avança rapida + + + + Move up + Desplaçar cap amont + + + + Move down + Desplaçar cap aval + + + + Move left + Desplaçar cap a esquèrra + + + + Move right + Desplaçar cap a dreita + + + + qpdfview::TreeView + + + &Expand all + Desvolopar &tot + + + + &Collapse all + Reduire &tot + + + + MainWindow + + &Save copy... + &Enregistrar una còpia… + + + diff --git a/translations/qpdfview_pl.ts b/translations/qpdfview_pl.ts new file mode 100644 index 0000000..99bc54c --- /dev/null +++ b/translations/qpdfview_pl.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Obraz (%1) + + + + Size + Rozmiar + + + + Resolution + Rozdzielczość + + + + Depth + Głębia kolorów + + + + + + + + + Format + Format + + + + Monochrome + Monochromatyczny + + + + Indexed + Indeksowany + + + + 32 bits RGB + 32-bitowe RGB + + + + 32 bits ARGB + 32-bitowe ARGB + + + + 16 bits RGB + 16-bitowe RGB + + + + 24 bits RGB + 24-bitowe RGB + + + + Model::PdfDocument + + + Linearized + Linearyzowane + + + + Name + Nazwa + + + + Type + Rodzaj + + + + Embedded + Osadzony + + + + Subset + Podzbiór + + + + File + Plik + + + + + + + Yes + Tak + + + + PDF version + Wersja PDF + + + + Encrypted + Zaszyfrowane + + + + + + + No + Nie + + + + Model::PdfPage + + + Information + Informacja + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Wersja 0.20.1 lub wyższa biblioteki Poppler jest wymagana by dodawać lub usuwać adnotacje. + + + + Model::PsDocument + + + Title + Tytuł + + + + Created for + Utworzono dla + + + + Creator + Utworzył + + + + Creation date + Data utworzenia + + + + Format + Format + + + + Language level + Poziom języka + + + + QObject + + + An empty instance name is not allowed. + Pusta nazwa instancji nie jest dozwolona. + + + + An empty search text is not allowed. + Wyszukiwanie pustego tekstu jest niedozwolone. + + + + Unknown command-line option '%1'. + Nieznana opcja wiersza poleceń '%1'. + + + + Using '--instance' requires an instance name. + Użycie opcji '--instance' wymaga podania nazwy. + + + + Using '--instance' is not allowed without using '--unique'. + Użycie opcji '--instance' nie jest dozwolone bez opcji '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Nazwa instancji musi składać się tylko ze znaków "[A-Z][a-z][0-9]_" i nie może zaczynać się od cyfry. + + + + Using '--search' requires a search text. + Użycie '--search' wymaga podania szukanego tekstu. + + + + Could not prepare signal handler. + Nie można przygotować obsługi sygnału. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift i Ctrl + + + + Shift and Alt + Shift i Alt + + + + Ctrl and Alt + Ctrl i Alt + + + + Right mouse button + Prawy przycisk myszy + + + + Middle mouse button + Środkowy przycisk myszy + + + + None + Brak + + + + qpdfview::BookmarkDialog + + + Bookmark + Zakładka + + + + Page: + Strona: + + + + Label: + Etykieta: + + + + Comment: + Komentarz: + + + + Modified: + Zmodyfikowano: + + + + qpdfview::BookmarkMenu + + + &Open + &Otwórz + + + + Open in new &tab + Otwórz w nowej &karcie + + + + &Remove bookmark + &Usuń zakładkę + + + + qpdfview::Database + + + Jump to page %1 + Przejdź do strony %1 + + + + qpdfview::DocumentView + + + + Information + Informacje + + + + The source editor has not been set. + Nie ustawiono jeszcze edytora źródła. + + + + Opening URL is disabled in the settings. + Otwieranie adresów URL jest wyłączone w ustawieniach. + + + + Warning + Ostrzeżenie + + + + + SyncTeX data for '%1' could not be found. + Dane systemu SyncTeX dla '%1' nie zostały znalezione. + + + + Printing '%1'... + Drukowanie '%1'... + + + + Unlock %1 + Odblokuj %1 + + + + Password: + Hasło: + + + + Page %1 + Strona %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Zapisz... + + + + Save and open... + Zapisz i otwórz... + + + + Save file attachment + Zapisz plik załącznika + + + + + Warning + Ostrzeżenie + + + + Could not open file attachment saved to '%1'. + Nie można otworzyć załącznika pliku zapisanego do '%1'. + + + + Could not save file attachment to '%1'. + Nie udało się zapisać pliku załącznika do '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Czcionki + + + + qpdfview::HelpDialog + + + Help + Pomoc + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Znajdź poprzedni + + + + Find next + Znajdź następny + + + + qpdfview::MainWindow + + + Toggle tool bars + Przełącz paski narzędzi + + + + Toggle menu bar + Przełącz pasek menu + + + + + + + + + + + + + + Warning + Ostrzeżenie + + + + + Could not open '%1'. + Nie można otworzyć '%1'. + + + + Copy file path + Kopiuj ścieżkę pliku + + + + Select file path + Zaznacz ścieżkę pliku + + + + Close all tabs + Zamknij wszystkie karty + + + + Close all tabs but this one + Zamknij wszystkie karty, ale nie tą + + + + Close all tabs to the left + Zamknij wszystkie karty w lewo + + + + Close all tabs to the right + Zamknij wszystkie karty w prawo + + + + + Open + Otwórz + + + + Open in new tab + Otwórz w nowej karcie + + + + + + Could not refresh '%1'. + Nie można odświeżyć '%1'. + + + + Save copy + Zapisz kopię + + + + Could not save copy at '%1'. + Nie można zapisać kopii jako '%1'. + + + + Save as + Zapisz jako + + + + + Move to instance + Przenieś do instancji + + + + + Failed to access instance '%1'. + Nie udało się uzyskać dostępu do instancji '%1'. + + + + + + Could not save as '%1'. + Nie można zapisać jako '%1'. + + + + Could not print '%1'. + Nie można wydrukować '%1'. + + + + Set first page + Ustaw pierwszą stronę + + + + Select the first page of the body matter: + Ustaw pierwszą stronę głównego dokumentu: + + + + Jump to page + Skocz do strony + + + + Page: + Strona: + + + + Jump to page %1 + Przejdź do strony %1 + + + + About qpdfview + O programie qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview to przeglądarka dokumentów z kartami używająca interfejsu Qt.</p><p>Ta wersja zawiera:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Obsługa PDF poprzez Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Obsługa PS poprzez libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Obsługa DjVu poprzez DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Obsługa PDF poprzez Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Obsługa drukowania poprzez CUPS %1</li> + + + + &Edit bookmark + &Edytuj zakładkę + + + + The document '%1' has been modified. Do you want to save your changes? + Dokument '%1' został zmieniony. Czy chcesz zapisać swoje zmiany? + + + + Page width + Szerokość strony + + + + Page size + Rozmiar strony + + + + Match &case + Uwzględniaj &wielkość liter + + + + Whole &words + &Wszystkie słowa + + + + Highlight &all + Podświetl &wszystko + + + + &Open... + &Otwórz... + + + + Open in new &tab... + Otwórz w nowej &karcie... + + + + Open &copy in new tab + Otwórz &kopię w nowej karcie + + + + Move to &instance... + Przenieś do &instancji… + + + + &Refresh + O&dśwież + + + + Information + Informacje + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Zapisz &jako... + + + + Save &copy... + Zapisz &kopię... + + + + &Print... + &Drukuj... + + + + E&xit + Zakoń&cz + + + + &Previous page + Pop&rzednia strona + + + + &Next page + &Następna strona + + + + &First page + &Pierwsza strona + + + + &Last page + &Ostatnia strona + + + + &Set first page... + %Ustaw pierwszą stronę... + + + + &Jump to page... + &Skocz do strony... + + + + Jump &backward + Przejdź &do tyłu + + + + Jump for&ward + Przejdź do p&rzodu + + + + &Search... + &Znajdź... + + + + Find previous + Znajdź poprzedni + + + + Find next + Znajdź następny + + + + Cancel search + Anuluj wyszukiwanie + + + + &Copy to clipboard + &Kopiuj do schowka + + + + &Add annotation + &Dodaj adnotację + + + + Settings... + Ustawienia... + + + + &Continuous + Widok &ciągły + + + + &Two pages + &Dwie strony + + + + Two pages &with cover page + Dwie strony z &okładką + + + + &Multiple pages + &Wiele stron + + + + Right to left + Od prawej do lewej + + + + Zoom &in + &Powiększ + + + + Zoom &out + Po&mniejsz + + + + Original &size + Wielkość &oryginalna + + + + Fit to page width + Dostosuj do szerokości + + + + Fit to page size + Dostosuj do wielkości + + + + Rotate &left + Obróć w &lewo + + + + Rotate &right + Obróć w &prawo + + + + Invert colors + Odwróć kolory + + + + Convert to grayscale + Przekształć na skalę szarości + + + + Trim margins + Marginesy cięcia + + + + Darken with paper color + Ciemniejszy od koloru papieru + + + + Lighten with paper color + Jaśniejszy od koloru papieru + + + + Fonts... + Czcionki... + + + + &Fullscreen + &Pełny ekran + + + + &Presentation... + Pre&zentacja... + + + + &Previous tab + &Poprzednia karta + + + + &Next tab + &Następna karta + + + + &Close tab + &Zamknij kartę + + + + Close &all tabs + Zamknij &wszystkie karty + + + + Close all tabs &but current tab + Zamknij &pozostałe karty + + + + Restore &most recently closed tab + Przywróć ostatnio za&mkniętą kartę + + + + &Previous bookmark + &Poprzednia zakładka + + + + &Next bookmark + &Następna zakładka + + + + &Add bookmark + &Dodaj zakładkę + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + Zamknięcie bieżącego widoku + + + + Thumb&nails + Mi&niaturki + + + + Book&marks + Zakła&dki + + + + Composition + Kompozycja + + + + + &Remove bookmark + &Usuń zakładkę + + + + Edit '%1' at %2,%3... + Edycja '%1' w %2,%3... + + + + Open containing &folder + Otwórz zawierający &katalog + + + + &Save + Zapi&sz + + + + Remove all bookmarks + Usuń wszystkie zakładki + + + + &Contents + &Spis treści + + + + &About + &O progamie + + + + + &File + &Plik + + + + + &Edit + &Edycja + + + + + &View + &Widok + + + + &Outline + &Konspekt + + + + &Properties + &Właściwości + + + + &Search + &Wyszukaj + + + + &Tool bars + Paski &narzędzi + + + + &Docks + &Widoki + + + + &Tabs + &Karty + + + + &Bookmarks + &Zakładki + + + + &Help + P&omoc + + + + + Choose instance + Wybierz instancję + + + + + Instance: + Instancja: + + + + qpdfview::PageItem + + + Go to page %1. + Skocz do strony %1. + + + + Go to page %1 of file '%2'. + Przejdź do strony %1 pliku '%2'. + + + + Open '%1'. + Otwórz '%1'. + + + + Edit form field '%1'. + Edytuj pole formularza '%1'. + + + + Copy &text + Kopiuj &tekst + + + + &Select text + &Zaznacz tekst + + + + Copy &image + Kopiuj &obraz + + + + Save image to &file... + Zapisz obraz do &pliku... + + + + Save image to file + Zapisz obraz do pliku + + + + Warning + Ostrzeżenie + + + + Could not save image to file '%1'. + Nie można zapisać obrazu do pliku '%1'. + + + + Add &text + Dodaj &tekst + + + + Add &highlight + Dodaj po&dświetlenie + + + + &Copy link address + %Skopiuj adres odnośnika + + + + &Select link address + &Zaznacz adres odnośnika + + + + &Remove annotation + &Usuń adnotację + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antyaliasing: + + + + Text antialiasing: + Antyaliasing tekstu: + + + + + None + Brak + + + + Full + Pełny + + + + Reduced + Zredukowano + + + + + Text hinting: + Tekst podpowiedzi: + + + + Ignore paper color: + Ignoruj kolor papieru: + + + + Overprint preview: + Podgląd wydruku: + + + + Solid + Jednolity + + + + Shaped + Uformowane + + + + Thin line mode: + Tryb cienkiej linii: + + + + Splash + Ekran powitalny + + + + Arthur + Arthur + + + + Backend: + Mechanizm: + + + + qpdfview::PluginHandler + + + Image (%1) + Obraz (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Obsługiwane formaty (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Nie można dopasować typu pliku '%1'! + + + + Critical + Krytyczny + + + + Could not load plug-in for file type '%1'! + Nie można wczytać wtyczki dla typu pliku '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Dopasuj do strony: + + + + Page ranges: + Zakres stron: + + + + All pages + Wszystkie strony + + + + Even pages + Parzyste strony + + + + Odd pages + Nieparzyste strony + + + + Page set: + Wybór stron: + + + + Single page + Pojedyncza strona + + + + Two pages + Dwie strony + + + + Four pages + Cztery strony + + + + Six pages + Sześć stron + + + + Nine pages + Dziewięć stron + + + + Sixteen pages + Szesnaście stron + + + + Number-up: + Stron na arkusz: + + + + Bottom to top and left to right + Od dołu do góry i od lewej do prawej + + + + Bottom to top and right to left + Od dołu do góry i od prawej do lewej + + + + Left to right and bottom to top + Od lewej do prawej i od dołu do góry + + + + Left to right and top to bottom + Od lewej do prawej i od góry do dołu + + + + Right to left and bottom to top + Od prawej do lewej i od dołu do góry + + + + Right to left and top to bottom + Od prawej do lewej i od góry do dołu + + + + Top to bottom and left to right + Od góry do dołu i od lewej do prawej + + + + Top to bottom and right to left + Od góry do dołu i od prawej do lewej + + + + Number-up layout: + Kolejność: + + + + Extended options + Opcje rozszerzone + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Antyaliasing grafiki: + + + + Text antialias bits: + Antyaliasing tekstu: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + O&statnio zamknięte + + + + &Clear list + &Wyczyść listę + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Ostatnio &użyte + + + + &Clear list + &Wyczyść listę + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> występowań + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> występowań na stronie <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Szukaj '%1'... + + + + qpdfview::SettingsDialog + + + General + Ogólne + + + + &Behavior + &Zachowanie + + + + &Graphics + &Wyświetlanie + + + + &Interface + &Interfejs + + + + &Shortcuts + &Skróty + + + + &Modifiers + &Klawisze + + + + Defaults + Domyślne + + + + Defaults on current tab + Domyślne na bieżącej karcie + + + + Mouse wheel modifiers + Modyfikacje kółka myszy + + + + Mouse button modifiers + Modyfikacje przycisków myszy + + + + Open URL: + Otwieraj URL-e: + + + + Auto-refresh: + Autoodświeżanie: + + + + + + + + + + + + Effective after restart. + Zmiany dostępne po ponownym uruchomieniu. + + + + Track recently used: + Śledź ostatnio użyte: + + + + Keep recently closed: + Zachowaj ostatnio zamknięte: + + + + Restore tabs: + Przywróć karty: + + + + Restore bookmarks: + Przywróć zakładki: + + + + Restore per-file settings: + Przywróć ustawienia dla plików: + + + + min + min. + + + + Save database interval: + Odstęp zapisu bazy danych: + + + + Synchronize presentation: + Synchronizuj prezentację: + + + + Default + Domyślny + + + + Presentation screen: + Ekran do prezentacji: + + + + Synchronize split views: + + + + + Zoom factor: + Współczynnik powiększania: + + + + Parallel search execution: + + + + + ms + milisekund + + + + None + Brak + + + + Highlight duration: + Czas trwania podświetlenia: + + + + Highlight color: + Kolor podświetlenia: + + + + Annotation color: + Kolor adnotacji: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + sekwencja '%1' jest zastępowana przez ścieżkę bezwzględną. '%2' i '%3' są zastępowane odpowiednio przez numer linii i kolumny. + + + + Source editor: + Edytor tekstu źródłowego: + + + + Use tiling: + Użycie kafelkowania: + + + + Keep obsolete pixmaps: + Zachowaj przestarzałe mapy pikseli: + + + + Use device pixel ratio: + Użyj współczynnika piksela urządzenia: + + + + Decorate pages: + Dekoracje stron: + + + + Decorate links: + Dekoracje linków: + + + + Decorate form fields: + Dekoracje pól formularza: + + + + Background color: + Kolor tła: + + + + Paper color: + Kolor papieru: + + + + Presentation background color: + Kolor tła prezentacji: + + + + Pages per row: + Stron w wierszu: + + + + + + px + piks. + + + + Page spacing: + Odstępy między stronami: + + + + Thumbnail spacing: + Odstępy między miniaturami: + + + + Thumbnail size: + Wielkość miniatury: + + + + Fit to viewport + Dopasuj do okna podglądu + + + + Document context menu: + Menu kontekstowe dokumentu: + + + + Tab context menu: + Menu kontekstowe karty: + + + + Open in source editor: + Otwórz w edytorze źródła: + + + + + %1 MB + %1 MB + + + + Cache size: + Wielkość bufora: + + + + Minimal scrolling: + Minimalne przewinięcie: + + + + Prefetch: + Ładowanie z wyprzedzeniem: + + + + Prefetch distance: + Dystans wyprzedzenia: + + + + Top + Na górze + + + + Bottom + Na dole + + + + Left + Po lewej + + + + Right + Po prawej + + + + Tab position: + Położenie paska kart: + + + + As needed + Gdy konieczne + + + + Always + Zawsze + + + + Exit after last tab: + Wyjdź po ostatniej karcie: + + + + Scrollable menus: + Przewijane menu: + + + + Searchable menus: + Menu wyszukiwania: + + + + Zoom to selection: + Powiększenie przy zaznaczeniu: + + + + + Never + Nigdy + + + + Settings + Ustawienia + + + + Tab visibility: + Widoczność paska kart: + + + + Spread tabs: + Rozciągnięcie kart: + + + + New tab next to current tab: + Nowa karta obok bieżącej karty: + + + + Recently used count: + Ostatnio używane liczba: + + + + Recently closed count: + Ilość ostatnio zamkniętych: + + + + Extended search dock: + Rozszerzony dok wyszukiwania: + + + + Toggle tool and menu bars with fullscreen: + Przełącz paski narzędzi i menu wraz z pełnym ekranem: + + + + File tool bar: + Pasek narzędziowy "Plik": + + + + Edit tool bar: + Pasek narzędziowy "Edycja": + + + + View tool bar: + Pasek narzędziowy "Widok": + + + + Use page label: + Użyj etykietę strony: + + + + Document title as tab title: + Tytuł dokumentu jako tytuł karty: + + + + Current page in window title: + Bieżąca strona w tytule okna: + + + + Instance name in window title: + Nazwa instancji w tytule okna: + + + + Synchronize outline view: + Synchronizuj widok konspektu: + + + + Highlight current thumbnail: + Zaznacz bieżącą miniaturkę: + + + + Limit thumbnails to results: + Limit miniatur do: + + + + Annotation overlay: + Pokrycie adnotacji: + + + + Form field overlay: + Pokrycie pola formularza: + + + + Zoom: + Powiększenie: + + + + Rotate: + Obrót: + + + + Scroll: + Przewijaj: + + + + Copy to clipboard: + Kopiuj do schowka: + + + + Add annotation: + Dodaj adnotację: + + + + qpdfview::ShortcutHandler + + + Action + Działanie + + + + Key sequence + Sekwencja klawiszy + + + + Skip backward + Przejdź wstecz + + + + Skip forward + Przejdź naprzód + + + + Move up + Przesuń w górę + + + + Move down + Przesuń w dół + + + + Move left + Idź w lewo + + + + Move right + Idź w prawo + + + + qpdfview::TreeView + + + &Expand all + &Rozszerz wszystko + + + + &Collapse all + &Zwiń wszystko + + + diff --git a/translations/qpdfview_pt.ts b/translations/qpdfview_pt.ts new file mode 100644 index 0000000..dec9343 --- /dev/null +++ b/translations/qpdfview_pt.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Imagem (%1) + + + + Size + Tamanho + + + + Resolution + Resolução + + + + Depth + Profundidade + + + + + + + + + Format + Formato + + + + Monochrome + Monocromático + + + + Indexed + Indexado + + + + 32 bits RGB + RGB 32 bits + + + + 32 bits ARGB + ARGB 32 bits + + + + 16 bits RGB + RGB 16 bits + + + + 24 bits RGB + RGB 24 bits + + + + Model::PdfDocument + + + Linearized + Linearizado + + + + Name + Nome + + + + Type + Tipo + + + + Embedded + Incorporado + + + + Subset + Subconjunto + + + + File + Ficheiro + + + + + + + Yes + Sim + + + + PDF version + Versão PDF + + + + Encrypted + Encriptado + + + + + + + No + Não + + + + Model::PdfPage + + + Information + Informações + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Tem que instalar a versão 0.20.1 da biblioteca poppler para adicionar ou remover notas. + + + + Model::PsDocument + + + Title + Titulo + + + + Created for + Criado para + + + + Creator + Autor + + + + Creation date + Data de criação + + + + Format + Formato + + + + Language level + Nível de linguagem + + + + QObject + + + An empty instance name is not allowed. + Não é permitido um nome de instância vazio. + + + + An empty search text is not allowed. + Não é permitida uma procura de texto vazia. + + + + Unknown command-line option '%1'. + %1 é uma opção desconhecida na linha de comandos. + + + + Using '--instance' requires an instance name. + A opção --instance requer o nome da instância. + + + + Using '--instance' is not allowed without using '--unique'. + A opção --instance obriga à utilização da opção --unique. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + O nome da instância só pode possuir os caracteres "[A-Z][a-z][0-9]_" e não pode iniciar com um dígito. + + + + Using '--search' requires a search text. + A opção --search requer o texto a procurar. + + + + Could not prepare signal handler. + Não foi possível preparar o gestor de sinais. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift e Ctrl + + + + Shift and Alt + Shift e Alt + + + + Ctrl and Alt + Ctrl e Alt + + + + Right mouse button + Botão direito do rato + + + + Middle mouse button + Botão central do rato + + + + None + Nenhum + + + + qpdfview::BookmarkDialog + + + Bookmark + Marcador + + + + Page: + Página: + + + + Label: + Etiqueta: + + + + Comment: + Comentário: + + + + Modified: + Modificado: + + + + qpdfview::BookmarkMenu + + + &Open + A&brir + + + + Open in new &tab + Abrir em novo &separador + + + + &Remove bookmark + &Remover marcador + + + + qpdfview::Database + + + Jump to page %1 + Ir para a página %1 + + + + qpdfview::DocumentView + + + + Information + Informações + + + + The source editor has not been set. + Editor de fonte não definido. + + + + Opening URL is disabled in the settings. + A abertura de URL está inativa nas definições. + + + + Warning + Aviso + + + + + SyncTeX data for '%1' could not be found. + Não foi possível encontrar os dados SyncText para %1. + + + + Printing '%1'... + A imprimir %1... + + + + Unlock %1 + Desbloquear %1 + + + + Password: + Palavra-passe: + + + + Page %1 + Página %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Guardar... + + + + Save and open... + Guardar e abrir... + + + + Save file attachment + Guardar anexo... + + + + + Warning + Aviso + + + + Could not open file attachment saved to '%1'. + Não foi possível abrir o anexo guardado em %1. + + + + Could not save file attachment to '%1'. + Não foi possível guardar o anexo em %1. + + + + qpdfview::FontsDialog + + + Fonts + Tipos de letra + + + + qpdfview::HelpDialog + + + Help + Ajuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_pt.html + + + + Find previous + Localizar anterior + + + + Find next + Localizar seguinte + + + + qpdfview::MainWindow + + + Toggle tool bars + Alternar barra de ferramentas + + + + Toggle menu bar + Alternar barra de menu + + + + + + + + + + + + + + Warning + Aviso + + + + + Could not open '%1'. + Não foi possível abrir %1. + + + + Copy file path + Copiar caminho do ficheiro + + + + Select file path + Selecionar caminho do ficheiro + + + + Close all tabs + Fechar todos os separadores + + + + Close all tabs but this one + Fechar todos os separadores exceto este + + + + Close all tabs to the left + Fechar todos os separadores à esquerda + + + + Close all tabs to the right + Fechar todos os separadores à direita + + + + + Open + Abrir + + + + Open in new tab + Abrir em novo separador + + + + + + Could not refresh '%1'. + Não foi possível atualizar %1. + + + + Save copy + Guardar uma cópia + + + + Could not save copy at '%1'. + Não foi possível guardar a cópia em %1. + + + + Save as + Guardar como + + + + + Move to instance + Mover para a instância + + + + + Failed to access instance '%1'. + Erro ao aceder à instância %1. + + + + + + Could not save as '%1'. + Não foi possível guardar como %1. + + + + Could not print '%1'. + Não foi possível imprimir %1. + + + + Set first page + Definir primeira página + + + + Select the first page of the body matter: + Selecione a primeira página do conteúdo: + + + + Jump to page + Ir para a página + + + + Page: + Página: + + + + Jump to page %1 + Ir para a página %1 + + + + About qpdfview + Sobre o qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>O qpdfview é um visualizador de documentos que utiliza a tecnologia Qt.</p><p>Esta versão inclui:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Suporte PDF através de Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Suporte PS através de libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Suporte DjVu através de DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Suporte PDF através de Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Suporte de impressão através de CUPS %1</li> + + + + &Edit bookmark + &Editar marcador + + + + The document '%1' has been modified. Do you want to save your changes? + O documento %1 foi modificado. Pretende guardar as alterações? + + + + Page width + Largura da página + + + + Page size + Tamanho da página + + + + Match &case + Diferenciar maiús&cula/minúscula + + + + Whole &words + &Palavra completa + + + + Highlight &all + Realç&ar tudo + + + + &Open... + &Abrir... + + + + Open in new &tab... + Abrir em novo &separador... + + + + Open &copy in new tab + Abrir uma &cópia em novo separador + + + + Move to &instance... + Mover para a &instância... + + + + &Refresh + Atualiza&r + + + + Information + Informações + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Gu&ardar como... + + + + Save &copy... + Guardar &cópia + + + + &Print... + Im&primir... + + + + E&xit + &Sair + + + + &Previous page + &Página anterior + + + + &Next page + Página segui&nte + + + + &First page + Pri&meira página + + + + &Last page + Ú&ltima página + + + + &Set first page... + &Definir primeira página... + + + + &Jump to page... + &Ir para a página... + + + + Jump &backward + &Recuar + + + + Jump for&ward + A&vançar + + + + &Search... + Proc&urar... + + + + Find previous + Procurar anterior + + + + Find next + Procurar seguinte + + + + Cancel search + Cancelar + + + + &Copy to clipboard + &Copiar para a área de transferência + + + + &Add annotation + &Adicionar nota + + + + Settings... + Definições... + + + + &Continuous + &Contínuo + + + + &Two pages + &Duas páginas + + + + Two pages &with cover page + Duas páginas com &folha de rosto + + + + &Multiple pages + &Múltiplas páginas + + + + Right to left + Da direita para a esquerda + + + + Zoom &in + Ampl&iar + + + + Zoom &out + &Reduzir + + + + Original &size + &Tamanho original + + + + Fit to page width + Ajustar à largura da página + + + + Fit to page size + Ajustar ao tamanho da página + + + + Rotate &left + Rodar à &esquerda + + + + Rotate &right + R&odar à direita + + + + Invert colors + Inverter cores + + + + Convert to grayscale + Converter para escala de cinza + + + + Trim margins + Reduzir margens + + + + Darken with paper color + Escuro com cor de papel + + + + Lighten with paper color + Claro com cor de papel + + + + Fonts... + Tipo de letra... + + + + &Fullscreen + &Ecrã completo + + + + &Presentation... + A&presentação... + + + + &Previous tab + Separador &anterior + + + + &Next tab + Separador &seguinte + + + + &Close tab + Fe&char separador + + + + Close &all tabs + Fech&ar todos os separadores + + + + Close all tabs &but current tab + Fechar todos &os separadores exceto o atual + + + + Restore &most recently closed tab + Restaurar separador recente&mente fechado + + + + &Previous bookmark + Marcador &anterior + + + + &Next bookmark + Marcador se&guinte + + + + &Add bookmark + &Adicionar marcador + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Mi&niaturas + + + + Book&marks + &Marcadores + + + + Composition + Composição + + + + + &Remove bookmark + &Remover marcador + + + + Edit '%1' at %2,%3... + Editar '%1' em %2,%3... + + + + Open containing &folder + Abrir pasta &respetiva + + + + &Save + &Guardar + + + + Remove all bookmarks + Remover todos os marcadores + + + + &Contents + &Conteúdo + + + + &About + &Sobre + + + + + &File + &Ficheiro + + + + + &Edit + &Editar + + + + + &View + &Ver + + + + &Outline + Tópic&os + + + + &Properties + &Propriedades + + + + &Search + &Procurar + + + + &Tool bars + Barra de ferramen&tas + + + + &Docks + &Docas + + + + &Tabs + &Separadores + + + + &Bookmarks + &Marcadores + + + + &Help + Aj&uda + + + + + Choose instance + Escolher instância + + + + + Instance: + Instância: + + + + qpdfview::PageItem + + + Go to page %1. + Ir para a página %1. + + + + Go to page %1 of file '%2'. + Ir para a página %1 do ficheiro %2. + + + + Open '%1'. + Abrir %1. + + + + Edit form field '%1'. + Editar o campo %1. + + + + Copy &text + Copiar &texto + + + + &Select text + &Selecionar texto + + + + Copy &image + Copiar &imagem + + + + Save image to &file... + Guardar imagem no &ficheiro... + + + + Save image to file + Guardar imagem no ficheiro + + + + Warning + Aviso + + + + Could not save image to file '%1'. + Não foi possível guardar a imagem no ficheiro %1. + + + + Add &text + Adicionar &texto + + + + Add &highlight + Adicionar r&ealce + + + + &Copy link address + &Copiar endereço da ligação + + + + &Select link address + &Selecionar endereço da ligação + + + + &Remove annotation + &Remover nota + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Suavização: + + + + Text antialiasing: + Suavização de texto: + + + + + None + Nenhuma + + + + Full + Total + + + + Reduced + Reduzida + + + + + Text hinting: + Hinting de texto: + + + + Ignore paper color: + Ignorar cor do papel: + + + + Overprint preview: + Pré-visualização: + + + + Solid + Sólida + + + + Shaped + Com formas + + + + Thin line mode: + Modo de linha: + + + + Splash + Ecrã inicial + + + + Arthur + Artur + + + + Backend: + Infraestrutura: + + + + qpdfview::PluginHandler + + + Image (%1) + Imagem (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Formatos suportados (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Não foi possível obter o tipo de ficheiro de %1! + + + + Critical + Crítico + + + + Could not load plug-in for file type '%1'! + Não foi possível carregar o plugin para os ficheiros %1! + + + + qpdfview::PrintDialog + + + Fit to page: + Ajustar à página: + + + + Page ranges: + Intervalo de páginas: + + + + All pages + Todas as páginas + + + + Even pages + Páginas pares + + + + Odd pages + Páginas ímpares + + + + Page set: + Páginas: + + + + Single page + Uma página + + + + Two pages + Duas páginas + + + + Four pages + Quatro páginas + + + + Six pages + Seis páginas + + + + Nine pages + Nove páginas + + + + Sixteen pages + Dezasseis páginas + + + + Number-up: + Número: + + + + Bottom to top and left to right + De baixo para cima e da esquerda para a direita + + + + Bottom to top and right to left + De baixo para cima e da direita para a esquerda + + + + Left to right and bottom to top + Da esquerda para a direita e de baixo para cima + + + + Left to right and top to bottom + Da esquerda para a direita e de cima para baixo + + + + Right to left and bottom to top + Da direita para a esquerda e de baixo para cima + + + + Right to left and top to bottom + Da direita para a esquerda e de cima para baixo + + + + Top to bottom and left to right + De cima para baixo e da esquerda para a direita + + + + Top to bottom and right to left + De cima para baixo e da direita para a esquerda + + + + Number-up layout: + Esquema: + + + + Extended options + Opções detalhadas + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits de suavização de objetos: + + + + Text antialias bits: + Bits de suavização de texto: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Fechados &recentemente + + + + &Clear list + &Limpar lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Doc&umentos recentes + + + + &Clear list + &Limpar lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> ocorrências + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> ocorrências na página <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Procurar por %1... + + + + qpdfview::SettingsDialog + + + General + Geral + + + + &Behavior + &Comportamento + + + + &Graphics + Objetos &gráficos + + + + &Interface + &Interface + + + + &Shortcuts + Atalho&s + + + + &Modifiers + &Modificadores + + + + Defaults + Predefinições + + + + Defaults on current tab + Predefinições no separador atual + + + + Mouse wheel modifiers + Modificadores da roda do rato + + + + Mouse button modifiers + Modificadores dos botões do rato + + + + Open URL: + Abrir URL: + + + + Auto-refresh: + Atualização automática: + + + + + + + + + + + + Effective after restart. + As alterações serão aplicadas ao reiniciar. + + + + Track recently used: + Utilizado recentemente: + + + + Keep recently closed: + Manter fechados recentemente: + + + + Restore tabs: + Restaurar separadores: + + + + Restore bookmarks: + Restaurar marcadores: + + + + Restore per-file settings: + Restaurar definições por ficheiro: + + + + min + min + + + + Save database interval: + Intervalo para guardar: + + + + Synchronize presentation: + Sincronizar apresentação: + + + + Default + Predefinição + + + + Presentation screen: + Ecrã de apresentação: + + + + Synchronize split views: + + + + + Zoom factor: + Fator de ampliação: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Não + + + + Highlight duration: + Duração de realce: + + + + Highlight color: + Cor de realce: + + + + Annotation color: + Cor da nota: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + %1 será substituido pelo caminho absoluto. %2 e %3 serão substituidos pelos números de linha e coluna. + + + + Source editor: + Editor de código: + + + + Use tiling: + Usar mosaicos: + + + + Keep obsolete pixmaps: + Manter pixmaps obsoletos: + + + + Use device pixel ratio: + Utilizar rácio de pixeis: + + + + Decorate pages: + Decorar páginas: + + + + Decorate links: + Decorar ligações: + + + + Decorate form fields: + Decorar campos: + + + + Background color: + Cor de fundo: + + + + Paper color: + Cor do papel: + + + + Presentation background color: + Cor de fundo da apresentação: + + + + Pages per row: + Páginas por linha: + + + + + + px + px + + + + Page spacing: + Espaçamento entre páginas: + + + + Thumbnail spacing: + Espaçamento entre miniaturas: + + + + Thumbnail size: + Tamanho de miniaturas: + + + + Fit to viewport + Ajustar ao ecrã + + + + Document context menu: + Menu de contexto do documento: + + + + Tab context menu: + Menu de contexto do separador: + + + + Open in source editor: + Abrir no editor fonte: + + + + + %1 MB + %1 MB + + + + Cache size: + Tamanho de cache: + + + + Minimal scrolling: + Deslocação mínima + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Distância prefetch: + + + + Top + Cima + + + + Bottom + Baixo + + + + Left + Esquerda + + + + Right + Direita + + + + Tab position: + Posição do separador: + + + + As needed + Conforme necessário + + + + Always + Sempre + + + + Exit after last tab: + Sair após o último separador: + + + + Scrollable menus: + Menus deslocáveis: + + + + Searchable menus: + Menus pesquisáveis: + + + + Zoom to selection: + Ampliar seleção: + + + + + Never + Nunca + + + + Settings + Definições + + + + Tab visibility: + Mostrar separadores: + + + + Spread tabs: + Expandir separadores: + + + + New tab next to current tab: + Novo separador junto ao atual: + + + + Recently used count: + Número de documentos recentes: + + + + Recently closed count: + Contagem de fechados recentemente: + + + + Extended search dock: + Doca de procura extensiva: + + + + Toggle tool and menu bars with fullscreen: + Alternar entre barra de menu e ferramentas em ecrã completo: + + + + File tool bar: + Barra de ferramentas Ficheiro: + + + + Edit tool bar: + Barra de ferramentas Editar: + + + + View tool bar: + Barra de ferramentas Ver: + + + + Use page label: + Usar etiqueta de página: + + + + Document title as tab title: + Título do documento como título do separador: + + + + Current page in window title: + Página atual na barra de título: + + + + Instance name in window title: + Nome da instância no título da janela: + + + + Synchronize outline view: + Sincronizar vista de tópicos: + + + + Highlight current thumbnail: + Realçar miniatura atual: + + + + Limit thumbnails to results: + Limitar miniaturas a: + + + + Annotation overlay: + Cobertura da anotação: + + + + Form field overlay: + Cobertura do campo de formulários: + + + + Zoom: + Ampliação: + + + + Rotate: + Rotação: + + + + Scroll: + Deslocação: + + + + Copy to clipboard: + Copiar para a área de transferência: + + + + Add annotation: + Adicionar nota: + + + + qpdfview::ShortcutHandler + + + Action + Ação + + + + Key sequence + Combinação de teclas + + + + Skip backward + Avançar + + + + Skip forward + Recuar + + + + Move up + Mover para cima + + + + Move down + Mover para baixo + + + + Move left + Mover para a esquerda + + + + Move right + Mover para a direita + + + + qpdfview::TreeView + + + &Expand all + &Expandir tudo + + + + &Collapse all + Re&colher tudo + + + diff --git a/translations/qpdfview_pt_BR.ts b/translations/qpdfview_pt_BR.ts new file mode 100644 index 0000000..2222c4f --- /dev/null +++ b/translations/qpdfview_pt_BR.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Formato + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nome + + + + Type + Tipo + + + + Embedded + Embutido + + + + Subset + Sublistar + + + + File + Arquivo + + + + + + + Yes + Sim + + + + PDF version + Versão PDF + + + + Encrypted + Criptografado + + + + + + + No + Não + + + + Model::PdfPage + + + Information + Informações + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Versão 0.20.1 ou maior da biblioteca Poppler é necessária para adicionar ou remover anotações. + + + + Model::PsDocument + + + Title + Título + + + + Created for + Criado para + + + + Creator + Autor + + + + Creation date + Data de criação + + + + Format + Formato + + + + Language level + Nível de linguagem + + + + QObject + + + An empty instance name is not allowed. + Um nome de instância vazio não é permitido. + + + + An empty search text is not allowed. + Não é permitido pesquisa de texto vazio. + + + + Unknown command-line option '%1'. + Opção de linha de comando desconhecida '%1'. + + + + Using '--instance' requires an instance name. + Usar '--instance' requer um nome de instância. + + + + Using '--instance' is not allowed without using '--unique'. + Usar '--instance' não é permitido sem utilizar '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Um nome de instância deve conter somente os caracteres "[A-Z][a-z][0-9]_" e não deve iniciar com dígito. + + + + Using '--search' requires a search text. + Usando '--search' requer um texto de pesquisa. + + + + Could not prepare signal handler. + Não foi possível preparar manipulador de sinal. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift e Ctrl + + + + Shift and Alt + Shift e Alt + + + + Ctrl and Alt + Ctrl e Alt + + + + Right mouse button + Botão direito do mouse + + + + Middle mouse button + Botão do meio do mouse + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + Marcador + + + + Page: + Página: + + + + Label: + Nome: + + + + Comment: + Comentário: + + + + Modified: + Modificado em: + + + + qpdfview::BookmarkMenu + + + &Open + &Abrir + + + + Open in new &tab + Abrir em uma nova &aba + + + + &Remove bookmark + &Remover marcador + + + + qpdfview::Database + + + Jump to page %1 + Pular para página %1 + + + + qpdfview::DocumentView + + + + Information + Informações + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Abertura de URL está desabilitada nas configurações. + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Imprimindo '%1'... + + + + Unlock %1 + Destravar %1 + + + + Password: + Senha: + + + + Page %1 + Página %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Salvar... + + + + Save and open... + Salvar e abrir... + + + + Save file attachment + Salvar arquivo em anexo + + + + + Warning + Atenção + + + + Could not open file attachment saved to '%1'. + Não foi possível abrir o anexo salvo em '%1'. + + + + Could not save file attachment to '%1'. + Não foi possível salvar o arquivo anexo para '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Fontes + + + + qpdfview::HelpDialog + + + Help + Ajuda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_pt_BR.html + + + + Find previous + Localizar anterior + + + + Find next + Localizar próxima + + + + qpdfview::MainWindow + + + Toggle tool bars + Alternar exibição da barra de ferramentas + + + + Toggle menu bar + Alternar exibição da barra de menus + + + + + + + + + + + + + + Warning + Aviso + + + + + Could not open '%1'. + Não foi possível abrir '%1'. + + + + Copy file path + Copiar caminho do arquivo + + + + Select file path + Selecionar caminho do arquivo + + + + Close all tabs + Fechar todas as abas + + + + Close all tabs but this one + Fechar todas as abas menos a atual + + + + Close all tabs to the left + Fechar todas as abas a esquerda + + + + Close all tabs to the right + Fechar todas as abas a direita + + + + + Open + Abrir + + + + Open in new tab + Abrir em uma nova aba + + + + + + Could not refresh '%1'. + Não foi possível atualizar '%1'. + + + + Save copy + Salvar uma cópia + + + + Could not save copy at '%1'. + Não foi possível salvar cópia '%1'. + + + + Save as + Salvar como + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Não foi possível salvar como '%1'. + + + + Could not print '%1'. + Não foi possível imprimir '%1'. + + + + Set first page + Definir como página inicial + + + + Select the first page of the body matter: + Selecione a primeira página da parte principal do documento: + + + + Jump to page + Pular para a página + + + + Page: + Página: + + + + Jump to page %1 + Pular para página %1 + + + + About qpdfview + Sobre o qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview é um leitor de documentos com abas usando QT.</p><p>Esta versão inclui:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Suporte à PDF usando a infraestrutura Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Suporte à PS usando a infraestrutura libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Suporte à DjVu usando a infraestrutura DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Suporte à PDF usando a infraestrutura Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Suporte à impressão usando a infraestrutura CUPS %1</li> + + + + &Edit bookmark + &Editar marcador + + + + The document '%1' has been modified. Do you want to save your changes? + O documento '%1' foi modificado. Deseja salvar suas alterações? + + + + Page width + Largura da página + + + + Page size + Tamanho da página + + + + Match &case + Diferenciar &maiúsculas de minúsculas + + + + Whole &words + Palavras &inteiras + + + + Highlight &all + Destacar &tudo + + + + &Open... + &Abrir... + + + + Open in new &tab... + Abrir em uma nova &aba... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Atualizar + + + + Information + Informações + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Salvar &como... + + + + Save &copy... + + + + + &Print... + &Imprimir... + + + + E&xit + S&air + + + + &Previous page + Página &anterior + + + + &Next page + &Próxima página + + + + &First page + Página &inicial + + + + &Last page + &Última página + + + + &Set first page... + Definir como página &inicial.... + + + + &Jump to page... + &Pular para a página... + + + + Jump &backward + Ir para &trás + + + + Jump for&ward + Ir para &frente + + + + &Search... + &Pesquisar... + + + + Find previous + Localizar anterior + + + + Find next + Localizar próxima + + + + Cancel search + Cancelar pesquisa + + + + &Copy to clipboard + &Copiar para a área de transferência + + + + &Add annotation + &Adicionar anotações + + + + Settings... + Configurações... + + + + &Continuous + &Contínuo + + + + &Two pages + &Páginas duplas + + + + Two pages &with cover page + Duas páginas &com capa + + + + &Multiple pages + &Múltiplas páginas + + + + Right to left + Direita para esquerda + + + + Zoom &in + &Aumentar zoom + + + + Zoom &out + &Diminuir zoom + + + + Original &size + &Tamanho original + + + + Fit to page width + Ajusta à largura da página + + + + Fit to page size + Ajustar ao tamanho da página + + + + Rotate &left + Girar para a &esquerda + + + + Rotate &right + Girar para a &direita + + + + Invert colors + Inverter as cores + + + + Convert to grayscale + Converter para escala de cinza + + + + Trim margins + Remover margens + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fontes... + + + + &Fullscreen + Tela &cheia + + + + &Presentation... + &Apresentação... + + + + &Previous tab + Aba &anterior + + + + &Next tab + &Próxima aba + + + + &Close tab + &Fechar aba + + + + Close &all tabs + Fechar &todas as abas + + + + Close all tabs &but current tab + Fechar todas as abas &menos a atual + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Marcador &anterior + + + + &Next bookmark + &Próximo marcador + + + + &Add bookmark + &Adicionar marcador + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Mi&niaturas + + + + Book&marks + &Marcadores + + + + Composition + Composição + + + + + &Remove bookmark + &Remover marcador + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + Abrir pasta que contém o arquivo + + + + &Save + + + + + Remove all bookmarks + Remover todos os marcadores + + + + &Contents + &Conteúdo + + + + &About + &Sobre + + + + + &File + &Arquivo + + + + + &Edit + &Editar + + + + + &View + &Exibir + + + + &Outline + &Contornar + + + + &Properties + &Propriedades + + + + &Search + &Pesquisar + + + + &Tool bars + Barra de &ferramentas + + + + &Docks + &Barras + + + + &Tabs + &Abas + + + + &Bookmarks + &Marcadores + + + + &Help + A&juda + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Ir para página %1. + + + + Go to page %1 of file '%2'. + Ir para a página %1 do arquivo '%2'. + + + + Open '%1'. + Abrir '%1'. + + + + Edit form field '%1'. + Editar campo do formulário '%1'. + + + + Copy &text + Copiar &texto + + + + &Select text + &Selecionar texto + + + + Copy &image + Copiar &imagem + + + + Save image to &file... + Salvar imagem para &arquivo... + + + + Save image to file + Salvar imagem para arquivo + + + + Warning + Aviso + + + + Could not save image to file '%1'. + Não foi possível salvar imagem para o arquivo '%1' + + + + Add &text + Adicionar &texto + + + + Add &highlight + Adicionar &destaque + + + + &Copy link address + &Copiar endereço do link + + + + &Select link address + &Selecionar endereço do link + + + + &Remove annotation + Remover &anotação + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Suavização: + + + + Text antialiasing: + Suvaização de texto: + + + + + None + Nenhum + + + + Full + Completo + + + + Reduced + Reduzido + + + + + Text hinting: + Sugestão de texto: + + + + Ignore paper color: + + + + + Overprint preview: + Visualização de superimposição: + + + + Solid + Sólido + + + + Shaped + Com Formas + + + + Thin line mode: + Modo de linha fina: + + + + Splash + + + + + Arthur + + + + + Backend: + Infraestrutura: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + Formatos suportados (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Tipo de arquivo de '%1' sem correspondência! + + + + Critical + Crítico + + + + Could not load plug-in for file type '%1'! + Não foi possível carregar o plug-in para o tipo de arquivo '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Ajustar à página: + + + + Page ranges: + Intervalo de páginas: + + + + All pages + Todas as páginas + + + + Even pages + Páginas pares + + + + Odd pages + Páginas ímpares + + + + Page set: + Conjunto de páginas: + + + + Single page + Página única + + + + Two pages + Duas páginas + + + + Four pages + Quatro páginas + + + + Six pages + Seis páginas + + + + Nine pages + Nove páginas + + + + Sixteen pages + 16 páginas + + + + Number-up: + + + + + Bottom to top and left to right + De baixo para cima e da esquerda para a direita + + + + Bottom to top and right to left + De baixo para cima e da direita para a esquerda + + + + Left to right and bottom to top + Da esquerda para a direita e de baixo para cima + + + + Left to right and top to bottom + Da esquerda para a direita e de cima para baixo + + + + Right to left and bottom to top + Da direita para esquerda e de baixo para cima + + + + Right to left and top to bottom + Da direita para a esquerda e de cima para baixo + + + + Top to bottom and left to right + De cima para baixo de da esquerda para a direita + + + + Top to bottom and right to left + De cima para baixo e da direita para a esquerda + + + + Number-up layout: + + + + + Extended options + Opções estendidas + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bits de suavização de gráficos: + + + + Text antialias bits: + Bits de suavização de texto: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Recentemente fechada + + + + &Clear list + &Limpar lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Recentemente &utilizados + + + + &Clear list + &Limpar lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> ocorrência(s) + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> ocorrência(s) na página <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Procurar por '%1'... + + + + qpdfview::SettingsDialog + + + General + Geral + + + + &Behavior + &Comportamento + + + + &Graphics + &Gráficos + + + + &Interface + &Interface + + + + &Shortcuts + &Atalhos + + + + &Modifiers + &Modificadores + + + + Defaults + Padrões + + + + Defaults on current tab + Padrões na aba atual + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Abrir URL: + + + + Auto-refresh: + Auto-atualizar: + + + + + + + + + + + + Effective after restart. + Efetivar após reiniciar. + + + + Track recently used: + Acompanhar recentemente utilizados: + + + + Keep recently closed: + Listar abas recentemente fechadas: + + + + Restore tabs: + Restaurar abas: + + + + Restore bookmarks: + Restaurar marcadores: + + + + Restore per-file settings: + Restaurar configurações por arquivo: + + + + min + min + + + + Save database interval: + Intervalo para salvar a base de dados: + + + + Synchronize presentation: + Sincronizar apresentação: + + + + Default + Padrão + + + + Presentation screen: + Tela de apresentação: + + + + Synchronize split views: + + + + + Zoom factor: + Fator de zoom: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Nenhuma + + + + Highlight duration: + Duração do destaque: + + + + Highlight color: + Cor de destaque: + + + + Annotation color: + Cor das anotações: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' é substituído pelo caminho absoluto do arquivo. '%2' resp. '%3' é substituído pela linha resp. número da coluna. + + + + Source editor: + Editor de código: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + Manter pixmaps obsoletos: + + + + Use device pixel ratio: + Utilizar taxa de pixel do dispositivo: + + + + Decorate pages: + Decorar páginas: + + + + Decorate links: + Decorar links: + + + + Decorate form fields: + Decorar campos do formulário: + + + + Background color: + Cor de fundo: + + + + Paper color: + Cor da folha: + + + + Presentation background color: + Cor de fundo da apresentação: + + + + Pages per row: + Páginas por linha: + + + + + + px + px + + + + Page spacing: + Espaçamento das páginas: + + + + Thumbnail spacing: + Espaçamento das miniaturas: + + + + Thumbnail size: + Tamanho das miniaturas: + + + + Fit to viewport + + + + + Document context menu: + Menu de contexto do documento: + + + + Tab context menu: + Menu de contexto da aba: + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Tamanho do cache: + + + + Minimal scrolling: + + + + + Prefetch: + Pré-carregar: + + + + Prefetch distance: + Distância pré-obtida: + + + + Top + Topo + + + + Bottom + Base + + + + Left + Esquerda + + + + Right + Direita + + + + Tab position: + Posição das abas: + + + + As needed + Quando necessário + + + + Always + Sempre + + + + Exit after last tab: + Sair ao fechar a última aba: + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + Zoom para a seleção: + + + + + Never + Nunca + + + + Settings + Configurações + + + + Tab visibility: + Visualização das abas: + + + + Spread tabs: + Espalhar abas: + + + + New tab next to current tab: + Nova aba ao lado da aba atual: + + + + Recently used count: + Contagem de recentemente utilizados: + + + + Recently closed count: + Quantidade de abas fechadas a listar: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Barra de ferramenta Arquivo: + + + + Edit tool bar: + Barra de ferramentas Editar: + + + + View tool bar: + Barra de ferramentas Exibir: + + + + Use page label: + + + + + Document title as tab title: + Título do documento no nome da aba: + + + + Current page in window title: + Página atual no título da janela: + + + + Instance name in window title: + Nome da instância no título da janela: + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + Destacar miniatura atual: + + + + Limit thumbnails to results: + Limite de miniaturas para resultados: + + + + Annotation overlay: + Sobreposição de anotação + + + + Form field overlay: + Sobreposição de campo do formulário: + + + + Zoom: + Zoom: + + + + Rotate: + Girar: + + + + Scroll: + Rolar: + + + + Copy to clipboard: + Copiar para a área de transferência: + + + + Add annotation: + Adicionar anotação: + + + + qpdfview::ShortcutHandler + + + Action + Ação + + + + Key sequence + Sequência de teclas + + + + Skip backward + Ignorar anterior + + + + Skip forward + Ignorar próxima + + + + Move up + Mover para cima + + + + Move down + Mover para baixo + + + + Move left + Mover para esquerda + + + + Move right + Mover para direita + + + + qpdfview::TreeView + + + &Expand all + &Expandir tudo + + + + &Collapse all + &Fechar todos + + + diff --git a/translations/qpdfview_ro.ts b/translations/qpdfview_ro.ts new file mode 100644 index 0000000..9a4a7aa --- /dev/null +++ b/translations/qpdfview_ro.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Format + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Nume + + + + Type + Tip + + + + Embedded + Încorporat + + + + Subset + Subset + + + + File + Fișier + + + + + + + Yes + Da + + + + PDF version + + + + + Encrypted + + + + + + + + No + Nu + + + + Model::PdfPage + + + Information + Detalii + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Pentru a adăuga sau șterge adnotările este nevoie de versiunea 0.20.1 sau mai mare a bibliotecii popler. + + + + Model::PsDocument + + + Title + Titlu + + + + Created for + Creat pentru + + + + Creator + Autor + + + + Creation date + Data creării + + + + Format + Format + + + + Language level + Nivel limbaj + + + + QObject + + + An empty instance name is not allowed. + Nu sunt permise câpuri goale. + + + + An empty search text is not allowed. + Nu este permis un câmp de căutare gol. + + + + Unknown command-line option '%1'. + Opțiunea „%1” din linie de comandă necunoscută. + + + + Using '--instance' requires an instance name. + Utilizarea „--instance” trebuie să aibă un nume. + + + + Using '--instance' is not allowed without using '--unique'. + Utilizarea „--instance” nu este permisă fără a utiliza și „--unique”. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + O instanță trebuie să conțină doar caracterele [A-Z][a-z][0-9]_ și nu trebuie să înceapă cu o cifră. + + + + Using '--search' requires a search text. + Dacă utlizați „--search” trebuie să introduceți text. + + + + Could not prepare signal handler. + Nu s-a putut pregăti prelucrarea semnalelor (signal handler). + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift și Ctrl + + + + Shift and Alt + Shift și Alt + + + + Ctrl and Alt + Ctrl și Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Nimic + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Pagina: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Deschide + + + + Open in new &tab + Deschide în &tab nou + + + + &Remove bookmark + Ște&rge semn de carte + + + + qpdfview::Database + + + Jump to page %1 + Sari la pagina %1 + + + + qpdfview::DocumentView + + + + Information + Informații + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Accesarea URL-urilor este dezactivată din configurări. + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Se tipărește „%1”... + + + + Unlock %1 + Deblocare %1 + + + + Password: + Parolă: + + + + Page %1 + Pagina %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Salvează... + + + + Save and open... + Salvează și deschide... + + + + Save file attachment + Salvare fișier atașat + + + + + Warning + Avertisment + + + + Could not open file attachment saved to '%1'. + Nu s-a putut deschide fișierul atașat salavat în „%1”. + + + + Could not save file attachment to '%1'. + Nu s-a putut salva fișierul atașat în „%1”. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Caută elementul anterior + + + + Find next + Caută elementul următor + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Atenție + + + + + Could not open '%1'. + Nu se poate deschide „%1” + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Închide toate filele + + + + Close all tabs but this one + Închide toate filele în afară de asta + + + + Close all tabs to the left + Închide toate filele din stânga + + + + Close all tabs to the right + Închide toate filele din dreapta + + + + + Open + Deschide + + + + Open in new tab + Deschide într-o filă nouă + + + + + + Could not refresh '%1'. + Nuse poate reactualiza „%1”. + + + + Save copy + Salvează o copie + + + + Could not save copy at '%1'. + NU am putut salva copia în „%1”. + + + + Save as + Salvează ca + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Nu s-a putut salva ca „%1”. + + + + Could not print '%1'. + Nuse poate tipări „%1” + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Sari la pagina + + + + Page: + Pagina: + + + + Jump to page %1 + Sari la pagina %1 + + + + About qpdfview + Despre qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview este un utilitar de vizualizat documente cu file care utilizează Qt.</p><p>Această versiune include:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Documentul „%1” a fost modificat. Vreți să salvați modificările? + + + + Page width + Lățime pagină + + + + Page size + Mărime pagină + + + + Match &case + Potrivește mărimea literelor + + + + Whole &words + + + + + Highlight &all + Evidențiază &tot + + + + &Open... + &Deschide... + + + + Open in new &tab... + Deschide în &filă nouă... + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + &Reactualizează + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Salvați c&a... + + + + Save &copy... + + + + + &Print... + Ti&părește... + + + + E&xit + Ieș&ire + + + + &Previous page + &Pagina anterioară + + + + &Next page + Pagi&na următoare + + + + &First page + Prima pa&gină + + + + &Last page + U&ltima pagină + + + + &Set first page... + + + + + &Jump to page... + &Sari la pagina... + + + + Jump &backward + &Sari înapoi + + + + Jump for&ward + Sari înai&nte + + + + &Search... + &Căutare... + + + + Find previous + Caută elementul anterior + + + + Find next + Caută elementul următor + + + + Cancel search + Anulează căutarea + + + + &Copy to clipboard + &Copiază în clipboard + + + + &Add annotation + &Adaugă notiță + + + + Settings... + Configurări... + + + + &Continuous + &Continuu + + + + &Two pages + Două pagini + + + + Two pages &with cover page + Două pagini și &coperta + + + + &Multiple pages + Pagini &multiple + + + + Right to left + De la dreapta spre stânga + + + + Zoom &in + &Mărire + + + + Zoom &out + Micș&orare + + + + Original &size + Mărime originală + + + + Fit to page width + Potrivire la lățimea paginii + + + + Fit to page size + Potrivire la mărimea paginii + + + + Rotate &left + Rotire &stânga + + + + Rotate &right + Rotire &dreapta + + + + Invert colors + Inversează culorile + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Fonturi... + + + + &Fullscreen + &Ecran complet + + + + &Presentation... + &Prezentare... + + + + &Previous tab + Fila &precedentă + + + + &Next tab + &Fila următoare + + + + &Close tab + În&chide fila + + + + Close &all tabs + Inchide &toate filele + + + + Close all tabs &but current tab + Închide toate filele în &afară de aceasta + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Semn de carte &precedent + + + + &Next bookmark + Semn de carte &următor + + + + &Add bookmark + &Adaugă semn de carte + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + Ște&rge semn de carte + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Șterge toate semnele de carte + + + + &Contents + &Cuprins + + + + &About + &Despre + + + + + &File + &Fișier + + + + + &Edit + &Editare + + + + + &View + &Vizualizare + + + + &Outline + &Cuprins + + + + &Properties + &Proprietăți + + + + &Search + &Caută + + + + &Tool bars + &Bare de unelte + + + + &Docks + &Bare andocabile + + + + &Tabs + Fi&le + + + + &Bookmarks + &Semne de carte + + + + &Help + &Ajutor + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Du-te la pagina %1. + + + + Go to page %1 of file '%2'. + Du-te la pagina %1 din fișierul „%2”. + + + + Open '%1'. + Deschide „%1”. + + + + Edit form field '%1'. + Editare formular „%1”. + + + + Copy &text + Copiere &text + + + + &Select text + + + + + Copy &image + Copiere &imagine + + + + Save image to &file... + Salvează imaginea în &fișier... + + + + Save image to file + Salvează imaginea în fișier + + + + Warning + Atenție + + + + Could not save image to file '%1'. + Nu s-a putut salva imaginea în fișierul „%1”. + + + + Add &text + Adaugă &text + + + + Add &highlight + Adaugă &evidențiere + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Ște&rge notiță + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiasing: + + + + Text antialiasing: + Antialiasing text: + + + + + None + Nimic + + + + Full + Complet + + + + Reduced + Redus + + + + + Text hinting: + Reliefare text: + + + + Ignore paper color: + + + + + Overprint preview: + Previziualizare suprapunere: + + + + Solid + Solid + + + + Shaped + Conturat + + + + Thin line mode: + Mod linie subțire: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Configurație: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + NU s-a găsit o potrivire pentru tipul de fișier „%1”! + + + + Critical + Critic + + + + Could not load plug-in for file type '%1'! + Nu s-a putut încărca extensia pentru tipul de fișier „%1”! + + + + qpdfview::PrintDialog + + + Fit to page: + Potrivire la pagină: + + + + Page ranges: + Șir pagini: + + + + All pages + Toate paginile + + + + Even pages + Pagini pare + + + + Odd pages + Pagini impare + + + + Page set: + Set pagini: + + + + Single page + O singură pagină + + + + Two pages + Două pagini + + + + Four pages + Patru pagini + + + + Six pages + Șase pagini + + + + Nine pages + Nouă pagini + + + + Sixteen pages + 16 pagini + + + + Number-up: + Numerotare: + + + + Bottom to top and left to right + De jos în sus și de la stânga la dreapta + + + + Bottom to top and right to left + De jos în sus și de la dreapta la stânga + + + + Left to right and bottom to top + De la stânga la dreapta și de jos în sus + + + + Left to right and top to bottom + De la stânga la dreapta și de sus în jos + + + + Right to left and bottom to top + De la dreapta la stânga și de jos în sus + + + + Right to left and top to bottom + De la dreapta la stânga și de sus în jos + + + + Top to bottom and left to right + De sus în jos și de la stânga la dreapta + + + + Top to bottom and right to left + De sus în jos și de la dreapta la stânga + + + + Number-up layout: + Aranjament numerotare: + + + + Extended options + Opțiuni extinse + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Biți antialias grafică: + + + + Text antialias bits: + Biți antialias text: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Închise &recent + + + + &Clear list + Șterge &lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Deschise &recent + + + + &Clear list + Șterge &lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Setări generale + + + + &Behavior + &Comportament + + + + &Graphics + &Grafică + + + + &Interface + &Interfață + + + + &Shortcuts + &Scurtături + + + + &Modifiers + &Modificatori + + + + Defaults + Implicit + + + + Defaults on current tab + Setări implicite în tabul curent + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Deschide URL: + + + + Auto-refresh: + Reîmprospătare automată: + + + + + + + + + + + + Effective after restart. + Se aplică după repornire. + + + + Track recently used: + Memorează documente deschise recent: + + + + Keep recently closed: + Păstrează documentele închise recent: + + + + Restore tabs: + Restaurare file: + + + + Restore bookmarks: + Restaurare semne de carte: + + + + Restore per-file settings: + Restabilire configurări pentru fiecare fișier: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Sincronizare prezentare: + + + + Default + Implicit + + + + Presentation screen: + Ecran prezentare: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Nimic + + + + Highlight duration: + Durată evidențiere: + + + + Highlight color: + Culoare evidențiere: + + + + Annotation color: + Culoare adnotări: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + „%1” este înlocuit(ă) de calea absolută către fișier. „%2” respectiv „%3” este înlocuit(ă) de un rând corespunzător numărului coloanei. + + + + Source editor: + Editor surse: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + Păstrează fișierele imagine învechite: + + + + Use device pixel ratio: + Utilizează proporție pixeli: + + + + Decorate pages: + Decorare pagini: + + + + Decorate links: + Decorare legături: + + + + Decorate form fields: + Decorare formulare: + + + + Background color: + Culoare fundal: + + + + Paper color: + Culoare hârtie: + + + + Presentation background color: + Culoare de fundal pentru prezentare: + + + + Pages per row: + Pagini per rând: + + + + + + px + + + + + Page spacing: + Spațiere pagină: + + + + Thumbnail spacing: + Spațiere miniaturi: + + + + Thumbnail size: + Dimensiune miniaturi: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + Mărime cache: + + + + Minimal scrolling: + + + + + Prefetch: + Preîncărcare: + + + + Prefetch distance: + Interval pre-încărcare: + + + + Top + Sus + + + + Bottom + Jos + + + + Left + Stânga + + + + Right + Dreapta + + + + Tab position: + Poziția filei: + + + + As needed + După necesitate + + + + Always + Întotdeauna + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Niciodată + + + + Settings + + + + + Tab visibility: + Vizibilitate file: + + + + Spread tabs: + Desfă filele: + + + + New tab next to current tab: + Tab nou lângă cel actual: + + + + Recently used count: + Numărătoare utilizată recent: + + + + Recently closed count: + Număr de fișiere închise recent: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Bară de unelte pentru fișiere: + + + + Edit tool bar: + Bara de unelte pentru editare: + + + + View tool bar: + Vizualizare bare de unelte: + + + + Use page label: + + + + + Document title as tab title: + Titlu document ca titlu de filă: + + + + Current page in window title: + Pagina curentă în titlul ferestrei: + + + + Instance name in window title: + Numele instanței în titlul ferestrei: + + + + Synchronize outline view: + Sincronizare vedere de ansamblu: + + + + Highlight current thumbnail: + Evidențiere pictogramă curentă: + + + + Limit thumbnails to results: + Limitare pictograme la rezultate: + + + + Annotation overlay: + Suprapunere adnotări: + + + + Form field overlay: + Suprapunere câmpuri pentru forme: + + + + Zoom: + Panoramare: + + + + Rotate: + Rotire: + + + + Scroll: + Derulare: + + + + Copy to clipboard: + Copiere în clipboard: + + + + Add annotation: + Adăugare adnotare: + + + + qpdfview::ShortcutHandler + + + Action + Acțiune + + + + Key sequence + Secvență taste + + + + Skip backward + Sari înapoi: + + + + Skip forward + Sari înainte: + + + + Move up + Sus + + + + Move down + Jos + + + + Move left + Stânga + + + + Move right + Dreapta + + + + qpdfview::TreeView + + + &Expand all + &Extinde tot + + + + &Collapse all + &Strânge tot + + + diff --git a/translations/qpdfview_ru.ts b/translations/qpdfview_ru.ts new file mode 100644 index 0000000..d42c64b --- /dev/null +++ b/translations/qpdfview_ru.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Изображение (%1) + + + + Size + Размер + + + + Resolution + Разрешение + + + + Depth + Глубина цвета + + + + + + + + + Format + Формат + + + + Monochrome + Чёрно-белое + + + + Indexed + Индексирован + + + + 32 bits RGB + 32 бит RGB + + + + 32 bits ARGB + 32 бит ARGB + + + + 16 bits RGB + 16 бит RGB + + + + 24 bits RGB + 24 бит RGB + + + + Model::PdfDocument + + + Linearized + Линеаризованный + + + + Name + Название + + + + Type + Тип + + + + Embedded + Встроенный + + + + Subset + Подмножество + + + + File + Файл + + + + + + + Yes + Да + + + + PDF version + Версия PDF + + + + Encrypted + Зашифрован + + + + + + + No + Нет + + + + Model::PdfPage + + + Information + Сведения + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Для добавления или удаления аннотаций требуется версия 0.20.1 (или выше) библиотеки Poppler. + + + + Model::PsDocument + + + Title + Название + + + + Created for + Создано для + + + + Creator + Создатель + + + + Creation date + Дата создания + + + + Format + Формат + + + + Language level + Уровень языка + + + + QObject + + + An empty instance name is not allowed. + Пустое имя экземпляра не допустимо. + + + + An empty search text is not allowed. + Пустая строка поиска недопустима + + + + Unknown command-line option '%1'. + Неизвестный параметр командной строки '%1'. + + + + Using '--instance' requires an instance name. + Использование '--instance' требует имени экземпляра. + + + + Using '--instance' is not allowed without using '--unique'. + Использование '--instance' не возможно без использования '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Название экземпляра может содержать только символы "[A-Z][a-z][0-9]_" и не начинаться с цифры. + + + + Using '--search' requires a search text. + Параметр '--search' требует введение текста для поиска. + + + + Could not prepare signal handler. + Не удалось подготовить обработчик сигнала. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift и Ctrl + + + + Shift and Alt + Shift и Alt + + + + Ctrl and Alt + Ctrl и Alt + + + + Right mouse button + Правая кнопка мыши + + + + Middle mouse button + Средняя кнопка мыши + + + + None + Нет + + + + qpdfview::BookmarkDialog + + + Bookmark + Закладка + + + + Page: + Страница: + + + + Label: + Метка: + + + + Comment: + Комментарий: + + + + Modified: + Изменён: + + + + qpdfview::BookmarkMenu + + + &Open + &Открыть… + + + + Open in new &tab + Открыть в новой &вкладке… + + + + &Remove bookmark + &Удалить закладку + + + + qpdfview::Database + + + Jump to page %1 + Перейти на страницу %1 + + + + qpdfview::DocumentView + + + + Information + Сведения + + + + The source editor has not been set. + Редактор исходного кода не задан. + + + + Opening URL is disabled in the settings. + Открытие адреса запрещено в настройках. + + + + Warning + Внимание + + + + + SyncTeX data for '%1' could not be found. + Не найдены данные SyncTeX для '%1'. + + + + Printing '%1'... + Печать '%1'… + + + + Unlock %1 + Разблокировать %1 + + + + Password: + Пароль: + + + + Page %1 + Страница %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Сохранить... + + + + Save and open... + Сохранить и открыть... + + + + Save file attachment + Сохранить вложение + + + + + Warning + Предупреждение + + + + Could not open file attachment saved to '%1'. + Невозможно открыть вложение, сохраненное в '%1'. + + + + Could not save file attachment to '%1'. + Не могу сохранить вложение в '%1' + + + + qpdfview::FontsDialog + + + Fonts + Шрифты + + + + qpdfview::HelpDialog + + + Help + Справка + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_ru.html + + + + Find previous + Найти предыдущее + + + + Find next + Найти далее + + + + qpdfview::MainWindow + + + &Set first page... + &Установить первую страницу… + + + + Toggle tool bars + Переключить панели инструментов + + + + Toggle menu bar + Переключение меню + + + + + + + + + + + + + + Warning + Предупреждение + + + + + Could not open '%1'. + Не удалось открыть '%1' + + + + Copy file path + Копировать путь к файлу + + + + Select file path + Выберите путь к файлу + + + + Close all tabs + Закрыть все вкладки + + + + Close all tabs but this one + Закрыть другие вкладки + + + + Close all tabs to the left + Закрыть вкладки слева + + + + Close all tabs to the right + Закрыть вкладки справа + + + + + Open + Открыть + + + + Open in new tab + Открыть в новой вкладке + + + + + + Could not refresh '%1'. + Не удалось обновить '%1' + + + + Save copy + Сохранить копию + + + + Could not save copy at '%1'. + Не удалось сохранить копию в '%1' + + + + Save as + Сохранить как + + + + + Move to instance + Переместить в + + + + + Failed to access instance '%1'. + Не получилось открыть файл '%1'. + + + + + + Could not save as '%1'. + Не удалось сохранить как '%1'. + + + + Could not print '%1'. + Не удалось напечатать '%1' + + + + Set first page + Установить первую страницу + + + + Select the first page of the body matter: + Выберите первую страницу содержимого: + + + + Jump to page + Переход на страницу + + + + Page: + Страница: + + + + Jump to page %1 + Перейти на страницу %1 + + + + About qpdfview + О программе qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview — просмотрщик документов со вкладками, использующий Qt.</p><p>В этой версии:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Поддержка PDF с помощью Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Поддержка PS с помощью libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Поддержка DjVu с помощью DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Поддержка PDF с помощью Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Поддержка печати с помощью CUPS %1</li> + + + + &Edit bookmark + &Редактировать закладку + + + + The document '%1' has been modified. Do you want to save your changes? + Документ '%1' был изменён. Сохранить изменения? + + + + Page width + По ширине страницы + + + + Page size + Страница целиком + + + + Match &case + С уч&ётом регистра + + + + Whole &words + Слова &целиком + + + + Highlight &all + Выделить &все + + + + &Open... + &Открыть… + + + + Open in new &tab... + Открыть в новой &вкладке… + + + + Open &copy in new tab + Открыть &копию в новой вкладке + + + + Move to &instance... + Переместить в... + + + + &Refresh + О&бновить + + + + Information + Информация + + + + Instance-to-instance communication requires D-Bus support. + Сообщение между экземплярами приложения требует поддержки D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Смотри <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> для получения дополнительной информации. </p><p>&copy; %1 Разработчики qpdfview</p> + + + + Save &as... + Со&хранить как... + + + + Save &copy... + Сохранить &скопировать... + + + + &Print... + Пе&чать… + + + + E&xit + &Выход + + + + &Previous page + &Предыдущая страница + + + + &Next page + &Следующая страница + + + + &First page + П&ервая страница + + + + &Last page + После&дняя страница + + + + &Jump to page... + Пе&рейти к странице… + + + + Jump &backward + Назад + + + + Jump for&ward + Вперёд + + + + &Search... + П&оиск… + + + + Find previous + Найти предыдущее + + + + Find next + Найти следующее + + + + Cancel search + Отменить поиск + + + + &Copy to clipboard + &Скопировать в буфер + + + + &Add annotation + Добавить &комментарий + + + + Settings... + Настройки… + + + + &Continuous + &Рулоном + + + + &Two pages + &Две страницы + + + + Two pages &with cover page + Две страницы и &обложка + + + + &Multiple pages + &Несколько страниц + + + + Right to left + Справа налево + + + + Zoom &in + У&величить + + + + Zoom &out + У&меньшить + + + + Original &size + &Исходный размер + + + + Fit to page width + По ширине + + + + Fit to page size + Страница целиком + + + + Rotate &left + Повернуть в&лево + + + + Rotate &right + Повернуть в&право + + + + Invert colors + Инвертировать цвета + + + + Convert to grayscale + Конвертировать в серые тона + + + + Trim margins + Обрезать поля + + + + Darken with paper color + Темнее цвета бумаги + + + + Lighten with paper color + Светлее цвета бумаги + + + + Fonts... + Шрифты… + + + + &Fullscreen + Полный &экран + + + + &Presentation... + Пре&зентация + + + + &Previous tab + &Предыдущая вкладка + + + + &Next tab + &Следующая вкладка + + + + &Close tab + &Закрыть вкладку + + + + Close &all tabs + Закрыть &все вкладки + + + + Close all tabs &but current tab + Закрыть все вкладки, кроме текуще&й + + + + Restore &most recently closed tab + Открыть &закрытую вкладку + + + + &Previous bookmark + &Предыдущая закладка + + + + &Next bookmark + &Следующая закладка + + + + &Add bookmark + Д&обавить закладку + + + + Open copy in new &window + Открыть копию в новом окне + + + + Split view horizontally... + Разделить окно по горизонтали… + + + + Split view vertically... + Разделить окно по вертикали… + + + + Close current view + Закрыть текущий вид + + + + Thumb&nails + &Миниатюры + + + + Book&marks + &Закладки + + + + Composition + Построение + + + + + &Remove bookmark + &Удалить закладку + + + + Edit '%1' at %2,%3... + Правка '%1' в %2,%3... + + + + Open containing &folder + Открыть содержащую &папку + + + + &Save + &Сохранить + + + + Remove all bookmarks + Удалить все закладки + + + + &Contents + &Содержание + + + + &About + &О программе + + + + + &File + &Файл + + + + + &Edit + П&равка + + + + + &View + В&ид + + + + &Outline + &Оглавление + + + + &Properties + С&войства + + + + &Search + &Поиск + + + + &Tool bars + Панели инс&трументов + + + + &Docks + Прилип&алы + + + + &Tabs + Вкла&дки + + + + &Bookmarks + &Закладки + + + + &Help + &Справка + + + + + Choose instance + Выберите файл + + + + + Instance: + Файл: + + + + qpdfview::PageItem + + + Go to page %1. + Перейти к странице %1. + + + + Go to page %1 of file '%2'. + Перейти на страницу %1 файла '%2'. + + + + Open '%1'. + Открыть '%1'. + + + + Edit form field '%1'. + Редактировать поле формы '%1'. + + + + Copy &text + &Копировать текст + + + + &Select text + &Выделить текст + + + + Copy &image + Копировать и&зображение + + + + Save image to &file... + Сохранить изображение в &файл… + + + + Save image to file + Сохранить изображение в файл + + + + Warning + Предупреждение + + + + Could not save image to file '%1'. + Невозможно сохранить изображение в файл '%1'. + + + + Add &text + Добавить &текст + + + + Add &highlight + Добавить &выделение + + + + &Copy link address + &Копировать адрес ссылки + + + + &Select link address + &Выбрать адрес ссылки + + + + &Remove annotation + &Удалить комментарий + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Сглаживание: + + + + Text antialiasing: + Сглаживание текста: + + + + + None + Нет + + + + Full + Полное + + + + Reduced + Укороченный + + + + + Text hinting: + Хинтинг текста: + + + + Ignore paper color: + Игнорировать цвет бумаги: + + + + Overprint preview: + Предпросмотр надпечатки: + + + + Solid + Цельный + + + + Shaped + Формовый + + + + Thin line mode: + Режим тонкой линии: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Бэкенд: + + + + qpdfview::PluginHandler + + + Image (%1) + Изображение (%1) + + + + Compressed (%1) + Сжатый (%1) + + + + Supported formats (%1) + Поддерживаемые форматы (%1) + + + + Could not decompress '%1'! + Невозможно разжать '%1'! + + + + Could not match file type of '%1'! + Не соответствует типу файла «%1»! + + + + Critical + Критический + + + + Could not load plug-in for file type '%1'! + Не удалось загрузить плагин для типа файла «%1»! + + + + qpdfview::PrintDialog + + + Fit to page: + Уместить в страницу + + + + Page ranges: + Диапазон страниц: + + + + All pages + Все страницы + + + + Even pages + Чётные страницы + + + + Odd pages + Нечётные страницы + + + + Page set: + Печатать страницы: + + + + Single page + Одна страница + + + + Two pages + 2 траницы + + + + Four pages + 4 страницы + + + + Six pages + 6 страниц + + + + Nine pages + 9 страниц + + + + Sixteen pages + Шестнадцать страниц + + + + Number-up: + Номером вверх + + + + Bottom to top and left to right + Снизу вверх и слева направо + + + + Bottom to top and right to left + Снизу вверх и справа налево + + + + Left to right and bottom to top + Слева направо и снизу вверх + + + + Left to right and top to bottom + Слева направо и сверху вниз + + + + Right to left and bottom to top + Справа налево и снизу вверх + + + + Right to left and top to bottom + Справа налево и сверху вниз + + + + Top to bottom and left to right + Сверху вниз и слева направо + + + + Top to bottom and right to left + Сверху вниз и справа налево + + + + Number-up layout: + Порядок страниц + + + + Extended options + Дополнительные параметры + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Биты сглаживания графики: + + + + Text antialias bits: + Биты сглаживания текста: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Недавно &закрытые + + + + &Clear list + О&чистить список + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Не&давно открытые + + + + &Clear list + О&чистить список + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> совпадений + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> совпадений на странице <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Поиск '%1'... + + + + qpdfview::SettingsDialog + + + General + Общие + + + + &Behavior + &Поведение + + + + &Graphics + &Графика + + + + &Interface + &Интерфейс + + + + &Shortcuts + &Комбинации клавиш + + + + &Modifiers + &Модификаторы + + + + Defaults + По умолчанию + + + + Defaults on current tab + По умолчанию на текущей вкладке + + + + Mouse wheel modifiers + Модификаторы колёсика мыши + + + + Mouse button modifiers + Модификаторы кнопок мыши + + + + Open URL: + Открыть адрес: + + + + Auto-refresh: + Автообновление: + + + + + + + + + + + + Effective after restart. + Вступит в силу после перезапуска + + + + Track recently used: + Отслеживать недавно открытые: + + + + Keep recently closed: + Помнить недавно закрытые: + + + + Restore tabs: + Восстановить вкладки: + + + + Restore bookmarks: + Восстановить закладки: + + + + Restore per-file settings: + Восстановление пофайловых настроек: + + + + min + мин + + + + Save database interval: + Интервал сохранения базы данных: + + + + Synchronize presentation: + Синхронная презентация: + + + + Default + По умолчанию + + + + Presentation screen: + Экран презентации: + + + + Synchronize split views: + Синхронизировать разделенные окна + + + + Zoom factor: + Коэффициент масштабирования: + + + + Parallel search execution: + Распараллеливание поиска: + + + + ms + мс + + + + None + Нет + + + + Highlight duration: + Длительность подсветки: + + + + Highlight color: + Цвет выделения: + + + + Annotation color: + Цвет аннотаций: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' заменяется абсолютным путём к файлу. '%2' и '%3' заменяются номером строки и столбца соответственно. + + + + Source editor: + Редактор исходника: + + + + Use tiling: + Использовать тайлинг: + + + + Keep obsolete pixmaps: + Запоминать устаревшие растровые изображения: + + + + Use device pixel ratio: + Использовать разрешение устройства + + + + Decorate pages: + Рамка страницы: + + + + Decorate links: + Выделять ссылки: + + + + Decorate form fields: + Выделять поля форм: + + + + Background color: + Цвет фона: + + + + Paper color: + Цвет бумаги: + + + + Presentation background color: + Цвет фона презентации: + + + + Pages per row: + Страниц в ряд: + + + + + + px + px + + + + Page spacing: + Расстояние между страницами: + + + + Thumbnail spacing: + Расстояние между миниатюрами: + + + + Thumbnail size: + Размер миниатюр: + + + + Fit to viewport + По области просмотра + + + + Document context menu: + Контекстное меню документа: + + + + Tab context menu: + Контекстное меню вкладки: + + + + Open in source editor: + Открыть в редакторе: + + + + + %1 MB + %1 MБ + + + + Cache size: + Размер кэша: + + + + Minimal scrolling: + Минимизация прокрутки: + + + + Prefetch: + Подгружать наперёд: + + + + Prefetch distance: + Длина предзагрузки: + + + + Top + Вверху + + + + Bottom + Внизу + + + + Left + Слева + + + + Right + Справа + + + + Tab position: + Положение вкладок: + + + + As needed + По надобности + + + + Always + Всегда + + + + Exit after last tab: + Выход при закрытии последней вкладки: + + + + Scrollable menus: + Меню с прокруткой: + + + + Searchable menus: + Поиск в меню: + + + + Zoom to selection: + Масштаб по выделению: + + + + + Never + Никогда + + + + Settings + Настройки + + + + Tab visibility: + Видимость вкладок: + + + + Spread tabs: + Растянуть вкладки: + + + + New tab next to current tab: + Новая вкладка рядом с текущей вкладкой: + + + + Recently used count: + Недавно использованные: + + + + Recently closed count: + Недавно закрытые: + + + + Extended search dock: + Расширенная панель поиска: + + + + Toggle tool and menu bars with fullscreen: + Скрывать инструменты и меню в полноэкранном режиме: + + + + File tool bar: + Панель "Файл": + + + + Edit tool bar: + Панель "Правка": + + + + View tool bar: + Панель "Вид": + + + + Use page label: + Использовать метку страницы: + + + + Document title as tab title: + Название документа как название вкладки: + + + + Current page in window title: + Текущая страница в заголовке окна: + + + + Instance name in window title: + Имя экземпляра в заголовке окна: + + + + Synchronize outline view: + Синхронизация в режиме структуры: + + + + Highlight current thumbnail: + Выделять текущий эскиз: + + + + Limit thumbnails to results: + Ограничивать показ миниатюр при поиске: + + + + Annotation overlay: + Наложение аннотации: + + + + Form field overlay: + Наложение полей формы: + + + + Zoom: + Масштаб: + + + + Rotate: + Поворот: + + + + Scroll: + Прокрутка: + + + + Copy to clipboard: + Скопировать в буфер обмена: + + + + Add annotation: + Добавить примечание: + + + + qpdfview::ShortcutHandler + + + Action + Действие + + + + Key sequence + Последовательность клавиш + + + + Skip backward + Назад + + + + Skip forward + Вперёд + + + + Move up + Переместить вверх + + + + Move down + Переместить вниз + + + + Move left + Переместить влево + + + + Move right + Переместить вправо + + + + qpdfview::TreeView + + + &Expand all + &Развернуть все + + + + &Collapse all + &Свернуть все + + + diff --git a/translations/qpdfview_sk.ts b/translations/qpdfview_sk.ts new file mode 100644 index 0000000..b5bc1d8 --- /dev/null +++ b/translations/qpdfview_sk.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Obrázok (%1) + + + + Size + Veľkosť + + + + Resolution + Rozlíšenie + + + + Depth + Hĺbka + + + + + + + + + Format + Formát + + + + Monochrome + Čiernobiely + + + + Indexed + Indexovaný + + + + 32 bits RGB + 32 bitový RGB + + + + 32 bits ARGB + 32 bitový ARGB + + + + 16 bits RGB + 16 bitový RGB + + + + 24 bits RGB + 24 bitový RGB + + + + Model::PdfDocument + + + Linearized + Linearizované + + + + Name + Názov + + + + Type + Typ + + + + Embedded + Zabudované + + + + Subset + Podmnožina + + + + File + Súbor + + + + + + + Yes + Áno + + + + PDF version + PDF verzia + + + + Encrypted + Šifrované + + + + + + + No + Nie + + + + Model::PdfPage + + + Information + Informácie + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Na vkladanie a odstraňovanie komentárov je vyžadovaná knižnica Poppler vo verzie 0.20.1 alebo vyššej. + + + + Model::PsDocument + + + Title + Názov + + + + Created for + Vytvorené pre + + + + Creator + Vytvoril + + + + Creation date + Dátum vytvorenia + + + + Format + Formát + + + + Language level + Úroveň jazyka + + + + QObject + + + An empty instance name is not allowed. + Prázdny názov inštancie nie je povolený. + + + + An empty search text is not allowed. + Prázdny text na vyhľadanie nie je povolený. + + + + Unknown command-line option '%1'. + Neznámy parameter príkazového riadka '%1'. + + + + Using '--instance' requires an instance name. + Použitie '--instance' vyžaduje názov inštancie. + + + + Using '--instance' is not allowed without using '--unique'. + Použitie '--instance' nieje povolené bez použitia '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Názov inštancie môže obsahovať iba znaky "[A-Z][a-z][0-9]_" a nesmie začínať číslom. + + + + Using '--search' requires a search text. + Použitie '--search' vyžaduje text na vyhľadanie. + + + + Could not prepare signal handler. + Nepodarilo se pripraviť obsluhovanie signálu. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift a Ctrl + + + + Shift and Alt + Shift a Alt + + + + Ctrl and Alt + Ctrl a Alt + + + + Right mouse button + Pravé tlačidlo myši + + + + Middle mouse button + Stredné tlačidlo myši + + + + None + Žiadne + + + + qpdfview::BookmarkDialog + + + Bookmark + Záložka + + + + Page: + Strana: + + + + Label: + Popis: + + + + Comment: + Komentár: + + + + Modified: + Zmenené: + + + + qpdfview::BookmarkMenu + + + &Open + &Otvoriť + + + + Open in new &tab + Otvoriť na novej kar&te + + + + &Remove bookmark + Odst&rániť záložku + + + + qpdfview::Database + + + Jump to page %1 + Prejsť na stranu %1 + + + + qpdfview::DocumentView + + + + Information + Informácie + + + + The source editor has not been set. + Editor zdrojového textu nebol nastavený. + + + + Opening URL is disabled in the settings. + Otvorenie URL adresy je v nastaveniach zakázané. + + + + Warning + Varovanie + + + + + SyncTeX data for '%1' could not be found. + SyncTeX dáta pre '%1' sa nedali nájsť. + + + + Printing '%1'... + Tlačí sa '%1'... + + + + Unlock %1 + Odomknúť %1 + + + + Password: + Heslo: + + + + Page %1 + Strana %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Uložiť... + + + + Save and open... + Uložiť a otvoriť... + + + + Save file attachment + Uložiť prílohu súboru + + + + + Warning + Varovanie + + + + Could not open file attachment saved to '%1'. + Nepodarilo sa otvoriť prílohu súboru uloženú do '%1'. + + + + Could not save file attachment to '%1'. + Nepodarilo sa uložiť prílohu súboru do '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Písma + + + + qpdfview::HelpDialog + + + Help + Nápoveda + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_sk.html + + + + Find previous + Nájsť predchádzajúce + + + + Find next + Nájsť ďalšie + + + + qpdfview::MainWindow + + + Toggle tool bars + Prepínať panely nástrojov + + + + Toggle menu bar + Prepínať panel menu + + + + + + + + + + + + + + Warning + Varovanie + + + + + Could not open '%1'. + Nedalo sa otvoríť '%1'. + + + + Copy file path + Kopírovať cestu súboru + + + + Select file path + Vybrať cestu súboru + + + + Close all tabs + Zatvoriť všetky karty + + + + Close all tabs but this one + Zatvoriť všetky karty okrem tejto + + + + Close all tabs to the left + Zatvoriť všetky karty naľavo + + + + Close all tabs to the right + Zatvoriť všetky karty napravo + + + + + Open + Otvoriť + + + + Open in new tab + Otvoriť na novej karte + + + + + + Could not refresh '%1'. + Nepodarilo se obnoviť '%1'. + + + + Save copy + Uložiť kópiu + + + + Could not save copy at '%1'. + Nepodarilo se uložiť kópiu v '%1'. + + + + Save as + Uložiť ako + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Nepodarilo sa uložiť ako '%1'. + + + + Could not print '%1'. + Nepodarilo sa vytlačiť '%1'. + + + + Set first page + Nastaviť prvú stranu + + + + Select the first page of the body matter: + Vybrať prvú stranu + + + + Jump to page + Prejsť na stranu + + + + Page: + Strana: + + + + Jump to page %1 + Prejsť na stranu %1 + + + + About qpdfview + O qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview je prehliadač dokumentov na kartách používajúci Qt.</p><p>Táto verzia obsahuje:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF podpora používajúca Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PostScript podpora používajúca libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu podpora používajúca DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF podpora používajúca Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Podpora tlače používajúca CUPS %1</li> + + + + &Edit bookmark + &Upraviť záložku + + + + The document '%1' has been modified. Do you want to save your changes? + Dokument '%1' bol zmenený. Chcete uložiť vaše zmeny? + + + + Page width + Šírka strany + + + + Page size + Veľkosť strany + + + + Match &case + Zhoda malý&ch a veľkých písmen + + + + Whole &words + Celá &slová + + + + Highlight &all + Zvýr&azniť všetko + + + + &Open... + &Otvoriť... + + + + Open in new &tab... + Otvoriť na novej &karte... + + + + Open &copy in new tab + Otvoriť &kópiu na novej karte + + + + Move to &instance... + + + + + &Refresh + O&bnoviť + + + + Information + Informácie + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Uložiť &ako... + + + + Save &copy... + + + + + &Print... + &Tlačiť... + + + + E&xit + U&končiť + + + + &Previous page + &Predchádzajúca strana + + + + &Next page + &Nasledujúca strana + + + + &First page + P&rvá strana + + + + &Last page + Pos&ledná strana + + + + &Set first page... + &Nastaviť prvú stranu... + + + + &Jump to page... + Pre&jsť na stranu... + + + + Jump &backward + Prejsť &späť + + + + Jump for&ward + Prejsť &dopredu + + + + &Search... + &Hľadať... + + + + Find previous + Nájsť predchádzajúce + + + + Find next + Nájsť ďalšie + + + + Cancel search + Zrušiť hľadanie + + + + &Copy to clipboard + &Kopírovať do schránky + + + + &Add annotation + Prid&ať komentár + + + + Settings... + Nastavenia... + + + + &Continuous + &Súvislo + + + + &Two pages + &Dve strany + + + + Two pages &with cover page + Dve strany s &titulnou stranou + + + + &Multiple pages + Viac&eré strany + + + + Right to left + Sprava doľava + + + + Zoom &in + Priblíž&iť + + + + Zoom &out + &Odialiť + + + + Original &size + Pôvodná &veľkosť + + + + Fit to page width + Prispôsobiť šírku strany + + + + Fit to page size + Prispôsobiť veľkosť strany + + + + Rotate &left + Otočiť doľ&ava + + + + Rotate &right + Otočiť dop&rava + + + + Invert colors + Invertovať farby + + + + Convert to grayscale + Konvertovať do odtieňov šedej + + + + Trim margins + Orezať okraje + + + + Darken with paper color + Stmaviť s farbou papiera + + + + Lighten with paper color + Zosvetliť s farbou papiera + + + + Fonts... + Písma... + + + + &Fullscreen + &Celá obrazovka + + + + &Presentation... + &Prezentácia... + + + + &Previous tab + &Predchádzajúca karta + + + + &Next tab + &Nasledujúca karta + + + + &Close tab + &Zatvoriť kartu + + + + Close &all tabs + Z&atvoriť všetky karty + + + + Close all tabs &but current tab + Zatvoriť všetky karty &okrem súčasnej + + + + Restore &most recently closed tab + Obnoviť &naposledy zatvorenú kartu + + + + &Previous bookmark + &Predchádzajúca záložka + + + + &Next bookmark + &Nasledujúca záložka + + + + &Add bookmark + Prid&ať záložku + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + &Náhľady + + + + Book&marks + &Záložky + + + + Composition + Kompozícia + + + + + &Remove bookmark + Odst&rániť záložku + + + + Edit '%1' at %2,%3... + Upraviť '%1' z %2,%3... + + + + Open containing &folder + Otvoriť obsahujúci &priečinok + + + + &Save + + + + + Remove all bookmarks + Odstrániť všetky záložky + + + + &Contents + Pomo&cník + + + + &About + O &programe + + + + + &File + &Súbor + + + + + &Edit + &Upraviť + + + + + &View + &Zobraziť + + + + &Outline + &Obsah + + + + &Properties + &Vlastnosti + + + + &Search + &Hľadať + + + + &Tool bars + Panely &nástrojov + + + + &Docks + &Bočné panely + + + + &Tabs + Kar&ty + + + + &Bookmarks + Zá&ložky + + + + &Help + &Nápoveda + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Prejsť na stranu %1. + + + + Go to page %1 of file '%2'. + Prejsť na stranu %1 súboru '%2'. + + + + Open '%1'. + Otvoriť '%1'. + + + + Edit form field '%1'. + Upraviť políčko formulára '%1'. + + + + Copy &text + Kopírovať &text + + + + &Select text + &Vybrať text + + + + Copy &image + Kopírovať &obrázok + + + + Save image to &file... + Uložiť obrázok so &súboru... + + + + Save image to file + Uložiť obrázok do súboru + + + + Warning + Varovanie + + + + Could not save image to file '%1'. + Obrázok sa nemohol uložiť do súboru '%1'. + + + + Add &text + Pridať &text + + + + Add &highlight + Pridať &zvýraznenie + + + + &Copy link address + &Kopírovať adresu odkazu + + + + &Select link address + &Vybrať adresu odkazu + + + + &Remove annotation + Odst&rániť komentár + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Vyhladzovanie: + + + + Text antialiasing: + Vyhlazovanie textu: + + + + + None + Žiadne + + + + Full + Úplné + + + + Reduced + Čiastočné + + + + + Text hinting: + Hinting textu: + + + + Ignore paper color: + Ignorovať farbu papiera: + + + + Overprint preview: + Náhľad pretlače: + + + + Solid + Pevné + + + + Shaped + Ohraničený + + + + Thin line mode: + Režim tenkej čiary: + + + + Splash + Úvodná obrazovka + + + + Arthur + Arthur + + + + Backend: + Backend: + + + + qpdfview::PluginHandler + + + Image (%1) + Obrázok (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Podporované formáty (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Nepodarilo sa porovnať typ súboru '%1'! + + + + Critical + Kritické + + + + Could not load plug-in for file type '%1'! + Nepodarilo sa načítať plugin pre súbory typu '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Prispôsobiť strane: + + + + Page ranges: + Rozsah strán: + + + + All pages + Všetky strany + + + + Even pages + Párne strany + + + + Odd pages + Nepárne strany + + + + Page set: + Súbor strán: + + + + Single page + Jedna strana + + + + Two pages + Dve strany + + + + Four pages + Štyri strany + + + + Six pages + Šesť strán + + + + Nine pages + Deväť strán + + + + Sixteen pages + Šestnásť strán + + + + Number-up: + Na jednu stranu: + + + + Bottom to top and left to right + Zdola hore a zľava doprava + + + + Bottom to top and right to left + Zdola hore a zprava doľava + + + + Left to right and bottom to top + Zľava doprava a zdola hore + + + + Left to right and top to bottom + Zľava doprava a zhora dolu + + + + Right to left and bottom to top + Zprava doľava a zdola hore + + + + Right to left and top to bottom + Zprava doľava a zhora dolu + + + + Top to bottom and left to right + Zhora dolu a zľava doprava + + + + Top to bottom and right to left + Zhora dolu a zprava doľava + + + + Number-up layout: + Rozloženie na strane: + + + + Extended options + Pokročilé možnosti + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Bity vyhladzovania grafiky: + + + + Text antialias bits: + Bity vyhladzovania textu: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Nedávno zatvo&rené + + + + &Clear list + &Vyčistiť zoznam + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Nedávno ot&vorené + + + + &Clear list + &Vyčistiť zoznam + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> výskytov + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> výskytov na strane <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Hľadať '%1'... + + + + qpdfview::SettingsDialog + + + General + Všeobecné + + + + &Behavior + &Správanie + + + + &Graphics + &Grafika + + + + &Interface + Rozhran&ie + + + + &Shortcuts + &Skratky + + + + &Modifiers + &Modifikátory + + + + Defaults + Predvolené + + + + Defaults on current tab + Východzie na aktuálnej karte + + + + Mouse wheel modifiers + Modifikátory kolieska myši + + + + Mouse button modifiers + Modifikátory tlačítka myši + + + + Open URL: + Otvárať URL adresy: + + + + Auto-refresh: + Obnoviť automaticky: + + + + + + + + + + + + Effective after restart. + Aplikuje sa po reštarte programu. + + + + Track recently used: + Zaznamenávať nedávno otvorené: + + + + Keep recently closed: + Ponechať nedávno zatvorené: + + + + Restore tabs: + Obnoviť karty: + + + + Restore bookmarks: + Obnoviť záložky: + + + + Restore per-file settings: + Obnoviť nastavenie súboru: + + + + min + min + + + + Save database interval: + Interval ukladania databáze: + + + + Synchronize presentation: + Synchronizovať prezentovanie: + + + + Default + Predvolené + + + + Presentation screen: + Obrazovka prezentovania: + + + + Synchronize split views: + + + + + Zoom factor: + Koeficient zväčšovania: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Nič + + + + Highlight duration: + Trvanie zvýraznenia: + + + + Highlight color: + Farba zvýraznenia: + + + + Annotation color: + Farba poznámky: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' je nahradené absolútnou cestou k súboru. '%2' resp. '%3' je nahradené číslom radku resp. stĺpca. + + + + Source editor: + Editor zdrojov: + + + + Use tiling: + Použiť dlaždicové zobrazenie: + + + + Keep obsolete pixmaps: + Zachovať zastaralé pixmapy: + + + + Use device pixel ratio: + Použiť pomer obrazovky zariadenia: + + + + Decorate pages: + Orámovať strany: + + + + Decorate links: + Orámovať odkazy: + + + + Decorate form fields: + Orámovať políčka formulára: + + + + Background color: + Farba pozadia: + + + + Paper color: + Farba papiera: + + + + Presentation background color: + Farba pozadia prezentácie: + + + + Pages per row: + Strán na riadok + + + + + + px + px + + + + Page spacing: + Odstup strán: + + + + Thumbnail spacing: + Odstup miniatúr: + + + + Thumbnail size: + Veľkosť miniatúr: + + + + Fit to viewport + Prispôsobiť oblasti pohľadu + + + + Document context menu: + Kontextové menu dokumentu: + + + + Tab context menu: + Kontextové menu karty + + + + Open in source editor: + Otvoriť v editore zdrojových kódov: + + + + + %1 MB + %1 MiB + + + + Cache size: + Veľkosť vyrovnávacej pamäte: + + + + Minimal scrolling: + Minimálne skrolovanie: + + + + Prefetch: + Načítavať dopredu: + + + + Prefetch distance: + Vzdialenosť predprípravy: + + + + Top + Hore + + + + Bottom + Dole + + + + Left + Vľavo + + + + Right + Vpravo + + + + Tab position: + Pozícia kariet: + + + + As needed + Podľa potreby + + + + Always + Vždy + + + + Exit after last tab: + Ukončiť po poslednej karte: + + + + Scrollable menus: + Skrolovacie menu: + + + + Searchable menus: + Prohľadávateľné menu: + + + + Zoom to selection: + Priblížiť výber + + + + + Never + Nikdy + + + + Settings + Nastavenia + + + + Tab visibility: + Viditeľnosť kariet: + + + + Spread tabs: + Roztiahnuť karty: + + + + New tab next to current tab: + Nová karta vedľa aktuálnej karty: + + + + Recently used count: + Počet nedávno použitých: + + + + Recently closed count: + Počet nedávno zatvorených: + + + + Extended search dock: + Rozšírený panel hľadania: + + + + Toggle tool and menu bars with fullscreen: + Prepínať panely nástrojov a panel menu pri zobrazení na celú obrazovku + + + + File tool bar: + Panel nástrojov pre Súbor: + + + + Edit tool bar: + Panel nástrojov pre Upraviť: + + + + View tool bar: + Panel nástrojov pre Zobraziť: + + + + Use page label: + Použiť popis strany: + + + + Document title as tab title: + Názov dokumentu ako titulok karty: + + + + Current page in window title: + Aktuálna strana v názve okna: + + + + Instance name in window title: + Názov inštancie v názve okna: + + + + Synchronize outline view: + Synchronizovať zobrazenie obsahu: + + + + Highlight current thumbnail: + Zvýrazniť aktuálny náhľad: + + + + Limit thumbnails to results: + Obmedziť náhľady pre výsledky: + + + + Annotation overlay: + Prekrytie poznámky: + + + + Form field overlay: + Prekrytie formulárového políčka: + + + + Zoom: + Priblíženie: + + + + Rotate: + Otočenie: + + + + Scroll: + Skrolovanie: + + + + Copy to clipboard: + Skopírovať do schránky: + + + + Add annotation: + Pridať komentár: + + + + qpdfview::ShortcutHandler + + + Action + Činnosť + + + + Key sequence + Klávesová skratka + + + + Skip backward + Preskočiť dozadu + + + + Skip forward + Preskočiť dopredu + + + + Move up + Posunúť vyššie + + + + Move down + Posunúť nižšie + + + + Move left + Posunúť doľava + + + + Move right + Posunúť doprava + + + + qpdfview::TreeView + + + &Expand all + &Rozbaliť všetko + + + + &Collapse all + &Zbaliť všetko + + + diff --git a/translations/qpdfview_sr.ts b/translations/qpdfview_sr.ts new file mode 100644 index 0000000..19c2b58 --- /dev/null +++ b/translations/qpdfview_sr.ts @@ -0,0 +1,2001 @@ + + + + Serbian <sr@li.org> + Саша Петровић <salepetronije@gmail.com> + 2016-03-10 13:41+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Serbian translation for qpdfview +# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2015. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + Слика (%1) + + + + Size + Величина + + + + Resolution + Размера + + + + Depth + Дубина + + + + + + + + + Format + Облик + + + + Monochrome + Једнобојно + + + + Indexed + Индексирано + + + + 32 bits RGB + 32 бита РГБ-а + + + + 32 bits ARGB + 32 бита АРГБ-а + + + + 16 bits RGB + 16 бита РГБ-а + + + + 24 bits RGB + 24 бита РГБ-а + + + + Model::PdfDocument + + + Linearized + Линеарно + + + + Name + Назив + + + + Type + Врста + + + + Embedded + Угнежђен + + + + Subset + Подскуп + + + + File + Датотека + + + + + + + Yes + Да + + + + PDF version + Издање ПДФ-а + + + + Encrypted + Шифровано + + + + + + + No + Не + + + + Model::PdfPage + + + Information + Обавештење + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Издање 0.20.1 или новија библиотеке Поплер је потребна за додавање или уклањање напомена. + + + + Model::PsDocument + + + Title + Наслов + + + + Created for + Направљено за + + + + Creator + Стваралац + + + + Creation date + Дан израде + + + + Format + Облик + + + + Language level + Језички ниво + + + + QObject + + + An empty instance name is not allowed. + Празна ставка имена није допуштена. + + + + An empty search text is not allowed. + Празно поље претраге текста није дозвољено. + + + + Unknown command-line option '%1'. + Непозната опција командне-линије '%1'. + + + + Using '--instance' requires an instance name. + Коришћење '--instance' захтева име инстанце. + + + + Using '--instance' is not allowed without using '--unique'. + Коришћење '--instance' није дозвољено без употребе '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Име инстанце може садржати само карактере "[A-Z][a-z][0-9]_" и не сме почињати бројем. + + + + Using '--search' requires a search text. + Коришћење '--search' захтева текст за претрагу. + + + + Could not prepare signal handler. + Неуспешна припрема сигнала управљања. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift и Ctrl + + + + Shift and Alt + Shift и Alt + + + + Ctrl and Alt + Ctrl и Alt + + + + Right mouse button + Десно дугме миша + + + + Middle mouse button + Средње дугме миша + + + + None + Ниједно + + + + qpdfview::BookmarkDialog + + + Bookmark + Обележивач + + + + Page: + Страна: + + + + Label: + Натпис: + + + + Comment: + Напомена: + + + + Modified: + Измењено: + + + + qpdfview::BookmarkMenu + + + &Open + &Отвори + + + + Open in new &tab + Отвори у новој &картици + + + + &Remove bookmark + &Уклони обележивач + + + + qpdfview::Database + + + Jump to page %1 + Иди на страницу %1 + + + + qpdfview::DocumentView + + + + Information + Информације + + + + The source editor has not been set. + Сорс едитор није подешен. + + + + Opening URL is disabled in the settings. + Отварање URL (линка) је онемогућено у подешавањима. + + + + Warning + Упозорење + + + + + SyncTeX data for '%1' could not be found. + SyncTeX подаци за '%1' не могу бити пронађени. + + + + Printing '%1'... + Штампање '%1'... + + + + Unlock %1 + Откључај %1 + + + + Password: + Лозинка: + + + + Page %1 + Страница %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Сачувај... + + + + Save and open... + Сачувај и отвори... + + + + Save file attachment + Сачувај атачмент фајл + + + + + Warning + Упозорење + + + + Could not open file attachment saved to '%1'. + Не могу да отворим атачмент датотеку сачувану у '%1'. + + + + Could not save file attachment to '%1'. + Не могу да сачувам атачмент датотеку у '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Фонтови + + + + qpdfview::HelpDialog + + + Help + Помоћ + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + помоћ_rs.html + + + + Find previous + Нађи претходнo + + + + Find next + Нађи следећe + + + + qpdfview::MainWindow + + + Toggle tool bars + Пребаци на палету алата + + + + Toggle menu bar + Пребаци на палету менија + + + + + + + + + + + + + + Warning + Упозорење + + + + + Could not open '%1'. + Не могу да отворим '%1'. + + + + Copy file path + Копирај путању датотеке + + + + Select file path + Назначите путању датотеке + + + + Close all tabs + Затвори све картице + + + + Close all tabs but this one + Затвори све картице осим ове + + + + Close all tabs to the left + Затвори све картице налево + + + + Close all tabs to the right + Затвори све картице надесно + + + + + Open + Отвори + + + + Open in new tab + Отвори у новој картици + + + + + + Could not refresh '%1'. + Не могу да освежим '%1'. + + + + Save copy + Сачувај копију + + + + Could not save copy at '%1'. + Не могу да сачувам копију на '%1'. + + + + Save as + Сачувај као + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Не могу да сачувам као '%1'. + + + + Could not print '%1'. + Не могу да штампам '%1'. + + + + Set first page + Подесите почетну страницу + + + + Select the first page of the body matter: + Изаберите почетну страницу из садржаја: + + + + Jump to page + Иди на страницу + + + + Page: + Страна: + + + + Jump to page %1 + Иди на страницу %1 + + + + About qpdfview + О qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview је читач докумената са употрбом картица користи Qt.</p><p>Ова верзија укључује:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF подршка користи Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS подршка користи libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu подршка користи DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF подршка користи Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Printing подршка користи CUPS %1</li> + + + + &Edit bookmark + &Уреди обележавач + + + + The document '%1' has been modified. Do you want to save your changes? + Документ '%1' ће бити измењен. Да ли желите да сачувате измене? + + + + Page width + Ширина странице + + + + Page size + Величина странице + + + + Match &case + Одговара &случају + + + + Whole &words + Све &речи + + + + Highlight &all + Назначи &све + + + + &Open... + &Отвори... + + + + Open in new &tab... + Отвори у новој &картици... + + + + Open &copy in new tab + Отвори &копирај у новоу картицу + + + + Move to &instance... + + + + + &Refresh + &Освежи + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Сачувај &као... + + + + Save &copy... + + + + + &Print... + &Штампај... + + + + E&xit + И&зађи + + + + &Previous page + &Претходна страница + + + + &Next page + &Следећа страница + + + + &First page + &Прва страница + + + + &Last page + &Последња страница + + + + &Set first page... + &Подеси прву страницу... + + + + &Jump to page... + &Иди на страницу... + + + + Jump &backward + Иди &назад + + + + Jump for&ward + Иди на&пред + + + + &Search... + &Тражи... + + + + Find previous + Нађи претходнo + + + + Find next + Нађи следећe + + + + Cancel search + Откажи претраживање + + + + &Copy to clipboard + &Копирај у клипборд + + + + &Add annotation + &Додај напомену + + + + Settings... + Подешавања... + + + + &Continuous + &Континуално + + + + &Two pages + &Две странице + + + + Two pages &with cover page + Две стране &насловну + + + + &Multiple pages + &Више странично + + + + Right to left + Са десна на лево + + + + Zoom &in + Увећа &но + + + + Zoom &out + Умање &но + + + + Original &size + Оригинална &величина + + + + Fit to page width + Уклопи по ширини стране + + + + Fit to page size + Уклопи у величину стране + + + + Rotate &left + Ротирај &лево + + + + Rotate &right + Ротирај &десно + + + + Invert colors + Инверзија боја + + + + Convert to grayscale + Претвори у сиве тонове + + + + Trim margins + Уреди маргине + + + + Darken with paper color + Потамни боју папира + + + + Lighten with paper color + Посветли боју папира + + + + Fonts... + Фонтови... + + + + &Fullscreen + &Преко целог екрана + + + + &Presentation... + &Презентација... + + + + &Previous tab + &Претходна картица + + + + &Next tab + &Следећа картица + + + + &Close tab + &Затвори картицу + + + + Close &all tabs + Затвори &све картице + + + + Close all tabs &but current tab + Затвори све картице &осим тренутне + + + + Restore &most recently closed tab + Поврати &недавно затворену картицу + + + + &Previous bookmark + &Претходни обележивач + + + + &Next bookmark + &Следећи обележивач + + + + &Add bookmark + &Додај обележивач + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Сли&чице + + + + Book&marks + Обележи&вачи + + + + Composition + Композиција + + + + + &Remove bookmark + &Уклони обележивач + + + + Edit '%1' at %2,%3... + Уреди '%1' at %2,%3... + + + + Open containing &folder + Отвори садржај &фасцикле + + + + &Save + + + + + Remove all bookmarks + Уклони све обележиваче + + + + &Contents + &Садржај + + + + &About + &О програму + + + + + &File + &Датотека + + + + + &Edit + &Уреди + + + + + &View + &Приказ + + + + &Outline + &Шема + + + + &Properties + &Својства + + + + &Search + &Претраживање + + + + &Tool bars + &Палета алата + + + + &Docks + &Бочно + + + + &Tabs + &Картице + + + + &Bookmarks + &Обележивачи + + + + &Help + &Помоћ + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Иди на страницу %1. + + + + Go to page %1 of file '%2'. + Иди на страницу %1 датотеке '%2'. + + + + Open '%1'. + Отвори '%1'. + + + + Edit form field '%1'. + Уреди из поља '%1'. + + + + Copy &text + Копирај &текст + + + + &Select text + &Избор текста + + + + Copy &image + Копирај &слику + + + + Save image to &file... + Сачувај слику у &датотеци... + + + + Save image to file + Сачувај слику у датотеци + + + + Warning + Упозорење + + + + Could not save image to file '%1'. + Није могуће сачувати слику у датотеци '%1'. + + + + Add &text + Додај &текст + + + + Add &highlight + Додај &истакни + + + + &Copy link address + &Копирај линк адресе + + + + &Select link address + &Селектуј линк адресе + + + + &Remove annotation + &Уклони напомену + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Умекшавање: + + + + Text antialiasing: + Умекшавање текста: + + + + + None + Ништа + + + + Full + Потпуно + + + + Reduced + Умањено + + + + + Text hinting: + Текстуалне сугестије: + + + + Ignore paper color: + Занемари боју папира: + + + + Overprint preview: + Приказ дретштампе: + + + + Solid + Испуњено + + + + Shaped + Развијено + + + + Thin line mode: + Начин танке линије: + + + + Splash + Поздравни екран + + + + Arthur + + + + + Backend: + Позадина + + + + qpdfview::PluginHandler + + + Image (%1) + Слика (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Подржани формати (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Неподударње типа датотеке '%1'! + + + + Critical + Критично + + + + Could not load plug-in for file type '%1'! + Није могуће учитати плаг-ин за тип датотеке '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Прилагоди страници: + + + + Page ranges: + Од - до странице: + + + + All pages + Све странице + + + + Even pages + Парне странице + + + + Odd pages + Непарне странице + + + + Page set: + Сет страница: + + + + Single page + Једна страница + + + + Two pages + Две странице + + + + Four pages + Четири странице + + + + Six pages + Шест страница + + + + Nine pages + Девет страница + + + + Sixteen pages + Шеснаест страница + + + + Number-up: + Број-више: + + + + Bottom to top and left to right + Са дна ка врху и слева на десно + + + + Bottom to top and right to left + Са дна ка врху и сдесна на лево + + + + Left to right and bottom to top + Слева на десно и са дна ка врху + + + + Left to right and top to bottom + Сдесна на лево и са дна ка врху + + + + Right to left and bottom to top + Сдесна на лево и са дна ка врху + + + + Right to left and top to bottom + Сдесна на лево и са врха ка дну + + + + Top to bottom and left to right + Са врха ка дну и слева на десно + + + + Top to bottom and right to left + Са врха ка дну и сдесна на лево + + + + Number-up layout: + Нумерација распореда: + + + + Extended options + Проширене опције + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Бит умекшавања графике: + + + + Text antialias bits: + Бит умекшавања текста: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Недавно затворен + + + + &Clear list + &Очисти листу + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Недавно &коришћен + + + + &Clear list + &Очисти листу + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> дешавања + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> дешавања на страни <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Претражи за '%1'... + + + + qpdfview::SettingsDialog + + + General + Опште + + + + &Behavior + &Понашање + + + + &Graphics + &Графика + + + + &Interface + &Интерфејс + + + + &Shortcuts + &Пречице + + + + &Modifiers + &Прилагођење + + + + Defaults + Подразумевано + + + + Defaults on current tab + Подразумевано на тренутној картици + + + + Mouse wheel modifiers + Прилагођење точкића миша + + + + Mouse button modifiers + Прилагођење дугмета миша + + + + Open URL: + Отвори URL: + + + + Auto-refresh: + Ауто-освежавање: + + + + + + + + + + + + Effective after restart. + Активно после поновног покретања. + + + + Track recently used: + Прати недавно коришћено: + + + + Keep recently closed: + Задржи недавно затворено: + + + + Restore tabs: + Врати картице: + + + + Restore bookmarks: + Врати обележиваче: + + + + Restore per-file settings: + Врати подешавања датотека: + + + + min + min + + + + Save database interval: + Интервал чувања података: + + + + Synchronize presentation: + Синхронизација презентације: + + + + Default + Подразумевано + + + + Presentation screen: + Презентациони екран: + + + + Synchronize split views: + + + + + Zoom factor: + Фактор увећања: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Ништа + + + + Highlight duration: + Трајање истицања: + + + + Highlight color: + Боја истицања: + + + + Annotation color: + Боја напомена: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' је замењена апсолутном путањом датотеке. '%2' resp. '%3' је замењен линијом resp. броја колоне. + + + + Source editor: + Уређивач изворног кода: + + + + Use tiling: + Користи плочице: + + + + Keep obsolete pixmaps: + Задржи постојеће мапе пиксела: + + + + Use device pixel ratio: + Користи однос пиксела уређаја: + + + + Decorate pages: + Декорација страница: + + + + Decorate links: + Декорација линкова: + + + + Decorate form fields: + Декорација облика поља: + + + + Background color: + Боја позадине: + + + + Paper color: + Боја папира: + + + + Presentation background color: + Боја позадине презентације: + + + + Pages per row: + Страница по реду: + + + + + + px + px + + + + Page spacing: + Размак страница: + + + + Thumbnail spacing: + Размак сличица: + + + + Thumbnail size: + Величина сличица: + + + + Fit to viewport + Прилагођење приказа + + + + Document context menu: + Документ контекст мени: + + + + Tab context menu: + Таб контекст мени: + + + + Open in source editor: + Отвори са уређивачем изворног кода: + + + + + %1 MB + %1 МБ + + + + Cache size: + Величина кеша: + + + + Minimal scrolling: + Минимално скроловање: + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + Врх + + + + Bottom + Дно + + + + Left + Лево + + + + Right + Десно + + + + Tab position: + Положај картице: + + + + As needed + Када је потребно + + + + Always + Увек + + + + Exit after last tab: + Изађи после задње картице: + + + + Scrollable menus: + Скролујући менији: + + + + Searchable menus: + Претраживачки менији: + + + + Zoom to selection: + Увећавање изабраног: + + + + + Never + Никада + + + + Settings + Подешавања + + + + Tab visibility: + Видљивост картица: + + + + Spread tabs: + Проширење картица: + + + + New tab next to current tab: + Нова картица уз трутну катрицу: + + + + Recently used count: + Број недавно коришћених: + + + + Recently closed count: + Број недавно затворених: + + + + Extended search dock: + Проширење поља претраге: + + + + Toggle tool and menu bars with fullscreen: + Преклопник и палетни мени са пуним екраном: + + + + File tool bar: + Палета алата датотеке: + + + + Edit tool bar: + Уређивање палете алата: + + + + View tool bar: + Изглед палете алата: + + + + Use page label: + Користи обележавање страна: + + + + Document title as tab title: + Наслов документа као име картице: + + + + Current page in window title: + Тренутна страница у наслову прозора: + + + + Instance name in window title: + Име инстанце у наслову прозора: + + + + Synchronize outline view: + Синхронизовање приказа структуре: + + + + Highlight current thumbnail: + Назначи тренутну сличицу: + + + + Limit thumbnails to results: + Ограничење приказа у резултатима: + + + + Annotation overlay: + Напомене преклапања: + + + + Form field overlay: + Поље образаца: + + + + Zoom: + Увећање: + + + + Rotate: + Ротирај: + + + + Scroll: + Скроловање: + + + + Copy to clipboard: + Копирај у међумеморију: + + + + Add annotation: + Додај напомену: + + + + qpdfview::ShortcutHandler + + + Action + Радња + + + + Key sequence + Редослед дирки + + + + Skip backward + Прескочи уназад + + + + Skip forward + Прескочи унапред + + + + Move up + Подигни + + + + Move down + Спусти + + + + Move left + Помери улево + + + + Move right + Помери удесно + + + + qpdfview::TreeView + + + &Expand all + &Прошири све + + + + &Collapse all + &Скупи све + + + + MainWindow + + &Save copy... + &Сачувај копију... + + + diff --git a/translations/qpdfview_sv.ts b/translations/qpdfview_sv.ts new file mode 100644 index 0000000..24cdc6b --- /dev/null +++ b/translations/qpdfview_sv.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Bild (%1) + + + + Size + Storlek + + + + Resolution + Upplösning + + + + Depth + Djup + + + + + + + + + Format + Format + + + + Monochrome + Svartvitt + + + + Indexed + Indexerat + + + + 32 bits RGB + 32-bitars RGB + + + + 32 bits ARGB + 32-bitars ARGB + + + + 16 bits RGB + 16-bitars RGB + + + + 24 bits RGB + 24-bitars RGB + + + + Model::PdfDocument + + + Linearized + Linjärt + + + + Name + Namn + + + + Type + Typ + + + + Embedded + Inbäddad + + + + Subset + Delmängd + + + + File + Fil + + + + + + + Yes + Ja + + + + PDF version + PDF-version + + + + Encrypted + Krypterat + + + + + + + No + Nej + + + + Model::PdfPage + + + Information + Information + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Det krävs version 0.20.1 eller högre av Poppler för att lägga till eller ta bort anteckningar. + + + + Model::PsDocument + + + Title + TItel + + + + Created for + Skapad för + + + + Creator + Skapare + + + + Creation date + Skapat + + + + Format + Format + + + + Language level + Språknivå + + + + QObject + + + An empty instance name is not allowed. + Ett tomt förekomstnamn är inte tillåtet. + + + + An empty search text is not allowed. + En tom söktext är inte tillåtet. + + + + Unknown command-line option '%1'. + Okänt kommandoradsalternativ '%1'. + + + + Using '--instance' requires an instance name. + Att använda '--instance' kräver ett förekomstnamn. + + + + Using '--instance' is not allowed without using '--unique'. + Att använda '--instance' är inte tillåtet utan att använda '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Ett förekomstnamn får endast innehålla tecknen [A-Z][a-z][0-9]_" och får inte börja med en siffra. + + + + Using '--search' requires a search text. + Att använda '--search' kräver en söktext. + + + + Could not prepare signal handler. + Det gick inte att förbereda signalhanterare. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift och Ctrl + + + + Shift and Alt + Shift och Alt + + + + Ctrl and Alt + Ctrl och Alt + + + + Right mouse button + Höger musknapp + + + + Middle mouse button + Mittenmusknapp + + + + None + Ingen + + + + qpdfview::BookmarkDialog + + + Bookmark + Bokmärke + + + + Page: + Sida: + + + + Label: + Etikett: + + + + Comment: + Kommentar: + + + + Modified: + Ändrad: + + + + qpdfview::BookmarkMenu + + + &Open + &Öppna + + + + Open in new &tab + Öppna i ny &flik + + + + &Remove bookmark + &Ta bort bokmärke + + + + qpdfview::Database + + + Jump to page %1 + Hoppa till sidan %1 + + + + qpdfview::DocumentView + + + + Information + Information + + + + The source editor has not been set. + Källredigeraren har inte angetts. + + + + Opening URL is disabled in the settings. + Öppnande av URL är inaktiverat i inställningarna + + + + Warning + Varning + + + + + SyncTeX data for '%1' could not be found. + Det gick inte att hitta SyncTeX-data för '%1'. + + + + Printing '%1'... + Skriver ut '%1'... + + + + Unlock %1 + Lås upp %1 + + + + Password: + Lösenord: + + + + Page %1 + Sida %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Spara... + + + + Save and open... + Spara och öppna... + + + + Save file attachment + Spara bifogad fil + + + + + Warning + Varning + + + + Could not open file attachment saved to '%1'. + Det gick inte att öppna filbilaga sparad till '%1'. + + + + Could not save file attachment to '%1'. + Kunde inte spara bifogad fil till '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Teckensnitt + + + + qpdfview::HelpDialog + + + Help + Hjälp + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Sök föregående + + + + Find next + Sök nästa + + + + qpdfview::MainWindow + + + Toggle tool bars + Växla verktygsrader + + + + Toggle menu bar + Växla menyrad + + + + + + + + + + + + + + Warning + Varning + + + + + Could not open '%1'. + Kunde inte öppna '%1'. + + + + Copy file path + Kopiera filsökväg + + + + Select file path + Välj filsökväg + + + + Close all tabs + Stäng alla flikar + + + + Close all tabs but this one + Stäng alla flikar utom denna + + + + Close all tabs to the left + Stäng alla flikar till vänster + + + + Close all tabs to the right + Stäng alla flikar till höger + + + + + Open + Öppna + + + + Open in new tab + Öppna i ny flik + + + + + + Could not refresh '%1'. + Kunde inte uppdatera '%1'. + + + + Save copy + Spara kopia + + + + Could not save copy at '%1'. + Det gick inte att spara kopia vid '%1'. + + + + Save as + Spara som + + + + + Move to instance + Flytta till förekomst + + + + + Failed to access instance '%1'. + Det gick inte att komma åt förekomst '%1'. + + + + + + Could not save as '%1'. + Kunde inte spara som '%1'. + + + + Could not print '%1'. + Kunde inte skriva ut '%1'. + + + + Set first page + Ställ in förstasida + + + + Select the first page of the body matter: + Välj förstasida för brödtext: + + + + Jump to page + Hoppa till sida + + + + Page: + Sida: + + + + Jump to page %1 + Hoppa till sidan %1 + + + + About qpdfview + Om qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview är en dokumentvisare med flikar baserad på Qt.</p><p>Den här versionen inkluderar:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF-stöd använder Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS-stöd använder libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu-stöd använder DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF-stöd använder Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Utskriftsstöd använder CUPS %1</li> + + + + &Edit bookmark + R&edigera bokmärke + + + + The document '%1' has been modified. Do you want to save your changes? + Dokumentet '%1' har ändrats. Vill du spara dina ändringar? + + + + Page width + Sidbredd + + + + Page size + Sidstorlek + + + + Match &case + S&kiftlägeskänslig + + + + Whole &words + Hela o&rd + + + + Highlight &all + Markera &alla + + + + &Open... + &Öppna... + + + + Open in new &tab... + Öppna i ny &flik... + + + + Open &copy in new tab + Öppna och &kopiera i ny flik + + + + Move to &instance... + Flytta t&ill förekomst... + + + + &Refresh + &Uppdatera + + + + Information + Information + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Spara so&m... + + + + Save &copy... + Spara och &kopiera... + + + + &Print... + S&kriv ut... + + + + E&xit + &Avsluta + + + + &Previous page + &Föregående sida + + + + &Next page + &Nästa sida + + + + &First page + &Första sidan + + + + &Last page + &Sista sidan + + + + &Set first page... + &Ställ in förstasida... + + + + &Jump to page... + &Hoppa till sida... + + + + Jump &backward + Hoppa &bakåt + + + + Jump for&ward + Hoppa fra&måt + + + + &Search... + &Sök... + + + + Find previous + Sök föregående + + + + Find next + Sök nästa + + + + Cancel search + Avbryt sökning + + + + &Copy to clipboard + &Kopiera till urklipp + + + + &Add annotation + &Lägg till anteckning + + + + Settings... + Inställningar... + + + + &Continuous + &Kontinuerlig + + + + &Two pages + &Två sidor + + + + Two pages &with cover page + Två sidor &med försättsblad + + + + &Multiple pages + &Flera sidor + + + + Right to left + Höger till vänster + + + + Zoom &in + Zooma &in + + + + Zoom &out + Zooma &ut + + + + Original &size + Ursprungs&storlek + + + + Fit to page width + Anpassa till sidbredd + + + + Fit to page size + Anpassa till sidstorlek + + + + Rotate &left + Rotera åt &vänster + + + + Rotate &right + Rotera åt &höger + + + + Invert colors + Invertera färger + + + + Convert to grayscale + Konvertera till gråskala + + + + Trim margins + Beskär marginaler + + + + Darken with paper color + Gör mörkare med pappersfärg + + + + Lighten with paper color + Gör ljusare med pappersfärg + + + + Fonts... + Teckensnitt... + + + + &Fullscreen + &Helskärm + + + + &Presentation... + &Presentation... + + + + &Previous tab + &Föregående flik + + + + &Next tab + &Nästa flik + + + + &Close tab + &Stäng flik + + + + Close &all tabs + Stäng &alla flikar + + + + Close all tabs &but current tab + Stäng alla flikar &utom aktiv flik + + + + Restore &most recently closed tab + Återställ &senast stängda flik + + + + &Previous bookmark + &Föregående bokmärke + + + + &Next bookmark + &Nästa bokmärke + + + + &Add bookmark + &Lägg till bokmärke + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Mi&niatyrbilder + + + + Book&marks + Bok&märken + + + + Composition + Sammansättning + + + + + &Remove bookmark + &Ta bort bokmärke + + + + Edit '%1' at %2,%3... + Redigera '%1' vid %2,%3... + + + + Open containing &folder + Öppna innehållande &mapp + + + + &Save + &Spara + + + + Remove all bookmarks + Ta bort alla bokmärken + + + + &Contents + &Innehåll + + + + &About + &Om + + + + + &File + &Arkiv + + + + + &Edit + &Redigera + + + + + &View + &Visa + + + + &Outline + Öve&rsikt + + + + &Properties + &Egenskaper + + + + &Search + &Sök + + + + &Tool bars + &Verktygsrader + + + + &Docks + &Paneler + + + + &Tabs + F&likar + + + + &Bookmarks + &Bokmärken + + + + &Help + &Hjälp + + + + + Choose instance + Välj förekomst + + + + + Instance: + Förekomst: + + + + qpdfview::PageItem + + + Go to page %1. + Gå till sidan %1. + + + + Go to page %1 of file '%2'. + Gå till sidan %1 i filen '%2'. + + + + Open '%1'. + Öppna '%1'. + + + + Edit form field '%1'. + Redigera formulärfält '%1'. + + + + Copy &text + Kopiera &text + + + + &Select text + &Markera text + + + + Copy &image + Kopiera &bild + + + + Save image to &file... + Spara bild till &fil... + + + + Save image to file + Spara bild till fil + + + + Warning + Varning + + + + Could not save image to file '%1'. + Kunde inte spara bild till fil '%1'. + + + + Add &text + Lägg till &text + + + + Add &highlight + Lägg till en &markering + + + + &Copy link address + &Kopiera länkadress + + + + &Select link address + &Markera länkadress + + + + &Remove annotation + &Ta bort anteckning + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Antialiasing: + + + + Text antialiasing: + Antialiasing för text: + + + + + None + Ingen + + + + Full + Fullständig + + + + Reduced + Reducerad + + + + + Text hinting: + Textantydan: + + + + Ignore paper color: + Ignorera pappersfärg: + + + + Overprint preview: + Skriv över förhandsvisning: + + + + Solid + Solid + + + + Shaped + Formad + + + + Thin line mode: + Tunn linje läge: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Bakände: + + + + qpdfview::PluginHandler + + + Image (%1) + Bild (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Format som stöds (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Det gick inte att matcha filtypen '%1'! + + + + Critical + Kritiskt + + + + Could not load plug-in for file type '%1'! + Det gick inte att läsa in insticksprogram för filtyp '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Anpassa till sida: + + + + Page ranges: + Sidintervall: + + + + All pages + Alla sidor + + + + Even pages + Jämna sidor + + + + Odd pages + Udda sidor + + + + Page set: + Sidval: + + + + Single page + En sida + + + + Two pages + Två sidor + + + + Four pages + Fyra sidor + + + + Six pages + Sex sidor + + + + Nine pages + Nio sidor + + + + Sixteen pages + 16 sidor + + + + Number-up: + Nummer upp: + + + + Bottom to top and left to right + Nerifrån och upp och vänster till höger + + + + Bottom to top and right to left + Nerifrån och upp och höger till vänster + + + + Left to right and bottom to top + Vänster till höger och nerifrån och upp + + + + Left to right and top to bottom + Vänster till höger och uppifrån och ner + + + + Right to left and bottom to top + Höger till vänster och nerifrån och upp + + + + Right to left and top to bottom + Höger till vänster och uppifrån och ner + + + + Top to bottom and left to right + Uppifrån och ner och vänster till höger + + + + Top to bottom and right to left + Uppifrån och ner och höger till vänster + + + + Number-up layout: + Nummer upp layout: + + + + Extended options + Utökade alternativ + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Grafik antialias bitar: + + + + Text antialias bits: + Text antialias bitar: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Senast stängda + + + + &Clear list + &Rensa lista + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Senast &använda + + + + &Clear list + &Rensa lista + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> förekomster + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> förekomster på sida <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Sök efter '%1'... + + + + qpdfview::SettingsDialog + + + General + Allmänt + + + + &Behavior + &Beteende + + + + &Graphics + &Grafik + + + + &Interface + &Gränssnitt + + + + &Shortcuts + &Genvägar + + + + &Modifiers + &Modifierare + + + + Defaults + Standardinställningar + + + + Defaults on current tab + Standardinställningar för aktiv flik + + + + Mouse wheel modifiers + Mushjulsmodifierare + + + + Mouse button modifiers + Musknappsmodifierare + + + + Open URL: + Öppna URL: + + + + Auto-refresh: + Automatisk uppdatering: + + + + + + + + + + + + Effective after restart. + Gäller efter omstart. + + + + Track recently used: + Spara senast använda: + + + + Keep recently closed: + Behåll senast stängda: + + + + Restore tabs: + Återställ flikar: + + + + Restore bookmarks: + Återställ bokmärken: + + + + Restore per-file settings: + Återställ filspecifika inställningar: + + + + min + min + + + + Save database interval: + Spara databasintervall: + + + + Synchronize presentation: + Synkronisera presentation: + + + + Default + Standard + + + + Presentation screen: + Presentationsskärm: + + + + Synchronize split views: + + + + + Zoom factor: + Zoomfaktor: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Ingen + + + + Highlight duration: + Tidsintervall för markeringar: + + + + Highlight color: + Färg för markeringar: + + + + Annotation color: + Färg för anteckningar: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' ersätts med den fullständiga sökvägen. '%2' resp. '%3' ersätts med rad- resp. kolumnnummer. + + + + Source editor: + Källredigerare: + + + + Use tiling: + Använd tiling: + + + + Keep obsolete pixmaps: + Behåll obsoleta pixmaps: + + + + Use device pixel ratio: + Använd den fysiska enhetens pixelförhållande: + + + + Decorate pages: + Använd siddekorationer: + + + + Decorate links: + Använd dekorationer för länkar: + + + + Decorate form fields: + Använd dekorationer för formulärfält: + + + + Background color: + Bakgrundsfärg: + + + + Paper color: + Pappersfärg: + + + + Presentation background color: + Bakgrundsfärg för presentationer: + + + + Pages per row: + Sidor per rad: + + + + + + px + px + + + + Page spacing: + Avstånd mellan sidor: + + + + Thumbnail spacing: + Avstånd mellan miniatyrbilder: + + + + Thumbnail size: + Miniatyrbildsstorlek: + + + + Fit to viewport + Anpassa till visning + + + + Document context menu: + Dokumentsnabbmeny: + + + + Tab context menu: + Fliksnabbmeny: + + + + Open in source editor: + Öppna i källredigerare: + + + + + %1 MB + %1 MB + + + + Cache size: + Cachestorlek: + + + + Minimal scrolling: + Minsta rullning: + + + + Prefetch: + Förhandshämtning: + + + + Prefetch distance: + Avstånd för förhandshämtningar: + + + + Top + Överkant + + + + Bottom + Nederkant + + + + Left + Vänster + + + + Right + Höger + + + + Tab position: + Flikplacering: + + + + As needed + Efter behov + + + + Always + Alltid + + + + Exit after last tab: + Stäng efter sista flik: + + + + Scrollable menus: + Rullbara menyer: + + + + Searchable menus: + Sökbara menyer: + + + + Zoom to selection: + Zooma till markering: + + + + + Never + Aldrig + + + + Settings + Inställningar + + + + Tab visibility: + Visning av flikar: + + + + Spread tabs: + Sprid flikar: + + + + New tab next to current tab: + Ny flik bredvid aktiv flik + + + + Recently used count: + Antal senast använda: + + + + Recently closed count: + Antal senast stängda: + + + + Extended search dock: + Utökat sökfält: + + + + Toggle tool and menu bars with fullscreen: + Växla verktygs- och menyrader med fullskärmsläge: + + + + File tool bar: + Verktygsrad "Arkiv": + + + + Edit tool bar: + Verktygsrad "Redigera": + + + + View tool bar: + Verktygsrad "Visa": + + + + Use page label: + Använd sidetikett: + + + + Document title as tab title: + Dokumentnamn som fliknamn: + + + + Current page in window title: + Aktiv sida i fönstertitel: + + + + Instance name in window title: + Namn på instans i fönstertitel: + + + + Synchronize outline view: + Synkronisera översiktsvyn: + + + + Highlight current thumbnail: + Markera aktiv miniatyrbild: + + + + Limit thumbnails to results: + Begränsa miniatyrbilder efter resultat: + + + + Annotation overlay: + Överlappning av anteckningar: + + + + Form field overlay: + Överlappning av formulärfält: + + + + Zoom: + Zoom: + + + + Rotate: + Rotera: + + + + Scroll: + Scrollning: + + + + Copy to clipboard: + Kopiera till urklipp: + + + + Add annotation: + Lägg till anteckning: + + + + qpdfview::ShortcutHandler + + + Action + Åtgärd + + + + Key sequence + Tangentföljd + + + + Skip backward + Hoppa bakåt + + + + Skip forward + Hoppa framåt + + + + Move up + Flytta upp + + + + Move down + Flytta ner + + + + Move left + Flytta åt vänster + + + + Move right + Flytta åt höger + + + + qpdfview::TreeView + + + &Expand all + &Expandera alla + + + + &Collapse all + &Dölj alla + + + diff --git a/translations/qpdfview_th.ts b/translations/qpdfview_th.ts new file mode 100644 index 0000000..16589bf --- /dev/null +++ b/translations/qpdfview_th.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + ฟอร์แมต + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + ชื่อ + + + + Type + ชนิด + + + + Embedded + ฝังแนบมาด้วย + + + + Subset + เซตย่อย + + + + File + แฟ้ม + + + + + + + Yes + ใช่ + + + + PDF version + + + + + Encrypted + + + + + + + + No + ไม่ + + + + Model::PdfPage + + + Information + ข้อมูล + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + รุ่น 0.20.1 หรือสูงกว่าของคลัง Poppler ต้องการเพิ่ม/ลบบันทึกย่อ + + + + Model::PsDocument + + + Title + ชื่อ + + + + Created for + สร้างมาสำหรับ + + + + Creator + ผู้สร้าง + + + + Creation date + วันที่สร้าง + + + + Format + ฟอร์แมต + + + + Language level + ขั้นของภาษา + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + ไม่อนุญาตให้เว้นว่างช่องค้นหาไว้ + + + + Unknown command-line option '%1'. + ไม่รู้จักตัวเลือกบรรทัดคำสั่ง '%1' + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + ในการใช้คำสั่ง '--search' ต้องพิมพ์คำค้นด้วย + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift และ Ctrl + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + + + + + Open in new &tab + + + + + &Remove bookmark + + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + ข้อมูล + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + ข้อมูล + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_tr.ts b/translations/qpdfview_tr.ts new file mode 100644 index 0000000..3c8e8a7 --- /dev/null +++ b/translations/qpdfview_tr.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Resim (%1) + + + + Size + Boyut + + + + Resolution + Çözünürlük + + + + Depth + Derinlik + + + + + + + + + Format + Biçim + + + + Monochrome + Siyah beyaz + + + + Indexed + İndisli + + + + 32 bits RGB + 32 bit RGB + + + + 32 bits ARGB + 32 bit ARGB + + + + 16 bits RGB + 16 bit RGB + + + + 24 bits RGB + 24 bit RGB + + + + Model::PdfDocument + + + Linearized + Doğruşallaştır + + + + Name + İsim + + + + Type + Tür + + + + Embedded + Gömülü + + + + Subset + Alt Küme + + + + File + Dosya + + + + + + + Yes + Evet + + + + PDF version + PDF sürümü + + + + Encrypted + Şifreli + + + + + + + No + Hayır + + + + Model::PdfPage + + + Information + Bilgi + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Ek açıklamalar eklemek veya kaldırmak için Poppler kitaplığının 0.20.1 veya daha yüksek bir sürümü gereklidir. + + + + Model::PsDocument + + + Title + Başlık + + + + Created for + İçin oluşturuldu + + + + Creator + Oluşturucu + + + + Creation date + Oluşturulma tarihi + + + + Format + Biçem + + + + Language level + Dil seviyesi + + + + QObject + + + An empty instance name is not allowed. + Boş bir örnek adı verilmez. + + + + An empty search text is not allowed. + Boş bir arama metnine izin verilmiyor. + + + + Unknown command-line option '%1'. + Bilinmeyen komut satırı seçeneği '%1'. + + + + Using '--instance' requires an instance name. + '--instance' kullanmak bir örnek adı gerektirir. + + + + Using '--instance' is not allowed without using '--unique'. + '--unique' kullanılmadan '--instance' kullanılmasına izin verilmez. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Örnek adı yalnızca "[A-Z][a-z][0-9]_" karakterlerini içermeli ve bir rakamla başlamamalıdır. + + + + Using '--search' requires a search text. + '--ara' kullanma bir arama metni gerektirir. + + + + Could not prepare signal handler. + Sinyal işleyicisi hazırlanamadı. + + + + QShortcut + + + Shift + Üst + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift ve Ctrl + + + + Shift and Alt + Shift ve Alt + + + + Ctrl and Alt + Ctrl ve Alt + + + + Right mouse button + Sağ fare düğmesi + + + + Middle mouse button + Orta fare düğmesi + + + + None + Hiçbiri + + + + qpdfview::BookmarkDialog + + + Bookmark + Yerimi + + + + Page: + Sayfa: + + + + Label: + Etiket: + + + + Comment: + Açıklama: + + + + Modified: + Değiştirilme tarihi: + + + + qpdfview::BookmarkMenu + + + &Open + &Aç + + + + Open in new &tab + Yeni &sekmede aç + + + + &Remove bookmark + &Yerimini kaldır + + + + qpdfview::Database + + + Jump to page %1 + %1 sayfasına git + + + + qpdfview::DocumentView + + + + Information + Bilgi + + + + The source editor has not been set. + Kaynak düzeneyici ayarlanmadı. + + + + Opening URL is disabled in the settings. + Bağlantıları açmak ayarlardan kapatılmış durumda. + + + + Warning + Uyarı + + + + + SyncTeX data for '%1' could not be found. + '%1' için SyncTeX verileri bulunamadı. + + + + Printing '%1'... + '%1' dosyası yazdırılıyor... + + + + Unlock %1 + %1 dosyasının kilidini aç + + + + Password: + Şifre: + + + + Page %1 + Sayfa %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Kaydet... + + + + Save and open... + Kaydet ve aç... + + + + Save file attachment + Dosya ekini kaydet + + + + + Warning + Uyarı + + + + Could not open file attachment saved to '%1'. + '%1' klasörüne kaydedilmiş dosya eki açılamadı. + + + + Could not save file attachment to '%1'. + Dosya eki kaydedilemedi '%1'. + + + + qpdfview::FontsDialog + + + Fonts + Yazı tipleri + + + + qpdfview::HelpDialog + + + Help + Yardım + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + yardım.html + + + + Find previous + Öncekini bul + + + + Find next + Sonrakini bul + + + + qpdfview::MainWindow + + + Toggle tool bars + Araç çubuklarını aç/kapat + + + + Toggle menu bar + Menü çubuğunu aç/kapat + + + + + + + + + + + + + + Warning + Uyarı + + + + + Could not open '%1'. + '%1' dosyası açılamadı. + + + + Copy file path + Dosya yolunu kopyala + + + + Select file path + Dosya yolunu seçin + + + + Close all tabs + Tüm sekmeleri kapat + + + + Close all tabs but this one + Tüm sekmeleri kapat, ancak bunu + + + + Close all tabs to the left + Sola tüm sekmeleri kapat + + + + Close all tabs to the right + Sağa tüm sekmeleri kapat + + + + + Open + + + + + Open in new tab + Yeni sekmede aç + + + + + + Could not refresh '%1'. + '%1' dosyası yenilenemedi. + + + + Save copy + Kopyayı kaydet + + + + Could not save copy at '%1'. + Kopya '%1' yoluna kaydedilemedi. + + + + Save as + Farklı kaydet + + + + + Move to instance + Örneğe taşı + + + + + Failed to access instance '%1'. + '%1' örneğine erişilemedi. + + + + + + Could not save as '%1'. + '%1' olarak kaydedilemedi. + + + + Could not print '%1'. + '%1' dosyası yazdırılamadı. + + + + Set first page + İlk sayfa ayarla + + + + Select the first page of the body matter: + Gövde durumu ilk sayfasını seç: + + + + Jump to page + Sayfaya git + + + + Page: + Sayfa: + + + + Jump to page %1 + %1 sayfasına git + + + + About qpdfview + qpdfview hakkında + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview, Qt kullanan sekmeli bir belge görüntüleyicidir.</p><p>Bu sürüm aşağıdakileri içerir:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Poppler %1 kullanılarak PDF desteği</li> + + + + <li>PS support using libspectre %1</li> + <li>Libspectre %1 kullanarak PS desteği</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVuLibre %1 kullanılarak DjVu desteği</li> + + + + <li>PDF support using Fitz %1</li> + <li>Fitz kullanarak PDF desteği %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>CUPS %1 kullanarak baskı desteği</li> + + + + &Edit bookmark + Yer imini &düzenle + + + + The document '%1' has been modified. Do you want to save your changes? + '%1' belgesi değiştirildi. Değişikliklerinizi kaydetmek istiyor musunuz? + + + + Page width + Sayfa genişliği + + + + Page size + Sayfa boyutu + + + + Match &case + Eşleme &durumu + + + + Whole &words + Tüm &kelimeler + + + + Highlight &all + &Tümünü vurgulayın + + + + &Open... + &Aç... + + + + Open in new &tab... + Yeni &sekmede aç... + + + + Open &copy in new tab + Aç ve yeni sekmede &kopyala + + + + Move to &instance... + &Örneğe taşı + + + + &Refresh + &Yenile + + + + Information + Bilgi + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Farklı k&aydet... + + + + Save &copy... + Kaydet &kopyala ... + + + + &Print... + &Yazdır... + + + + E&xit + &Çık + + + + &Previous page + &Önceki sayfa + + + + &Next page + So&nraki sayfa + + + + &First page + İlk say&fa + + + + &Last page + Son sayfa + + + + &Set first page... + İlk sayfa &ayarla ... + + + + &Jump to page... + &Sayfaya git... + + + + Jump &backward + &Geriye atla + + + + Jump for&ward + İleri a&tla + + + + &Search... + &Ara... + + + + Find previous + Öncekini bul + + + + Find next + Sonrakini bul + + + + Cancel search + Aramayı iptal et + + + + &Copy to clipboard + &Panoya kopyala + + + + &Add annotation + &Ek açıklama ekle + + + + Settings... + Ayarlar... + + + + &Continuous + &Sürekli + + + + &Two pages + &İkili sayfalar + + + + Two pages &with cover page + &Kapak sayfasıyla birlikte ikili sayfalar + + + + &Multiple pages + &Çoklu sayfa + + + + Right to left + Sağdan sola + + + + Zoom &in + &Yakınlaştır + + + + Zoom &out + &Uzaklaştır + + + + Original &size + &Gerçek boyut + + + + Fit to page width + Sayfa genişliğine sığdır + + + + Fit to page size + Sayfa boyutuna uydur + + + + Rotate &left + So&la döndür + + + + Rotate &right + Sa&ğa döndür + + + + Invert colors + Renkleri tersine çevir + + + + Convert to grayscale + Gri tonlamaya dönüştürün + + + + Trim margins + Kenar boşluklarını düzelt + + + + Darken with paper color + Kağıt rengiyle koyu renkte + + + + Lighten with paper color + Kağıt rengiyle açık renkte + + + + Fonts... + Yazı tipleri... + + + + &Fullscreen + &Tam Ekran + + + + &Presentation... + &Sunum... + + + + &Previous tab + &Önceki sekme + + + + &Next tab + &Sonraki sekme + + + + &Close tab + &Sekmeyi kapat + + + + Close &all tabs + &Tüm sekmeleri kapat + + + + Close all tabs &but current tab + &Şimdiki dışındaki tüm sekmeleri kapat + + + + Restore &most recently closed tab + Geri yükle ve en son kapatılan sekme + + + + &Previous bookmark + &Önceki yerimi + + + + &Next bookmark + &Sonraki yerimi + + + + &Add bookmark + Yerimi &ekle + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + Öngörü&ntüler + + + + Book&marks + Yer İ&mleri + + + + Composition + Birleşim + + + + + &Remove bookmark + Yerimini &kaldır + + + + Edit '%1' at %2,%3... + %2,%3 konumunda '%1' düzenle... + + + + Open containing &folder + Dosyayı içeren &klasörü aç + + + + &Save + &Kaydet + + + + Remove all bookmarks + Tüm yerimlerini kaldır + + + + &Contents + &İçindekiler + + + + &About + &Hakkında + + + + + &File + &Dosya + + + + + &Edit + Dü&zenle + + + + + &View + &Görünüm + + + + &Outline + &Ana Çizgi + + + + &Properties + &Özellikler + + + + &Search + &Ara + + + + &Tool bars + &Araç çubukları + + + + &Docks + &Rıhtımlar + + + + &Tabs + &Sekmeler + + + + &Bookmarks + &Yerimleri + + + + &Help + &Yardım + + + + + Choose instance + Durum Seç + + + + + Instance: + Örnek: + + + + qpdfview::PageItem + + + Go to page %1. + %1. sayfaya git. + + + + Go to page %1 of file '%2'. + '%2' dosyasının %1 sayfasına gidin. + + + + Open '%1'. + Aç '%1'. + + + + Edit form field '%1'. + Form alanını '%1' düzenleyin. + + + + Copy &text + Metni &kopyala + + + + &Select text + Metin &seç + + + + Copy &image + &Görüntüyü kopyala + + + + Save image to &file... + Görüntüyü &dosyaya kaydet... + + + + Save image to file + Görüntüyü dosyaya kaydet + + + + Warning + Uyarı + + + + Could not save image to file '%1'. + Görüntü '%1' dosyasına kaydedilemedi. + + + + Add &text + &Metin ekle + + + + Add &highlight + &Vurgu ekle + + + + &Copy link address + Bağlantı adresini &kopyala + + + + &Select link address + Bağlantı adresini &seç + + + + &Remove annotation + Ek açıklamayı &kaldır + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Keskinlik yumuşatma: + + + + Text antialiasing: + Metin yumuşatma: + + + + + None + Hiçbiri + + + + Full + Tam + + + + Reduced + Azaltılmış + + + + + Text hinting: + Metin keskinliği: + + + + Ignore paper color: + Kağıt rengini yoksay: + + + + Overprint preview: + Üst Baskı Önizleme: + + + + Solid + Düz + + + + Shaped + Biçimli + + + + Thin line mode: + İnce çizgi kipi: + + + + Splash + Açılış Resmi + + + + Arthur + Arthur + + + + Backend: + Arka uç + + + + qpdfview::PluginHandler + + + Image (%1) + Resim (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + Desteklenen biçimler (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + '%1' dosya türünün eşleştirilemedi! + + + + Critical + Önemli + + + + Could not load plug-in for file type '%1'! + Dosya türü '%1' için eklenti yüklenemedi! + + + + qpdfview::PrintDialog + + + Fit to page: + Sayfaya sığdır: + + + + Page ranges: + Sayfa aralıkları: + + + + All pages + Tüm sayfa + + + + Even pages + Sayfalar bile + + + + Odd pages + Tek sayfalar + + + + Page set: + Sayfayı ayarla: + + + + Single page + Tek sayfa + + + + Two pages + İki sayfa + + + + Four pages + Dört sayfa + + + + Six pages + Altı sayfa + + + + Nine pages + Dokuz sayfa + + + + Sixteen pages + Onaltı sayfa + + + + Number-up: + Arttır: + + + + Bottom to top and left to right + Alttan üste ve soldan sağa + + + + Bottom to top and right to left + Alttan üste ve sağdan sola + + + + Left to right and bottom to top + Soldan sağa ve alttan üste + + + + Left to right and top to bottom + Soldan sağa ve yukarıdan aşağıya + + + + Right to left and bottom to top + Sağdan sola ve altdan üste + + + + Right to left and top to bottom + Sağdan sola ve yukarıdan aşağıya + + + + Top to bottom and left to right + Üstten alta ve soldan sağa + + + + Top to bottom and right to left + Üstten alta ve soldan sağa + + + + Number-up layout: + Düzeni arttır: + + + + Extended options + Genişletilmiş seçenekler + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Grafik yumuşatma bitleri: + + + + Text antialias bits: + Metin yumuşatım bitleri: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Sonlar kapandı + + + + &Clear list + Listeyi &temizle + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Son &kullanılan + + + + &Clear list + &Listeyi temizle + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> kez sonra + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> sayfa oluşumları <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + '%1' için ara... + + + + qpdfview::SettingsDialog + + + General + Genel + + + + &Behavior + &Davranış + + + + &Graphics + &Grafikler + + + + &Interface + &Arayüz + + + + &Shortcuts + &Kısayollar + + + + &Modifiers + &Düzenleyiciler + + + + Defaults + Öntanımlılar + + + + Defaults on current tab + Geçerli sekmede varsayılanlar + + + + Mouse wheel modifiers + Fare tekerleği değiştiriciler + + + + Mouse button modifiers + Fare düğmesi değiştiriciler + + + + Open URL: + Bağlantı aç: + + + + Auto-refresh: + Otomatik-yenile: + + + + + + + + + + + + Effective after restart. + Yeniden başlatıldıktan sonra uygulanır. + + + + Track recently used: + Son kullanılanları listele: + + + + Keep recently closed: + Son zamanları kapalı tutun: + + + + Restore tabs: + Sekmeleri geri yükle: + + + + Restore bookmarks: + Yerimlerini geri yükle: + + + + Restore per-file settings: + Dosya başına geri yükle ayarları: + + + + min + dk + + + + Save database interval: + Veritabanı aralığını kaydet: + + + + Synchronize presentation: + Sunumu eşle: + + + + Default + Öntanımlı + + + + Presentation screen: + Sunum ekranı: + + + + Synchronize split views: + + + + + Zoom factor: + Büyütme etkisi: + + + + Parallel search execution: + + + + + ms + ms + + + + None + Hiçbiri + + + + Highlight duration: + Vurgu süresi: + + + + Highlight color: + Vurgulama rengi: + + + + Annotation color: + Ek açıklama rengi: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' mutlak dosya yolu ile değiştirildi. '%2' resp. '%3' yerine satırları geldi. Sütun numarası. + + + + Source editor: + Kaynak düzenleyici: + + + + Use tiling: + Döşeme kullan: + + + + Keep obsolete pixmaps: + Eski benek haritalarını sakla: + + + + Use device pixel ratio: + Cihaz benek oranını kullan: + + + + Decorate pages: + Süsleme düzenleyicileri: + + + + Decorate links: + Süsleme bağlantıları: + + + + Decorate form fields: + Form alanlarını süsleyin: + + + + Background color: + Artalan rengi: + + + + Paper color: + Kağıt rengi: + + + + Presentation background color: + Sunum artalan rengi: + + + + Pages per row: + Satır başına sayfalar: + + + + + + px + bnk + + + + Page spacing: + Sayfa aralığı: + + + + Thumbnail spacing: + Küçük resim aralığı: + + + + Thumbnail size: + Küçük resim boyutu: + + + + Fit to viewport + Görüntü uzantısını sığdır + + + + Document context menu: + Belge bağlam menüsü: + + + + Tab context menu: + Sekme bağlam menüsü: + + + + Open in source editor: + Kaynak editörde açın: + + + + + %1 MB + %1 MB + + + + Cache size: + Önbellek boyutu: + + + + Minimal scrolling: + Asgari kaydırma: + + + + Prefetch: + Önbellekleme: + + + + Prefetch distance: + Önbellekleme mesafesi: + + + + Top + Sayfabaşı + + + + Bottom + Sayfasonu + + + + Left + Sol + + + + Right + Sağ + + + + Tab position: + Sekme konumu: + + + + As needed + Gerektiğinde + + + + Always + Her zaman + + + + Exit after last tab: + Son sekmeden çık: + + + + Scrollable menus: + Kaydırılabilir menüler: + + + + Searchable menus: + Aranabilir menüler: + + + + Zoom to selection: + Seçimi yakınlaştır: + + + + + Never + Asla + + + + Settings + Ayarlar + + + + Tab visibility: + Sekme görünürlüğü: + + + + Spread tabs: + Sekmeleri yay: + + + + New tab next to current tab: + Geçerli sekmenin yanındaki yeni sekme: + + + + Recently used count: + Son kullanılanı say: + + + + Recently closed count: + Son kapalıyı say: + + + + Extended search dock: + Genişletilmiş arama rıhtımı: + + + + Toggle tool and menu bars with fullscreen: + Aracı ve menü çubuklarını tam ekranla değiştirin: + + + + File tool bar: + Dosya araç çubuğu: + + + + Edit tool bar: + Araç çubuğunu düzenle: + + + + View tool bar: + Araç çubuğunu görüntüle: + + + + Use page label: + Sayfa etiketini kullan: + + + + Document title as tab title: + Belge başlığı sekme başlığı olarak: + + + + Current page in window title: + Pencere başlığında geçerli sayfa: + + + + Instance name in window title: + Pencere başlığında örnek adı: + + + + Synchronize outline view: + Anahat görünümünü eşitle: + + + + Highlight current thumbnail: + Mevcut öngörüntüyü vurgula: + + + + Limit thumbnails to results: + Küçük resim sonuçlarını sınırla: + + + + Annotation overlay: + Ek açıklama yer paylaşımı: + + + + Form field overlay: + Form alanı yer paylaşımı: + + + + Zoom: + Yakınlaştır: + + + + Rotate: + Döndür: + + + + Scroll: + Kaydır: + + + + Copy to clipboard: + Panoya kopyala: + + + + Add annotation: + Ek açıklama ekle: + + + + qpdfview::ShortcutHandler + + + Action + Eylem + + + + Key sequence + Anahtar dizisi + + + + Skip backward + Geriye atla + + + + Skip forward + İleri atla + + + + Move up + Yukarı Taşı + + + + Move down + Aşağı Taşı + + + + Move left + Sola taşı + + + + Move right + Sağa taşı + + + + qpdfview::TreeView + + + &Expand all + Tümünü &Genişlet + + + + &Collapse all + Tümünü &Daralt + + + diff --git a/translations/qpdfview_ug.ts b/translations/qpdfview_ug.ts new file mode 100644 index 0000000..570a162 --- /dev/null +++ b/translations/qpdfview_ug.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + ئۇچۇر + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + يوق + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + بەت: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + ئاچ(&O) + + + + Open in new &tab + يېڭى بەتكۈچتە ئاچ(&T) + + + + &Remove bookmark + خەتكۈشنى چىقىۋەت(&R) + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + ئۇچۇر + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + تەڭشەكتە URL نى ئېچىش چەكلەنگەن. + + + + Warning + ئاگاھلاندۇرۇش + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + بېسىۋاتقىنى ‹%1›… + + + + Unlock %1 + %1 نى قۇلۇپسىزلا + + + + Password: + ئىم: + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + ئاگاھلاندۇرۇش + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + Find previous + كېيىنكىنى ئىزدە + + + + Find next + كېيىنكىنى ئىزدە + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + ئاگاھلاندۇرۇش + + + + + Could not open '%1'. + ‹%1› نى ئاچالمىدى. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + ئاچ + + + + Open in new tab + يېڭى بەتكۈچتە ئاچ + + + + + + Could not refresh '%1'. + ‹%1› نى يېڭىلىيالمىدى. + + + + Save copy + كۆچۈرمىسىنى ساقلا + + + + Could not save copy at '%1'. + كۆچۈرمىسىنى ‹%1› غا ساقلىيالمىدى. + + + + Save as + باشقا ئاتتا ساقلا + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + '%1' سۈپىتىدە ساقلىيالمايدۇ. + + + + Could not print '%1'. + ‹%1› نى ساقلىيالمىدى. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + بەتكە يۆتكەل + + + + Page: + بەت: + + + + Jump to page %1 + + + + + About qpdfview + qpdfview ھەققىدە + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + بەت كەڭلىكى + + + + Page size + بەت چوڭلۇقى + + + + Match &case + چوڭ كىچىك ھەرپنى پەرقلەندۈر(&C) + + + + Whole &words + + + + + Highlight &all + ھەممىنى يورۇت(&A) + + + + &Open... + ئاچ(&O)… + + + + Open in new &tab... + يېڭى بەتكۈچتە ئاچ(&T)… + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + يېڭىلا(&R) + + + + Information + ئۇچۇر + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + باشقا ئاتتا ساقلا(&A)… + + + + Save &copy... + + + + + &Print... + باس(&P)… + + + + E&xit + + + + + &Previous page + ئالدىنقى بەت(&P) + + + + &Next page + كېيىنكى بەت(&N) + + + + &First page + بىرىنچى بەت(&F) + + + + &Last page + ئاخىرقى بەت(&L) + + + + &Set first page... + + + + + &Jump to page... + بەتكە يۆتكەل(&J)… + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + ئىزدە(&S)… + + + + Find previous + كېيىنكىنى ئىزدە + + + + Find next + كېيىنكىنى ئىزدە + + + + Cancel search + ئىزدەشتىن ۋاز كەچ + + + + &Copy to clipboard + چاپلاش تاختىسىغا كۆچۈر(&C) + + + + &Add annotation + ئىزاھات قوش(&A) + + + + Settings... + تەڭشەكلەر… + + + + &Continuous + ئۈزلۈكسىز(&C) + + + + &Two pages + ئىككى بەت(&T) + + + + Two pages &with cover page + مۇقاۋىسى بار ئىككى بەت(&W) + + + + &Multiple pages + كۆپ بەت(&M) + + + + Right to left + + + + + Zoom &in + چوڭايت(&I) + + + + Zoom &out + كىچىكلەت(&O) + + + + Original &size + ئەسلى چوڭلۇقى(&O) + + + + Fit to page width + بەت كەڭلىكىگە ماسلاشتۇر + + + + Fit to page size + بەت چوڭلۇقىغا ماسلاشتۇر + + + + Rotate &left + سولغا چۆرگىلەت(&L) + + + + Rotate &right + ئوڭغا چۆرگىلەت(&R) + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + خەت نۇسخىلىرى … + + + + &Fullscreen + پۈتۈن ئېكران(&F) + + + + &Presentation... + سۇنۇلما(&P) … + + + + &Previous tab + ئالدىنقى بەتكۈچ(&P) + + + + &Next tab + كېيىنكى بەتكۈچ(&N) + + + + &Close tab + بەتكۈچنى ياپ(&C) + + + + Close &all tabs + بارلىق بەتكۈچلەرنى ياپ(&A) + + + + Close all tabs &but current tab + نۆۋەتتىكى بەتكۈچتىن باشقا ھەممە بەتكۈچنى تاقا(&B) + + + + Restore &most recently closed tab + + + + + &Previous bookmark + ئالدىنقى خەتكۈش(&P) + + + + &Next bookmark + كېيىنكى خەتكۈش(N) + + + + &Add bookmark + خەتكۈش قوش(&A) + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + خەتكۈشنى چىقىۋەت(&R) + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + ھەممە خەتكۈشنى چىقىرىۋەت + + + + &Contents + مەزمۇنلار(&C) + + + + &About + ھەققىدە(&A) + + + + + &File + ھۆججەت(&F) + + + + + &Edit + تەھرىر(&E) + + + + + &View + كۆرۈنۈش(&V) + + + + &Outline + تېزىس(&O) + + + + &Properties + خاسلىق(&P) + + + + &Search + ئىزدە(&S) + + + + &Tool bars + قورال بالداقلار(&T) + + + + &Docks + قونداقلار(&D) + + + + &Tabs + بەتكۈچلەر(&T) + + + + &Bookmarks + خەتكۈچلەر(&B) + + + + &Help + ياردەم(&H) + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + بەت %1 غا يۆتكىلىدۇ. + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + تېكىست كۆچۈر(&C) + + + + &Select text + + + + + Copy &image + سۈرەت كۆچۈر(&I) + + + + Save image to &file... + سۈرەتنى ھۆججەتكە ساقلا(&F)… + + + + Save image to file + سۈرەتنى ھۆججەتكە ساقلا + + + + Warning + ئاگاھلاندۇرۇش + + + + Could not save image to file '%1'. + سۈرەتنى ھۆججەت ‹%1› غا ساقلىيالمىدى. + + + + Add &text + تېكىست قوش(&T) + + + + Add &highlight + يورۇتۇش قوش((&H)) + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + يوق + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + تىزىمنى تازىلا(&C) + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + يېقىندا ئىشلەتكەن(&U) + + + + &Clear list + تىزىمنى تازىلا(&C) + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + مەشغۇلات(&B) + + + + &Graphics + گرافىك(&G) + + + + &Interface + ئارايۈز(&I) + + + + &Shortcuts + + + + + &Modifiers + سۈپەتلىگۈچىلەر(&M): + + + + Defaults + كۆڭۈلدىكى قىممەتلەر + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + تور ئادرېسى(URL) ئاچ: + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + بەتكۈچلەرنى ئەسلىگە كەلتۈر + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + كۆڭۈلدىكى + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + يوق + + + + Highlight duration: + يورۇتۇش ۋاقتى: + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + تەگلىك رەڭگى: + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + بەت ئارىلىقى: + + + + Thumbnail spacing: + كىچىك سۈرەت ئارىلىقى: + + + + Thumbnail size: + كىچىك سۈرەت چوڭلۇقى: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 مېگابايت + + + + Cache size: + غەملەك چوڭلۇقى: + + + + Minimal scrolling: + + + + + Prefetch: + ئالدىن ئوقۇش: + + + + Prefetch distance: + + + + + Top + ئۈستى + + + + Bottom + ئاستى + + + + Left + سول + + + + Right + ئوڭ + + + + Tab position: + بەتكۈچ ئورنى: + + + + As needed + زۆرۈر بولغاندا + + + + Always + ھەمىشە + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + ھەرگىز + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + ھۆججەت قورال بالدىقى: + + + + Edit tool bar: + تەھرىر قورال بالدىقى: + + + + View tool bar: + كۆرۈنۈش قورال بالدىقى: + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_uk.ts b/translations/qpdfview_uk.ts new file mode 100644 index 0000000..71d8766 --- /dev/null +++ b/translations/qpdfview_uk.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + Зображення (%1) + + + + Size + Розмір + + + + Resolution + Роздільність + + + + Depth + Глибина + + + + + + + + + Format + Формат + + + + Monochrome + Чорно-біле + + + + Indexed + Індексоване + + + + 32 bits RGB + 32-бітове RGB + + + + 32 bits ARGB + 32-бітове ARGB + + + + 16 bits RGB + 16-бітове RGB + + + + 24 bits RGB + 24-бітове RGB + + + + Model::PdfDocument + + + Linearized + Ліанеризовано + + + + Name + Назва + + + + Type + Тип + + + + Embedded + Вбудований + + + + Subset + Підмножина + + + + File + Файл + + + + + + + Yes + Так + + + + PDF version + Версія PDF + + + + Encrypted + Зашифровано + + + + + + + No + Ні + + + + Model::PdfPage + + + Information + Відомості + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Для додавання або вилучення анотацій слід встановити версію 0.20.1 або новішу бібліотеки Poppler. + + + + Model::PsDocument + + + Title + Заголовок + + + + Created for + Створено для + + + + Creator + Створено у + + + + Creation date + Дата створення + + + + Format + Формат + + + + Language level + Рівень мови + + + + QObject + + + An empty instance name is not allowed. + Порожнє ім'я екземпляру не дозволяється. + + + + An empty search text is not allowed. + Не можна шукати порожній рядок. + + + + Unknown command-line option '%1'. + Невідомий параметр командного рядка, «%1». + + + + Using '--instance' requires an instance name. + Використання '--instance' потребує вказання імені екземпляру. + + + + Using '--instance' is not allowed without using '--unique'. + Використання '--instance' не дозволяється без '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + Назва екземпляра програми може складатися лише з символів «[A-Z][a-z][0-9]_» і не повинна починатися з цифри. + + + + Using '--search' requires a search text. + Використання параметра «--search» вимагає зазначення тексту для пошуку. + + + + Could not prepare signal handler. + Не вдалося підготувати обробник сигналу. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift і Ctrl + + + + Shift and Alt + Shift і Alt + + + + Ctrl and Alt + Ctrl і Alt + + + + Right mouse button + Права кнопка миші + + + + Middle mouse button + Середня кнопка миші + + + + None + Немає + + + + qpdfview::BookmarkDialog + + + Bookmark + Закладка + + + + Page: + Сторінка: + + + + Label: + Мітка: + + + + Comment: + Коментар: + + + + Modified: + Змінено: + + + + qpdfview::BookmarkMenu + + + &Open + &Відкрити + + + + Open in new &tab + Ві&дкрити у новій вкладці + + + + &Remove bookmark + Ви&далити закладку + + + + qpdfview::Database + + + Jump to page %1 + Перейти до сторінки %1 + + + + qpdfview::DocumentView + + + + Information + Інформація + + + + The source editor has not been set. + Редактор початкового коду не визначено. + + + + Opening URL is disabled in the settings. + Перехід за посиланням заборонено у налаштуваннях. + + + + Warning + Попередження + + + + + SyncTeX data for '%1' could not be found. + Даних SyncTeX для «%1» не знайдено. + + + + Printing '%1'... + Друк '%1'... + + + + Unlock %1 + Розблокувати %1 + + + + Password: + Пароль: + + + + Page %1 + Сторінка %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Зберегти... + + + + Save and open... + Зберегти і відкрити… + + + + Save file attachment + Зберегти долучення до файла + + + + + Warning + Попередження + + + + Could not open file attachment saved to '%1'. + Не вдалося відкрити долучення до файла, збережене як «%1». + + + + Could not save file attachment to '%1'. + Не вдалося зберегти файл-долучення до «%1». + + + + qpdfview::FontsDialog + + + Fonts + Шрифти + + + + qpdfview::HelpDialog + + + Help + Довідка + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_uk.html + + + + Find previous + Знайти попереднє + + + + Find next + Знайти наступне + + + + qpdfview::MainWindow + + + Toggle tool bars + Увімкнути або вимкнути показ панелей інструментів + + + + Toggle menu bar + Увімкнути або вимкнути показ смужки меню + + + + + + + + + + + + + + Warning + Попередження + + + + + Could not open '%1'. + Не вдалося відкрити '%1'. + + + + Copy file path + Копіювати шлях до файла + + + + Select file path + Вибрати шлях до файла + + + + Close all tabs + Закрити усі вкладки + + + + Close all tabs but this one + Закрити усі вкладки, окрім цієї + + + + Close all tabs to the left + Закрити усі вкладки ліворуч + + + + Close all tabs to the right + Закрити усі вкладки праворуч + + + + + Open + Відкрити + + + + Open in new tab + Відкрити у новій вкладці + + + + + + Could not refresh '%1'. + Не вдалося оновити '%1'. + + + + Save copy + Зберегти копію + + + + Could not save copy at '%1'. + Не вдалося зберегти копію '%1'. + + + + Save as + Зберегти як + + + + + Move to instance + Пересунути до екземпляра + + + + + Failed to access instance '%1'. + Не вдалося отримати доступ до екземпляра «%1». + + + + + + Could not save as '%1'. + Не вдалося зберегти як '%1'. + + + + Could not print '%1'. + Не вдалося роздрукувати '%1'. + + + + Set first page + Встановлення першої сторінки + + + + Select the first page of the body matter: + Виберіть першу сторінку вмісту: + + + + Jump to page + Перехід до сторінки + + + + Page: + Сторінка: + + + + Jump to page %1 + Перейти до сторінки %1 + + + + About qpdfview + Про qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview — програма для перегляду документів на основі Qt.</p><p>Можливості цієї версії:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>Підтримка PDF на основі Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>Підтримка PS на основі libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>Підтримка DjVu на основі DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>Підтримка PDF на основі Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>Друк за допомогою CUPS %1</li> + + + + &Edit bookmark + З&мінити закладку + + + + The document '%1' has been modified. Do you want to save your changes? + До документа «%1» внесено зміни. Хочете зберегти ці зміни? + + + + Page width + Ширина сторінки + + + + Page size + Розмір сторінки + + + + Match &case + Враховувати &регістр + + + + Whole &words + &Цілі слова + + + + Highlight &all + Виділити &усе + + + + &Open... + &Відкрити... + + + + Open in new &tab... + Ві&дкрити у новій вкладці... + + + + Open &copy in new tab + Відкрити &копію у новій вкладці + + + + Move to &instance... + Пересунути до &екземпляра… + + + + &Refresh + &Оновити + + + + Information + Відомості + + + + Instance-to-instance communication requires D-Bus support. + Обмін даними між екземплярами потребує підтримки D-Bus. + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>Див. <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a>, щоб дізнатися більше.</p><p>&copy; Розробники qpdfview, %1</p> + + + + Save &as... + Зберегти &як... + + + + Save &copy... + Зберегти &копію… + + + + &Print... + Д&рукувати... + + + + E&xit + Ви&йти + + + + &Previous page + &Попередня сторінка + + + + &Next page + &Наступна сторінка + + + + &First page + П&ерша сторінка + + + + &Last page + О&стання сторінка + + + + &Set first page... + Вс&тановити першу сторінку… + + + + &Jump to page... + Пе&рейти до сторінки... + + + + Jump &backward + Перейти &назад + + + + Jump for&ward + Перейти в&перед + + + + &Search... + &Пошук... + + + + Find previous + Знайти попереднє + + + + Find next + Знайти наступне + + + + Cancel search + Скасувати пошук + + + + &Copy to clipboard + С&копіювати до буфера + + + + &Add annotation + &Додати коментар + + + + Settings... + Параметри… + + + + &Continuous + &Неперервний перегляд + + + + &Two pages + &Дві сторінки + + + + Two pages &with cover page + Дві сторінки та &обкладинка + + + + &Multiple pages + &Кілька сторінок + + + + Right to left + Справа ліворуч + + + + Zoom &in + З&більшити + + + + Zoom &out + З&меншити + + + + Original &size + По&чатковий розмір + + + + Fit to page width + За шириною + + + + Fit to page size + Сторінка цілком + + + + Rotate &left + Повернути &праворуч + + + + Rotate &right + Повернути &ліворуч + + + + Invert colors + Інвертувати кольори + + + + Convert to grayscale + Перетворити на відтінки сірого + + + + Trim margins + Обрізати поля + + + + Darken with paper color + Темніше з кольором паперу + + + + Lighten with paper color + Світліше з кольором паперу + + + + Fonts... + Шрифти... + + + + &Fullscreen + &На весь екран + + + + &Presentation... + Пре&зентація... + + + + &Previous tab + &Попередня вкладка + + + + &Next tab + &Наступна вкладка + + + + &Close tab + &Закрити вкладку + + + + Close &all tabs + Закрити &усі вкладки + + + + Close all tabs &but current tab + Закрити усі вкладки, &крім поточної + + + + Restore &most recently closed tab + Відновити &останню закриту вкладку + + + + &Previous bookmark + &Попередня закладка + + + + &Next bookmark + &Наступна закладка + + + + &Add bookmark + &Додати закладку + + + + Open copy in new &window + Відкрити копію у новому &вікні + + + + Split view horizontally... + Розділити перегляд горизонтально… + + + + Split view vertically... + Розділити перегляд вертикально… + + + + Close current view + Закрити поточний перегляд + + + + Thumb&nails + &Мініатюри + + + + Book&marks + З&акладки + + + + Composition + Компонування + + + + + &Remove bookmark + &Вилучити закладку + + + + Edit '%1' at %2,%3... + Редагувати «%1» на місці %2,%3... + + + + Open containing &folder + Відкрити т&еку з даними + + + + &Save + З&берегти + + + + Remove all bookmarks + Вилучити усі закладки + + + + &Contents + &Зміст + + + + &About + &Про програму + + + + + &File + &Файл + + + + + &Edit + З&міни + + + + + &View + П&ерегляд + + + + &Outline + &Зміст + + + + &Properties + &Властивості + + + + &Search + &Пошук + + + + &Tool bars + Па&нелі інструментів + + + + &Docks + &Бічні панелі + + + + &Tabs + В&кладки + + + + &Bookmarks + &Закладки + + + + &Help + &Довідка + + + + + Choose instance + Виберіть екземпляр + + + + + Instance: + Екземпляр: + + + + qpdfview::PageItem + + + Go to page %1. + Перейти до сторінки %1. + + + + Go to page %1 of file '%2'. + Перейти на сторінку %1 файла «%2». + + + + Open '%1'. + Відкрити «%1». + + + + Edit form field '%1'. + Редагувати поле '%1'. + + + + Copy &text + Скопіювати &текст + + + + &Select text + &Позначити текст + + + + Copy &image + Скопіювати &зображення + + + + Save image to &file... + Зберегти зображення у &файл... + + + + Save image to file + Зберегти зображення у файл + + + + Warning + Попередження + + + + Could not save image to file '%1'. + Неможливо зберегти зображення у файл '%1'. + + + + Add &text + Додати &текст + + + + Add &highlight + Додати &підсвічування + + + + &Copy link address + &Копіювати адресу посилання + + + + &Select link address + &Позначити адресу посилання + + + + &Remove annotation + &Вилучити анотацію + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Згладжування: + + + + Text antialiasing: + Згладжування тексту: + + + + + None + Немає + + + + Full + Повне + + + + Reduced + Спрощене + + + + + Text hinting: + Гінтінґ тексту: + + + + Ignore paper color: + Ігнорувати колір паперу: + + + + Overprint preview: + Перегляд наддруку: + + + + Solid + Суцільні + + + + Shaped + Надати форму + + + + Thin line mode: + Режим тонких ліній: + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + Модуль обробки: + + + + qpdfview::PluginHandler + + + Image (%1) + Зображення (%1) + + + + Compressed (%1) + Стиснений (%1) + + + + Supported formats (%1) + Підтримувані формати (%1) + + + + Could not decompress '%1'! + Не вдалося розпакувати «%1»! + + + + Could not match file type of '%1'! + Не вдалося встановити відповідність типу файлів «%1»! + + + + Critical + Критична помилка + + + + Could not load plug-in for file type '%1'! + Не вдалося завантажити додаток для типу файлів «%1»! + + + + qpdfview::PrintDialog + + + Fit to page: + Підлаштовування під аркуш: + + + + Page ranges: + Діапазон сторінок: + + + + All pages + Всі сторінки + + + + Even pages + Парні сторінки + + + + Odd pages + Непарні сторінки + + + + Page set: + Набір сторінок: + + + + Single page + Одна сторінка + + + + Two pages + Дві сторінки + + + + Four pages + Чотири сторінки + + + + Six pages + Шість сторінок + + + + Nine pages + Дев’ять сторінок + + + + Sixteen pages + Шістнадцять сторінок + + + + Number-up: + Розташовування: + + + + Bottom to top and left to right + Знизу вгору і зліва праворуч + + + + Bottom to top and right to left + Знизу вгору і справа ліворуч + + + + Left to right and bottom to top + Зліва праворуч і знизу вгору + + + + Left to right and top to bottom + Зліва праворуч і згори взниз + + + + Right to left and bottom to top + Справа ліворуч і знизу вгору + + + + Right to left and top to bottom + Справа ліворуч і згори вниз + + + + Top to bottom and left to right + Згори вниз і зліва праворуч + + + + Top to bottom and right to left + Згори вниз і справа ліворуч + + + + Number-up layout: + Компонування сторінок: + + + + Extended options + Додаткові параметри + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Бітова маска згладжування графіки: + + + + Text antialias bits: + Бітова маска згладжування тексту: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + &Останні закриті + + + + &Clear list + &Спорожнити список + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Останні відкр&иті + + + + &Clear list + О&чистити список + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> відповідників + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> відповідників на сторінці <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + Шукати «%1»… + + + + qpdfview::SettingsDialog + + + General + Загальне + + + + &Behavior + &Поведінка + + + + &Graphics + &Графіка + + + + &Interface + &Інтерфейс + + + + &Shortcuts + &Клавіатурні скорочення + + + + &Modifiers + &Модифікатори + + + + Defaults + Типові + + + + Defaults on current tab + Типові на поточній вкладці + + + + Mouse wheel modifiers + Модифікатори для коліщатка миші + + + + Mouse button modifiers + Модифікатори для кнопок миші + + + + Open URL: + Відкривати URL: + + + + Auto-refresh: + Автооновлення: + + + + + + + + + + + + Effective after restart. + Діятиме після перезапуску. + + + + Track recently used: + Пам'ятати останні відкриті: + + + + Keep recently closed: + Пам’ятати останні закриті: + + + + Restore tabs: + Відновлювати вкладки: + + + + Restore bookmarks: + Відновлювати закладки: + + + + Restore per-file settings: + Відновлювати налаштування окремих документів: + + + + min + хв. + + + + Save database interval: + Інтервал між збереженнями бази даних: + + + + Synchronize presentation: + Синхронна презентація: + + + + Default + Типові + + + + Presentation screen: + Екран презентації: + + + + Synchronize split views: + Синхронізувати розділені перегляди: + + + + Zoom factor: + Коефіцієнт масштабування: + + + + Parallel search execution: + Паралельне виконання пошуку: + + + + ms + мс + + + + None + Немає + + + + Highlight duration: + Тривалість підсвічування: + + + + Highlight color: + Колір підсвічування: + + + + Annotation color: + Колір анотацій: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + «%1» замінюється абсолютним шляхом до файлу. «%2» та «%3» замінюються номером рядка та стовпчика відповідно. + + + + Source editor: + Редактор вихідного файла: + + + + Use tiling: + Мозаїчність: + + + + Keep obsolete pixmaps: + Зберігати застарілі растрові зображення: + + + + Use device pixel ratio: + Використовувати співвідношення у пікселях пристрою: + + + + Decorate pages: + Рамка навколо сторінки: + + + + Decorate links: + Виокремлювати посилання: + + + + Decorate form fields: + Виокремлювати поля форм: + + + + Background color: + Колір тла: + + + + Paper color: + Колір паперу: + + + + Presentation background color: + Колір тла у режимі презентації: + + + + Pages per row: + Сторінок у ряд: + + + + + + px + пк + + + + Page spacing: + Між сторінками: + + + + Thumbnail spacing: + Між мініатюрами: + + + + Thumbnail size: + Розмір мініатюр: + + + + Fit to viewport + За розмірами області перегляду + + + + Document context menu: + Контекстне меню документа: + + + + Tab context menu: + Контекстне меню вкладки: + + + + Open in source editor: + Відкрити у редакторі коду: + + + + + %1 MB + %1 МБ + + + + Cache size: + Кеш: + + + + Minimal scrolling: + Мінімальне гортання: + + + + Prefetch: + Передзавантаження: + + + + Prefetch distance: + Довжина передзавантаження: + + + + Top + Вгорі + + + + Bottom + Внизу + + + + Left + Ліворуч + + + + Right + Праворуч + + + + Tab position: + Розташування вкладок: + + + + As needed + За потребою + + + + Always + Завжди + + + + Exit after last tab: + Вийти після останньої вкладки: + + + + Scrollable menus: + Меню з гортанням: + + + + Searchable menus: + Придатні до пошуку меню: + + + + Zoom to selection: + Масштабування за позначеним: + + + + + Never + Ніколи + + + + Settings + Параметри + + + + Tab visibility: + Показувати вкладки: + + + + Spread tabs: + Розтягнути вкладки: + + + + New tab next to current tab: + Нова вкладка поряд з поточною: + + + + Recently used count: + Кількість останніх відкритих: + + + + Recently closed count: + Кількість записів останніх закритих документів: + + + + Extended search dock: + Розширена панель пошуку: + + + + Toggle tool and menu bars with fullscreen: + Вимкнути панелі у повноекранному режимі: + + + + File tool bar: + Панель «Файл»: + + + + Edit tool bar: + Панель «Редагування»: + + + + View tool bar: + Панель «Перегляд»: + + + + Use page label: + Використовувати мітку сторінки: + + + + Document title as tab title: + Назва документа як заголовок вкладки: + + + + Current page in window title: + Поточна сторінка у заголовку вікна: + + + + Instance name in window title: + Назва екземпляра у заголовку вікна: + + + + Synchronize outline view: + Синхронізувати перегляд змісту: + + + + Highlight current thumbnail: + Підсвічування поточної мініатюри: + + + + Limit thumbnails to results: + Обмежити мініатюри результатами: + + + + Annotation overlay: + Накладка анотації: + + + + Form field overlay: + Накладка поля форми: + + + + Zoom: + Масштабування: + + + + Rotate: + Обертання: + + + + Scroll: + Гортання: + + + + Copy to clipboard: + Копіювання до буфера: + + + + Add annotation: + Додавання анотацій: + + + + qpdfview::ShortcutHandler + + + Action + Дія + + + + Key sequence + Комбінація клавіш + + + + Skip backward + Гортати назад + + + + Skip forward + Гортати вперед + + + + Move up + Вгору + + + + Move down + Вниз + + + + Move left + Ліворуч + + + + Move right + Праворуч + + + + qpdfview::TreeView + + + &Expand all + &Розгорнути все + + + + &Collapse all + &Згорнути все + + + diff --git a/translations/qpdfview_uz.ts b/translations/qpdfview_uz.ts new file mode 100644 index 0000000..2ab01f0 --- /dev/null +++ b/translations/qpdfview_uz.ts @@ -0,0 +1,1994 @@ + + + + Uzbek <uz@li.org> + Akmal Xushvaqov <akmalxster@gmail.com> + 2012-11-25 16:06+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Uzbek translation for qpdfview +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + + + + + Type + + + + + Embedded + + + + + Subset + + + + + File + + + + + + + + Yes + + + + + PDF version + + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + + + + + Model::PsDocument + + + Title + + + + + Created for + + + + + Creator + + + + + Creation date + + + + + Format + + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Shift and Ctrl + + + + + Shift and Alt + + + + + Ctrl and Alt + + + + + Right mouse button + + + + + Middle mouse button + + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Очиш + + + + Open in new &tab + Янги &табда очиш + + + + &Remove bookmark + Хатчўпни &ўчириш + + + + qpdfview::Database + + + Jump to page %1 + + + + + qpdfview::DocumentView + + + + Information + + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + + + + + Warning + + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + + + + + Unlock %1 + + + + + Password: + + + + + Page %1 + + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + + + + + Save and open... + + + + + Save file attachment + + + + + + Warning + + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + + + + + Find next + + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + + + + + + Could not open '%1'. + + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + + + + + Close all tabs but this one + + + + + Close all tabs to the left + + + + + Close all tabs to the right + + + + + + Open + + + + + Open in new tab + + + + + + + Could not refresh '%1'. + + + + + Save copy + + + + + Could not save copy at '%1'. + + + + + Save as + + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + + + + + Could not print '%1'. + + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + + + + + Page: + + + + + Jump to page %1 + + + + + About qpdfview + + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + + + + + Page width + + + + + Page size + + + + + Match &case + + + + + Whole &words + + + + + Highlight &all + + + + + &Open... + + + + + Open in new &tab... + + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + + + + + Save &copy... + + + + + &Print... + + + + + E&xit + + + + + &Previous page + + + + + &Next page + + + + + &First page + + + + + &Last page + + + + + &Set first page... + + + + + &Jump to page... + + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + + + + + Find previous + + + + + Find next + + + + + Cancel search + + + + + &Copy to clipboard + + + + + &Add annotation + + + + + Settings... + + + + + &Continuous + + + + + &Two pages + + + + + Two pages &with cover page + + + + + &Multiple pages + + + + + Right to left + + + + + Zoom &in + + + + + Zoom &out + + + + + Original &size + + + + + Fit to page width + + + + + Fit to page size + + + + + Rotate &left + + + + + Rotate &right + + + + + Invert colors + + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + + + + + &Fullscreen + + + + + &Presentation... + + + + + &Previous tab + + + + + &Next tab + + + + + &Close tab + + + + + Close &all tabs + + + + + Close all tabs &but current tab + + + + + Restore &most recently closed tab + + + + + &Previous bookmark + + + + + &Next bookmark + + + + + &Add bookmark + + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + + + + + &Contents + + + + + &About + + + + + + &File + + + + + + &Edit + + + + + + &View + + + + + &Outline + + + + + &Properties + + + + + &Search + + + + + &Tool bars + + + + + &Docks + + + + + &Tabs + + + + + &Bookmarks + + + + + &Help + + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + + + + + Go to page %1 of file '%2'. + + + + + Open '%1'. + + + + + Edit form field '%1'. + + + + + Copy &text + + + + + &Select text + + + + + Copy &image + + + + + Save image to &file... + + + + + Save image to file + + + + + Warning + + + + + Could not save image to file '%1'. + + + + + Add &text + + + + + Add &highlight + + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + + + + + Text antialiasing: + + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + + + + + Arthur + + + + + Backend: + + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + + + + + Page ranges: + + + + + All pages + + + + + Even pages + + + + + Odd pages + + + + + Page set: + + + + + Single page + + + + + Two pages + + + + + Four pages + + + + + Six pages + + + + + Nine pages + + + + + Sixteen pages + + + + + Number-up: + + + + + Bottom to top and left to right + + + + + Bottom to top and right to left + + + + + Left to right and bottom to top + + + + + Left to right and top to bottom + + + + + Right to left and bottom to top + + + + + Right to left and top to bottom + + + + + Top to bottom and left to right + + + + + Top to bottom and right to left + + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + + + + + &Clear list + + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + + + + + &Clear list + + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + + + + + &Behavior + + + + + &Graphics + + + + + &Interface + + + + + &Shortcuts + + + + + &Modifiers + + + + + Defaults + + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + + + + + Auto-refresh: + + + + + + + + + + + + + Effective after restart. + + + + + Track recently used: + + + + + Keep recently closed: + + + + + Restore tabs: + + + + + Restore bookmarks: + + + + + Restore per-file settings: + + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + + + + + Default + + + + + Presentation screen: + + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + + + + + Highlight duration: + + + + + Highlight color: + + + + + Annotation color: + + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + + + + + Paper color: + + + + + Presentation background color: + + + + + Pages per row: + + + + + + + px + + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + + + + + Cache size: + + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + + + + + Bottom + + + + + Left + + + + + Right + + + + + Tab position: + + + + + As needed + + + + + Always + + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + + + + + Settings + + + + + Tab visibility: + + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + + + + + Rotate: + + + + + Scroll: + + + + + Copy to clipboard: + + + + + Add annotation: + + + + + qpdfview::ShortcutHandler + + + Action + + + + + Key sequence + + + + + Skip backward + + + + + Skip forward + + + + + Move up + + + + + Move down + + + + + Move left + + + + + Move right + + + + + qpdfview::TreeView + + + &Expand all + + + + + &Collapse all + + + + diff --git a/translations/qpdfview_vi.ts b/translations/qpdfview_vi.ts new file mode 100644 index 0000000..5735371 --- /dev/null +++ b/translations/qpdfview_vi.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + + + + + Size + + + + + Resolution + + + + + Depth + + + + + + + + + + Format + Định dạng + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + + + + + 32 bits ARGB + + + + + 16 bits RGB + + + + + 24 bits RGB + + + + + Model::PdfDocument + + + Linearized + + + + + Name + Tên + + + + Type + Thể loại + + + + Embedded + Embedded + + + + Subset + Subset + + + + File + Tệp + + + + + + + Yes + Vâng + + + + PDF version + + + + + Encrypted + + + + + + + + No + Không + + + + Model::PdfPage + + + Information + Thông tin + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + Phiên bản 0.20.1 hoặc cao thơn của thư viện Poppler để thêm hoặc xóa ghi chú. + + + + Model::PsDocument + + + Title + Tiêu đề + + + + Created for + Tạo ra cho + + + + Creator + Tác giả + + + + Creation date + Ngày tạo + + + + Format + Định dạng + + + + Language level + Cấp độ ngôn ngữ + + + + QObject + + + An empty instance name is not allowed. + Không cho phép tên để trống + + + + An empty search text is not allowed. + Không cho phép tìm văn bản trống + + + + Unknown command-line option '%1'. + Không rõ tùy chọn dòng lệnh '%1'. + + + + Using '--instance' requires an instance name. + Sử dụng '--instance' bắt buộc tên yêu càu + + + + Using '--instance' is not allowed without using '--unique'. + Using '--instance' is not allowed without using '--unique'. + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + Using '--search' requires a search text. + Using '--search' requires a search text. + + + + Could not prepare signal handler. + Không thể nhận tín hiệu. + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift và Ctrl + + + + Shift and Alt + Shift và Alt + + + + Ctrl and Alt + Ctrl và Alt + + + + Right mouse button + + + + + Middle mouse button + + + + + None + Trống + + + + qpdfview::BookmarkDialog + + + Bookmark + + + + + Page: + Trang: + + + + Label: + + + + + Comment: + + + + + Modified: + + + + + qpdfview::BookmarkMenu + + + &Open + &Mở + + + + Open in new &tab + Mở &trong thẻ mới + + + + &Remove bookmark + &Bỏ đánh dấu + + + + qpdfview::Database + + + Jump to page %1 + Đến trang %1 + + + + qpdfview::DocumentView + + + + Information + Thông tin + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + Không cho phép mở URL trong thiết đặt + + + + Warning + Cảnh báo + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + Đang in '%1' + + + + Unlock %1 + Mở khóa %1 + + + + Password: + Mật khẩu: + + + + Page %1 + Trang %1 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + Lưu... + + + + Save and open... + Lưu và mở... + + + + Save file attachment + Lưu tệp đính kèm + + + + + Warning + Cảnh báo + + + + Could not open file attachment saved to '%1'. + Không thể mở tệp đính kèm được lưu vào '%1'. + + + + Could not save file attachment to '%1'. + Không thể lưu tệp đính kèm cho '%1'. + + + + qpdfview::FontsDialog + + + Fonts + + + + + qpdfview::HelpDialog + + + Help + + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help.html + + + + Find previous + Tìm ngược + + + + Find next + Tìm tiếp + + + + qpdfview::MainWindow + + + Toggle tool bars + + + + + Toggle menu bar + + + + + + + + + + + + + + + Warning + Cảnh báo + + + + + Could not open '%1'. + Không thể mở '%1'. + + + + Copy file path + + + + + Select file path + + + + + Close all tabs + Đóng tất cả cá thẻ + + + + Close all tabs but this one + Đóng tất cả trừ thẻ này + + + + Close all tabs to the left + Đóng tất cả thẻ bên trái + + + + Close all tabs to the right + Đóng tất cả thẻ bên phải + + + + + Open + Mở + + + + Open in new tab + Mở trong thẻ mới + + + + + + Could not refresh '%1'. + Không thể làm tươi '%1'. + + + + Save copy + Lưu bản sao + + + + Could not save copy at '%1'. + Không thể lưu bản sao tại '%1.' + + + + Save as + Lưu với tên khác + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + Không thể lưu với tên '%1'. + + + + Could not print '%1'. + Không thể in '%1'. + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + Đến trang + + + + Page: + Trang: + + + + Jump to page %1 + Đến trang %1 + + + + About qpdfview + Về qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview là trình xem tài liệu theo thẻ viết bằng Qt.</p><p>Phiên bản này bao gồm:<ul> + + + + <li>PDF support using Poppler %1</li> + + + + + <li>PS support using libspectre %1</li> + + + + + <li>DjVu support using DjVuLibre %1</li> + + + + + <li>PDF support using Fitz %1</li> + + + + + <li>Printing support using CUPS %1</li> + + + + + &Edit bookmark + + + + + The document '%1' has been modified. Do you want to save your changes? + Tài liệu '%1' đã bị sửa đổi. Có muốn lưu các thay đổi của bạn? + + + + Page width + Độ rộng trang + + + + Page size + Kích thươc trang + + + + Match &case + &Khớp từ + + + + Whole &words + + + + + Highlight &all + Tô &sáng tất cả + + + + &Open... + &Mở + + + + Open in new &tab... + Mở &trong thẻ mới + + + + Open &copy in new tab + + + + + Move to &instance... + + + + + &Refresh + Là&m tươi + + + + Information + Thông tin + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + Lưu &với tên... + + + + Save &copy... + + + + + &Print... + &In + + + + E&xit + T&hoát + + + + &Previous page + T&rang trước + + + + &Next page + Trang &kế + + + + &First page + Tr&ang đầu + + + + &Last page + Trang &cuối + + + + &Set first page... + + + + + &Jump to page... + Đế&n trang + + + + Jump &backward + &Lùi + + + + Jump for&ward + &Tiến + + + + &Search... + Tìm... + + + + Find previous + Tìm ngược + + + + Find next + Tìm tiếp + + + + Cancel search + Hủy tìm kiếm + + + + &Copy to clipboard + Chếp &vào bộ nhớ đệm + + + + &Add annotation + Thêm &ghi chú + + + + Settings... + Thiết lập... + + + + &Continuous + Tiếp nối + + + + &Two pages + Hai trang + + + + Two pages &with cover page + Hai trang với khung + + + + &Multiple pages + Nhiều trang + + + + Right to left + Phải sang trái + + + + Zoom &in + &Phóng to + + + + Zoom &out + &Thu nhỏ + + + + Original &size + &Kích thước gốc + + + + Fit to page width + Khít theo độ &rộng trang + + + + Fit to page size + Khít theo kích &thước trang + + + + Rotate &left + X&oay qua trái + + + + Rotate &right + Xoa&y qua phải + + + + Invert colors + Đảo màu + + + + Convert to grayscale + + + + + Trim margins + + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + Font chữ + + + + &Fullscreen + Toàn màn &hình + + + + &Presentation... + Trình chiế&u + + + + &Previous tab + Thẻ trước + + + + &Next tab + Thẻ kế + + + + &Close tab + Đóng thẻ + + + + Close &all tabs + Đóng tất cả thẻ + + + + Close all tabs &but current tab + Đóng tất cả trù thẻ này + + + + Restore &most recently closed tab + + + + + &Previous bookmark + Đánh dấu trướ&c + + + + &Next bookmark + Đánh dấ&u tiếp + + + + &Add bookmark + &Thêm đánh dấu + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + + + + + Book&marks + + + + + Composition + + + + + + &Remove bookmark + &Bỏ đánh dấu + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + + + + + &Save + + + + + Remove all bookmarks + Bỏ tất cả đánh dấu + + + + &Contents + &Mục + + + + &About + Thông t&in + + + + + &File + &Tệp + + + + + &Edit + &Sửa + + + + + &View + &Xem + + + + &Outline + &Dàn bài + + + + &Properties + T&huộc tính + + + + &Search + &Tìm kiếm + + + + &Tool bars + Thanh &công cụ + + + + &Docks + Thanh &neo + + + + &Tabs + &Thẻ + + + + &Bookmarks + Đánh &dấu + + + + &Help + &Giúp đỡ + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + Đến trang %1. + + + + Go to page %1 of file '%2'. + Đến trang %1 hoặc '%2'. + + + + Open '%1'. + Mở '%1'. + + + + Edit form field '%1'. + Sửa biểu mẫu '%1'. + + + + Copy &text + Sao chép &văn bản + + + + &Select text + + + + + Copy &image + Sao chép &hình + + + + Save image to &file... + Lưu hình vào &tệp... + + + + Save image to file + Lưu hình vào tệp + + + + Warning + Cảnh báo + + + + Could not save image to file '%1'. + Không thể lưu hình vào tệp '%1'. + + + + Add &text + Thêm văn bản + + + + Add &highlight + Thêm tô sáng + + + + &Copy link address + + + + + &Select link address + + + + + &Remove annotation + Bỏ ghi chú + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + Khử răng cưa + + + + Text antialiasing: + Khử răng cưa cho văn bản + + + + + None + Trống + + + + Full + Đầy + + + + Reduced + Giảm bớt + + + + + Text hinting: + Gợi ý văn bản: + + + + Ignore paper color: + + + + + Overprint preview: + Xem trước khi in: + + + + Solid + Đặc + + + + Shaped + Sắc nét + + + + Thin line mode: + Chế độ dòng mảnh: + + + + Splash + Nháy + + + + Arthur + Arthur + + + + Backend: + Bổ trợ: + + + + qpdfview::PluginHandler + + + Image (%1) + + + + + Compressed (%1) + + + + + Supported formats (%1) + + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + Không thể khớp loại tệp của '%1'! + + + + Critical + Xung đột + + + + Could not load plug-in for file type '%1'! + Không thể tải phần bổ trợ cho loại tệp '%1'! + + + + qpdfview::PrintDialog + + + Fit to page: + Vừa khít trang: + + + + Page ranges: + Khoảng trang: + + + + All pages + Tất cả trang + + + + Even pages + Trang sự kiện + + + + Odd pages + Trang odd + + + + Page set: + Trang đặt: + + + + Single page + 1 trang + + + + Two pages + 2 trang + + + + Four pages + 4 trang + + + + Six pages + 6 trang + + + + Nine pages + 9 trang + + + + Sixteen pages + 16 trang + + + + Number-up: + Số-trên: + + + + Bottom to top and left to right + Dưới lên trên và trái qua phải + + + + Bottom to top and right to left + Dưới lên trên và phải qua trái + + + + Left to right and bottom to top + Trái qua phải và dưới lên trên + + + + Left to right and top to bottom + Trái qua phải và trên xuống dưới + + + + Right to left and bottom to top + Phải qua trái và dưới lên trên + + + + Right to left and top to bottom + Phải qua trái và trên xuống dưới + + + + Top to bottom and left to right + Trên xuống dưới và trái qua phải + + + + Top to bottom and right to left + Trên xuống dưới và phải qua trái + + + + Number-up layout: + Number-up layout: + + + + Extended options + Tùy chọn mở rộng + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + Số bit khử răng cưa đồ họa: + + + + Text antialias bits: + Số bit khử răng cưa văn bản: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + Hiện tại đã đóng + + + + &Clear list + &Xóa danh sách + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + Hiện tại đang dùng + + + + &Clear list + &Xóa danh sách + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + + + + + qpdfview::SettingsDialog + + + General + Chung + + + + &Behavior + &Hành vi + + + + &Graphics + Đồ &họa + + + + &Interface + &Giao diện + + + + &Shortcuts + &Phím tắt + + + + &Modifiers + &Bổ trợ + + + + Defaults + Mặc định + + + + Defaults on current tab + Mặc định từ thẻ này + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + Mở URL: + + + + Auto-refresh: + Tự làm tươi: + + + + + + + + + + + + Effective after restart. + Có hiệu lực sau khi khởi động lại + + + + Track recently used: + Khe hiện tại được sử dụng: + + + + Keep recently closed: + Giữ hiện tại đã đóng + + + + Restore tabs: + Khôi phục thẻ: + + + + Restore bookmarks: + Khôi phục đánh dấu: + + + + Restore per-file settings: + Khôi phục thiết đặt mỗi tệp: + + + + min + + + + + Save database interval: + + + + + Synchronize presentation: + Đồng bộ hóa trình chiếu: + + + + Default + Mặc định + + + + Presentation screen: + Màn hình trình chiếu: + + + + Synchronize split views: + + + + + Zoom factor: + + + + + Parallel search execution: + + + + + ms + + + + + None + Trống + + + + Highlight duration: + Thời gian tô sáng: + + + + Highlight color: + Màu tô sáng: + + + + Annotation color: + Màu ghi chú: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1' được thay bằng đường dẫn tập tin tuyệt đối. '%2' resp. '%3' được thay thế bằng dòng resp. số cột. + + + + Source editor: + Soạn thảo mã nguồn: + + + + Use tiling: + + + + + Keep obsolete pixmaps: + Giữ pixmap lỗi thời: + + + + Use device pixel ratio: + Sử dụng tỉ lệ pixel của thiết bị + + + + Decorate pages: + Decorate pages: + + + + Decorate links: + Decorate links: + + + + Decorate form fields: + Decorate form fields: + + + + Background color: + Màu nền: + + + + Paper color: + Màu giấy: + + + + Presentation background color: + Màu nền trình chiếu: + + + + Pages per row: + Số trang mỗi dòng: + + + + + + px + + + + + Page spacing: + Khoảng cách trang: + + + + Thumbnail spacing: + Khoảng cách hình thu nhỏ: + + + + Thumbnail size: + Kích cỡ hình thu nhỏ: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 Mb + + + + Cache size: + Kích thước đệm + + + + Minimal scrolling: + + + + + Prefetch: + Prefetch: + + + + Prefetch distance: + Prefetch distance: + + + + Top + Trên + + + + Bottom + Dưới + + + + Left + Trái + + + + Right + Phải + + + + Tab position: + Vị trí thẻ: + + + + As needed + Nếu cần thiết + + + + Always + Luôn luôn + + + + Exit after last tab: + + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + Không bao giờ + + + + Settings + + + + + Tab visibility: + Ẩn thẻ: + + + + Spread tabs: + Dàn trải thẻ + + + + New tab next to current tab: + Thẻ mới đến thẻ này: + + + + Recently used count: + Đếm số hiện tại đang sử dụng: + + + + Recently closed count: + Số lượng hiện tại đã đóng: + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + Thanh công cụ tệp: + + + + Edit tool bar: + Thanh công cụ chỉnh sửa: + + + + View tool bar: + Thanh công cụ xem: + + + + Use page label: + + + + + Document title as tab title: + Tiêu đề tài liệu như tiêu đề thẻ + + + + Current page in window title: + Trang hiện tại trong tiêu đề cửa sổ: + + + + Instance name in window title: + Tên yêu cầu trong tiêu đề cửa sổ: + + + + Synchronize outline view: + Đồng bộ hóa xem phác thảo: + + + + Highlight current thumbnail: + Làm nổi bật hình ảnh thu nhỏ hiện tại: + + + + Limit thumbnails to results: + Giới hạn hình thu nhỏ đến: + + + + Annotation overlay: + Annotation overlay: + + + + Form field overlay: + Form field overlay: + + + + Zoom: + Thu phóng: + + + + Rotate: + Xoay: + + + + Scroll: + Cuộn: + + + + Copy to clipboard: + Chép vào bộ nhớ đệm: + + + + Add annotation: + Thêm chú thích: + + + + qpdfview::ShortcutHandler + + + Action + Hành động + + + + Key sequence + Dãy phím + + + + Skip backward + Bỏ trước đó + + + + Skip forward + Bỏ kế tiếp + + + + Move up + Di chuyển lên + + + + Move down + Di chuyển xuống + + + + Move left + Di chuyển qua trái + + + + Move right + Di chuyển qua phải + + + + qpdfview::TreeView + + + &Expand all + &Bung ra + + + + &Collapse all + &Thu lại + + + diff --git a/translations/qpdfview_zh_CN.ts b/translations/qpdfview_zh_CN.ts new file mode 100644 index 0000000..4896769 --- /dev/null +++ b/translations/qpdfview_zh_CN.ts @@ -0,0 +1,1980 @@ + + + + + Model::ImageDocument + + + Image (%1) + 图片 (%1) + + + + Size + 尺寸 + + + + Resolution + 分辨率 + + + + Depth + 色深 + + + + + + + + + Format + 格式 + + + + Monochrome + 单色 + + + + Indexed + 索引 + + + + 32 bits RGB + 32位 RGB + + + + 32 bits ARGB + 32位 ARGB + + + + 16 bits RGB + 16位 RGB + + + + 24 bits RGB + 24位 RGB + + + + Model::PdfDocument + + + Linearized + 线性化的 + + + + Name + 名称 + + + + Type + 类型 + + + + Embedded + 嵌入 + + + + Subset + 子集 + + + + File + 文件 + + + + + + + Yes + + + + + PDF version + PDF 版本 + + + + Encrypted + 已加密 + + + + + + + No + + + + + Model::PdfPage + + + Information + 信息 + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + 添加或删除注释需要 0.20.1 或更高版本的 Poppler 库。 + + + + Model::PsDocument + + + Title + 标题 + + + + Created for + 创建 + + + + Creator + 创建人 + + + + Creation date + 创建日期 + + + + Format + 格式 + + + + Language level + 语言水平 + + + + QObject + + + An empty instance name is not allowed. + 实例名不许为空。 + + + + An empty search text is not allowed. + 搜索词不许为空。 + + + + Unknown command-line option '%1'. + 未知命令行选项 '%1'。 + + + + Using '--instance' requires an instance name. + 使用 '--instance' 需要一个实例名。 + + + + Using '--instance' is not allowed without using '--unique'. + 使用了 '--instance' 不运行不用 '--unique'。 + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + 一个实例名必须只包含字符 "[A-Z][a-z][0-9]_",并且不能以数字开头。 + + + + Using '--search' requires a search text. + 使用 '--search' 需要一个搜索词。 + + + + Could not prepare signal handler. + 无法准备信号处理器。 + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift 和 Ctrl + + + + Shift and Alt + Shift 和 Alt + + + + Ctrl and Alt + Ctrl 和 Alt + + + + Right mouse button + 鼠标右键 + + + + Middle mouse button + 鼠标中键 + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + 书签 + + + + Page: + 页: + + + + Label: + 标签: + + + + Comment: + 备注: + + + + Modified: + 修改: + + + + qpdfview::BookmarkMenu + + + &Open + 打开(&O) + + + + Open in new &tab + 在新标签中打开(&T) + + + + &Remove bookmark + 移除书签(&R) + + + + qpdfview::Database + + + Jump to page %1 + 跳到第%1页 + + + + qpdfview::DocumentView + + + + Information + 信息 + + + + The source editor has not been set. + 未设置源编辑器。 + + + + Opening URL is disabled in the settings. + 在设置中已经禁用打开 URL。 + + + + Warning + 警告 + + + + + SyncTeX data for '%1' could not be found. + 找不到 “%1” 的 SyncTeX 数据 + + + + Printing '%1'... + 正在打印“%1”... + + + + Unlock %1 + 解锁 %1 + + + + Password: + 密码: + + + + Page %1 + 第 %1 页 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + 保存... + + + + Save and open... + 保存并打开... + + + + Save file attachment + 保存附件... + + + + + Warning + 警告 + + + + Could not open file attachment saved to '%1'. + 打开文件附件不能保存到 '%1'。 + + + + Could not save file attachment to '%1'. + 无法保存附件到"%1"。 + + + + qpdfview::FontsDialog + + + Fonts + 字体 + + + + qpdfview::HelpDialog + + + Help + 帮助 + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + help_zh_CN.html + + + + Find previous + 查找上一个 + + + + Find next + 查找下一个 + + + + qpdfview::MainWindow + + + Toggle tool bars + 显示/隐藏工具条 + + + + Toggle menu bar + 显示/隐藏菜单条 + + + + + + + + + + + + + + Warning + 警告 + + + + + Could not open '%1'. + 无法打开“%1”。 + + + + Copy file path + 复制文件路径 + + + + Select file path + 选择文件路径 + + + + Close all tabs + 关闭全部标签页 + + + + Close all tabs but this one + 关闭当前标签外的所有标签 + + + + Close all tabs to the left + 关闭左侧的标签页 + + + + Close all tabs to the right + 关闭右侧的标签页 + + + + + Open + 打开 + + + + Open in new tab + 在新标签页中打开 + + + + + + Could not refresh '%1'. + 无法刷新“%1”。 + + + + Save copy + 保存副本 + + + + Could not save copy at '%1'. + 无法在“%1”保存副本。 + + + + Save as + 另存为 + + + + + Move to instance + 移动到实例 + + + + + Failed to access instance '%1'. + 无法访问实例“%1”。 + + + + + + Could not save as '%1'. + 无法保存为“%1”。 + + + + Could not print '%1'. + 无法打印“%1”。 + + + + Set first page + 设置首页 + + + + Select the first page of the body matter: + 选择版面的首页: + + + + Jump to page + 跳到页面 + + + + Page: + 页: + + + + Jump to page %1 + 跳到第%1页 + + + + About qpdfview + 关于 qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview 是一款使用 Qt 的标签式文档查看器。</p><p>该版本包括:<ul> + + + + <li>PDF support using Poppler %1</li> + <li> PDF 由 Poppler %1 支持</li> + + + + <li>PS support using libspectre %1</li> + <li> PS 由 libspectre %1 支持</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu 由 DjVuLibre %1 支持</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF 由 Fitz %1 支持</li> + + + + <li>Printing support using CUPS %1</li> + <li>打印由 CUPS %1 支持</li> + + + + &Edit bookmark + 编辑书签(&E) + + + + The document '%1' has been modified. Do you want to save your changes? + 文件 %1 已被修改,你想要保存你的修改吗? + + + + Page width + 页面宽度 + + + + Page size + 页面大小 + + + + Match &case + 匹配大小写(&C) + + + + Whole &words + 整个词(&w) + + + + Highlight &all + 全部高亮(&A) + + + + &Open... + 打开(&O)... + + + + Open in new &tab... + 在新标签中打开(&T)... + + + + Open &copy in new tab + 在新标签页打开副本(&C) + + + + Move to &instance... + 移动到实例(&I)... + + + + &Refresh + 刷新(&R) + + + + Information + 信息 + + + + Instance-to-instance communication requires D-Bus support. + 实例到实例的通信需要 D-Bus 支持。 + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + </ul><p>请访问 <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> 以了解更多信息。</p><p>&copy; %1 qpdfview 开发者</p> + + + + Save &as... + 另存为(&A)... + + + + Save &copy... + 保存副本(&C)... + + + + &Print... + 打印(&P)... + + + + E&xit + 退出(&X) + + + + &Previous page + 上一页(&P) + + + + &Next page + 下一页(&N) + + + + &First page + 第一页(&F) + + + + &Last page + 最后一页(&L) + + + + &Set first page... + 设置首页(&S)... + + + + &Jump to page... + 跳到页面(&J)... + + + + Jump &backward + 向后跳至(&B) + + + + Jump for&ward + 向前跳至(&W) + + + + &Search... + 搜索(&S)... + + + + Find previous + 查找上一个 + + + + Find next + 查找下一个 + + + + Cancel search + 取消搜索 + + + + &Copy to clipboard + 复制到剪贴板(&C) + + + + &Add annotation + 添加注释(&A) + + + + Settings... + 设置... + + + + &Continuous + 连续(&C) + + + + &Two pages + 2 页(&T) + + + + Two pages &with cover page + 双页带有封面(&W) + + + + &Multiple pages + 多页(&M) + + + + Right to left + 从右到左 + + + + Zoom &in + 放大(&I) + + + + Zoom &out + 缩小(&O) + + + + Original &size + 原始尺寸(&S) + + + + Fit to page width + 适合页宽 + + + + Fit to page size + 适合页面大小 + + + + Rotate &left + 左旋转(&L) + + + + Rotate &right + 右旋转(&R) + + + + Invert colors + 反色 + + + + Convert to grayscale + 转换为灰度 + + + + Trim margins + 修剪边距 + + + + Darken with paper color + 用纸色变暗 + + + + Lighten with paper color + 用纸色变亮 + + + + Fonts... + 字体... + + + + &Fullscreen + 全屏(&F) + + + + &Presentation... + 幻灯(&P)... + + + + &Previous tab + 上一标签(&P) + + + + &Next tab + 下一标签(&N) + + + + &Close tab + 关闭标签(&C) + + + + Close &all tabs + 关闭全部标签(&A) + + + + Close all tabs &but current tab + 关闭当前标签外的全部标签(&B) + + + + Restore &most recently closed tab + 还原最近关闭的标签(&m) + + + + &Previous bookmark + 上一书签(&P) + + + + &Next bookmark + 下一书签(&N) + + + + &Add bookmark + 添加书签(&A) + + + + Open copy in new &window + 在新窗口中打开副本(&W) + + + + Split view horizontally... + 水平分割视图... + + + + Split view vertically... + 垂直分割视图... + + + + Close current view + 关闭当前视图 + + + + Thumb&nails + 缩略图(&N) + + + + Book&marks + 书签(&M) + + + + Composition + 合成 + + + + + &Remove bookmark + 移除书签(&R) + + + + Edit '%1' at %2,%3... + 在 %2,%3 编辑 '%1' ... + + + + Open containing &folder + 打开文档所在目录 + + + + &Save + 保存(&s) + + + + Remove all bookmarks + 移除全部书签 + + + + &Contents + 内容(&C) + + + + &About + 关于(&A) + + + + + &File + 文件(&F) + + + + + &Edit + 编辑(&E) + + + + + &View + 查看(&V) + + + + &Outline + 大纲(&O) + + + + &Properties + 属性(&P) + + + + &Search + 搜索(&S) + + + + &Tool bars + 工具栏(&T) + + + + &Docks + &Docks + + + + &Tabs + 标签(&T) + + + + &Bookmarks + 书签(&B) + + + + &Help + 帮助(&H) + + + + + Choose instance + 选择实例 + + + + + Instance: + 实例: + + + + qpdfview::PageItem + + + Go to page %1. + 转到 %1 页。 + + + + Go to page %1 of file '%2'. + 转到文件“%2”第 %1 页。 + + + + Open '%1'. + 打开“%1”。 + + + + Edit form field '%1'. + 编辑表格字段“%1”。 + + + + Copy &text + 复制文本(&T) + + + + &Select text + 选择文本(&S) + + + + Copy &image + 复制图像(&I) + + + + Save image to &file... + 保存图像到文件(&F)... + + + + Save image to file + 保存图像到文件 + + + + Warning + 警告 + + + + Could not save image to file '%1'. + 无法保存图像到文件“%1”。 + + + + Add &text + 添加文本(&T) + + + + Add &highlight + 添加高亮(&H) + + + + &Copy link address + 复制链接地址(&C) + + + + &Select link address + 选择链接地址(&S) + + + + &Remove annotation + 移除注释(&R) + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + 抗锯齿: + + + + Text antialiasing: + 文本抗锯齿: + + + + + None + + + + + Full + 完全 + + + + Reduced + 减少 + + + + + Text hinting: + 文字提示: + + + + Ignore paper color: + 忽略纸色: + + + + Overprint preview: + 打印预览: + + + + Solid + 实体 + + + + Shaped + 形状 + + + + Thin line mode: + 细线模式: + + + + Splash + 闪屏 + + + + Arthur + 亚瑟 + + + + Backend: + 后端: + + + + qpdfview::PluginHandler + + + Image (%1) + 图片 (%1) + + + + Compressed (%1) + 已压缩(%1) + + + + Supported formats (%1) + 支持的格式 (%1) + + + + Could not decompress '%1'! + 无法解压缩“%1”! + + + + Could not match file type of '%1'! + 不能匹配 '%1' 的文件类型! + + + + Critical + 严重 + + + + Could not load plug-in for file type '%1'! + 不能为文件类型 '%1'加载插件! + + + + qpdfview::PrintDialog + + + Fit to page: + 适合页面: + + + + Page ranges: + 页数范围: + + + + All pages + 全部页面 + + + + Even pages + 偶数页 + + + + Odd pages + 奇数页 + + + + Page set: + 页面设置: + + + + Single page + 单页 + + + + Two pages + 双页 + + + + Four pages + 4 页 + + + + Six pages + 6 页 + + + + Nine pages + 9 页 + + + + Sixteen pages + 16 页 + + + + Number-up: + 数字式: + + + + Bottom to top and left to right + 下到上,左到右 + + + + Bottom to top and right to left + 下到上,右到左 + + + + Left to right and bottom to top + 左到右,下到上 + + + + Left to right and top to bottom + 左到右,上到下 + + + + Right to left and bottom to top + 右到左,下到上 + + + + Right to left and top to bottom + 右到左,上到小 + + + + Top to bottom and left to right + 上到下,左到右 + + + + Top to bottom and right to left + 上到下,右到左 + + + + Number-up layout: + 数字式布局: + + + + Extended options + 扩展选项 + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + 图像反锯齿位: + + + + Text antialias bits: + 文本反锯齿位: + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + 最近关闭(&R) + + + + &Clear list + 清空列表(&C) + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + 最近使用的(&U) + + + + &Clear list + 清理列表(&C) + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + <b>%1</b> 发生 + + + + <b>%1</b> occurrences on page <b>%2</b> + <b>%1</b> 发生在页面 <b>%2</b> + + + + qpdfview::SearchableMenu + + + Search for '%1'... + 搜索 '%1'... + + + + qpdfview::SettingsDialog + + + General + 常规 + + + + &Behavior + 行为(&B) + + + + &Graphics + 图形(&G) + + + + &Interface + 界面(&I) + + + + &Shortcuts + 快捷键(&S) + + + + &Modifiers + 修饰键(&M) + + + + Defaults + 默认 + + + + Defaults on current tab + 在当前选项卡的默认值 + + + + Mouse wheel modifiers + 鼠标滚轮修饰 + + + + Mouse button modifiers + 鼠标按钮修饰 + + + + Open URL: + 打开 URL: + + + + Auto-refresh: + 自动刷新: + + + + + + + + + + + + Effective after restart. + 重新启动后生效。 + + + + Track recently used: + 记录最近使用的: + + + + Keep recently closed: + 记录最近关闭的: + + + + Restore tabs: + 恢复标签: + + + + Restore bookmarks: + 恢复书签: + + + + Restore per-file settings: + 恢复先前的文件设置: + + + + min + + + + + Save database interval: + 保存数据库的时间间隔: + + + + Synchronize presentation: + 同步演示: + + + + Default + 默认 + + + + Presentation screen: + 演示画面: + + + + Synchronize split views: + 同步分割视图: + + + + Zoom factor: + 缩放系数: + + + + Parallel search execution: + 并行执行搜索: + + + + ms + 毫秒 + + + + None + + + + + Highlight duration: + 高亮时长: + + + + Highlight color: + 高亮颜色: + + + + Annotation color: + 注释颜色: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + '%1'由绝对文件路径替换。 '%2' '%3'由行代替。列号。 + + + + Source editor: + 源编辑器: + + + + Use tiling: + 使用平铺: + + + + Keep obsolete pixmaps: + 保持过时像素图: + + + + Use device pixel ratio: + 使用设备像素比: + + + + Decorate pages: + 装饰页面: + + + + Decorate links: + 装饰链接: + + + + Decorate form fields: + 装饰表格字段: + + + + Background color: + 背景色: + + + + Paper color: + 页面颜色: + + + + Presentation background color: + 演示背景色: + + + + Pages per row: + 每行页数: + + + + + + px + 像素 + + + + Page spacing: + 页间距: + + + + Thumbnail spacing: + 缩略图间隔: + + + + Thumbnail size: + 缩略图大小: + + + + Fit to viewport + 适合视口 + + + + Document context menu: + 文档上下文菜单: + + + + Tab context menu: + 标签上下文菜单: + + + + Open in source editor: + 在源代码编辑器中打开: + + + + + %1 MB + %1 MB + + + + Cache size: + 缓存大小: + + + + Minimal scrolling: + 最小滚动: + + + + Prefetch: + 预取: + + + + Prefetch distance: + 预取距离: + + + + Top + 顶部 + + + + Bottom + 底部 + + + + Left + 左侧 + + + + Right + 右侧 + + + + Tab position: + 标签位置: + + + + As needed + 根据需要 + + + + Always + 总是 + + + + Exit after last tab: + 关闭最后一个标签后退出: + + + + Scrollable menus: + 滚动菜单: + + + + Searchable menus: + 可搜索的菜单: + + + + Zoom to selection: + 缩放到选择: + + + + + Never + 从不 + + + + Settings + 设置 + + + + Tab visibility: + 标签可视: + + + + Spread tabs: + 扩展标签 + + + + New tab next to current tab: + 新建与当前标签相邻的标签: + + + + Recently used count: + 最近使用数: + + + + Recently closed count: + 最近关闭数: + + + + Extended search dock: + 扩展搜索条: + + + + Toggle tool and menu bars with fullscreen: + 全屏时显示/隐藏工具条和菜单条 + + + + File tool bar: + 文件工具栏: + + + + Edit tool bar: + 编辑工具栏: + + + + View tool bar: + 查看工具栏: + + + + Use page label: + 使用页面标签: + + + + Document title as tab title: + 文档标题作为分页标题: + + + + Current page in window title: + 在窗口标题显示当前页数 + + + + Instance name in window title: + 在窗口标题显示实例名 + + + + Synchronize outline view: + 同步大纲视图: + + + + Highlight current thumbnail: + 高亮当前缩略图: + + + + Limit thumbnails to results: + 限制缩略图的结果: + + + + Annotation overlay: + 注释叠加: + + + + Form field overlay: + 表单字段叠加: + + + + Zoom: + 缩放: + + + + Rotate: + 旋转: + + + + Scroll: + 滚屏: + + + + Copy to clipboard: + 复制到剪贴板: + + + + Add annotation: + 添加注释: + + + + qpdfview::ShortcutHandler + + + Action + 动作 + + + + Key sequence + 按钮顺序 + + + + Skip backward + 向后跳转 + + + + Skip forward + 快进 + + + + Move up + 上移 + + + + Move down + 下移 + + + + Move left + 左移 + + + + Move right + 右移 + + + + qpdfview::TreeView + + + &Expand all + 展开全部(&E) + + + + &Collapse all + 关闭全部(&C) + + + diff --git a/translations/qpdfview_zh_TW.ts b/translations/qpdfview_zh_TW.ts new file mode 100644 index 0000000..55278e3 --- /dev/null +++ b/translations/qpdfview_zh_TW.ts @@ -0,0 +1,2001 @@ + + + + Chinese (Traditional) <zh_TW@li.org> + Hsiu-Ming Chang <cges30901@gmail.com> + 2016-08-17 07:50+0000 + 2018-05-27 11:51+0000 + qpdfview + FULL NAME <EMAIL@ADDRESS> + 2018-05-28 05:33+0000 + # Chinese (Traditional) translation for qpdfview +# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016 +# This file is distributed under the same license as the qpdfview package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2016. +# + Project-Id-Version,Report-Msgid-Bugs-To,POT-Creation-Date,PO-Revision-Date,Last-Translator,Language-Team,MIME-Version,Content-Type,Content-Transfer-Encoding,X-Launchpad-Export-Date,X-Qt-Contexts,X-Language,X-Source-Language + + Model::ImageDocument + + + Image (%1) + 圖片 (%1) + + + + Size + + + + + Resolution + 解析度 + + + + Depth + 深度 + + + + + + + + + Format + 格式 + + + + Monochrome + + + + + Indexed + + + + + 32 bits RGB + 32 位元 RGB + + + + 32 bits ARGB + 32 位元 ARGB + + + + 16 bits RGB + 16 位元 RGB + + + + 24 bits RGB + 24 位元 RGB + + + + Model::PdfDocument + + + Linearized + + + + + Name + 名稱 + + + + Type + 類型 + + + + Embedded + 嵌入 + + + + Subset + 子集 + + + + File + 檔案 + + + + + + + Yes + + + + + PDF version + PDF 版本 + + + + Encrypted + + + + + + + + No + + + + + Model::PdfPage + + + Information + 資訊 + + + + Version 0.20.1 or higher of the Poppler library is required to add or remove annotations. + 加入或刪除注釋需要 0.20.1 或更高版本的 Poppler 函式庫。 + + + + Model::PsDocument + + + Title + 標題 + + + + Created for + + + + + Creator + 建立者 + + + + Creation date + 建立日期 + + + + Format + 格式 + + + + Language level + + + + + QObject + + + An empty instance name is not allowed. + + + + + An empty search text is not allowed. + + + + + Unknown command-line option '%1'. + 未知的命令列選項 '%1'。 + + + + Using '--instance' requires an instance name. + + + + + Using '--instance' is not allowed without using '--unique'. + + + + + An instance name must only contain the characters "[A-Z][a-z][0-9]_" and must not begin with a digit. + + + + + Using '--search' requires a search text. + + + + + Could not prepare signal handler. + + + + + QShortcut + + + Shift + Shift + + + + Ctrl + Ctrl + + + + Alt + Alt + + + + Shift and Ctrl + Shift 和 Ctrl + + + + Shift and Alt + Shift 和 Alt + + + + Ctrl and Alt + Ctrl 和 Alt + + + + Right mouse button + 滑鼠右鍵 + + + + Middle mouse button + 滑鼠中鍵 + + + + None + + + + + qpdfview::BookmarkDialog + + + Bookmark + 書籤 + + + + Page: + 頁: + + + + Label: + 標籤: + + + + Comment: + 備註: + + + + Modified: + 修改時間: + + + + qpdfview::BookmarkMenu + + + &Open + 開啟(&O) + + + + Open in new &tab + 在新分頁中開啟(&T) + + + + &Remove bookmark + 移除書籤(&R) + + + + qpdfview::Database + + + Jump to page %1 + 跳到第%1頁 + + + + qpdfview::DocumentView + + + + Information + 資訊 + + + + The source editor has not been set. + + + + + Opening URL is disabled in the settings. + 開啟網址在選項中被停用。 + + + + Warning + 警告 + + + + + SyncTeX data for '%1' could not be found. + + + + + Printing '%1'... + 正在列印 '%1'... + + + + Unlock %1 + 解除鎖定 %1 + + + + Password: + 密碼: + + + + Page %1 + 第 %1 頁 + + + + qpdfview::FileAttachmentAnnotationWidget + + + Save... + 儲存... + + + + Save and open... + 儲存並開啟... + + + + Save file attachment + + + + + + Warning + 警告 + + + + Could not open file attachment saved to '%1'. + + + + + Could not save file attachment to '%1'. + + + + + qpdfview::FontsDialog + + + Fonts + 字型 + + + + qpdfview::HelpDialog + + + Help + 幫助 + + + + help.html + Please replace by file name of localized help if available, e.g. "help_fr.html". + + + + + + Find previous + 尋找上一個 + + + + Find next + 尋找下一個 + + + + qpdfview::MainWindow + + + Toggle tool bars + 顯示/隱藏工具列 + + + + Toggle menu bar + 顯示/隱藏功能表列 + + + + + + + + + + + + + + Warning + 警告 + + + + + Could not open '%1'. + 無法開啟 '%1'。 + + + + Copy file path + 複製檔案路徑 + + + + Select file path + 選擇檔案路徑 + + + + Close all tabs + 關閉所有分頁 + + + + Close all tabs but this one + 關閉目前分頁外的所有分頁 + + + + Close all tabs to the left + 關閉所有左邊的分頁 + + + + Close all tabs to the right + 關閉所有右邊的分頁 + + + + + Open + 開啟 + + + + Open in new tab + 在新分頁中開啟 + + + + + + Could not refresh '%1'. + 無法重新整理 '%1'. + + + + Save copy + 儲存副本 + + + + Could not save copy at '%1'. + + + + + Save as + 另存為 + + + + + Move to instance + + + + + + Failed to access instance '%1'. + + + + + + + Could not save as '%1'. + 無法儲存為 '%1'。 + + + + Could not print '%1'. + 無法列印 '%1'。 + + + + Set first page + + + + + Select the first page of the body matter: + + + + + Jump to page + 跳到頁面 + + + + Page: + 頁: + + + + Jump to page %1 + 跳到第%1頁 + + + + About qpdfview + 關於 qpdfview + + + + <p><b>qpdfview %1</b></p><p>qpdfview is a tabbed document viewer using Qt.</p><p>This version includes:<ul> + <p><b>qpdfview %1</b></p><p>qpdfview 是一個使用 Qt 開發的具有分頁的文件檢視器。</p><p>這個版本包含:<ul> + + + + <li>PDF support using Poppler %1</li> + <li>PDF 支援使用 Poppler %1</li> + + + + <li>PS support using libspectre %1</li> + <li>PS 支援使用 libspectre %1</li> + + + + <li>DjVu support using DjVuLibre %1</li> + <li>DjVu 支援使用 DjVuLibre %1</li> + + + + <li>PDF support using Fitz %1</li> + <li>PDF 支援使用 Fitz %1</li> + + + + <li>Printing support using CUPS %1</li> + <li>列印支援使用 CUPS %1</li> + + + + &Edit bookmark + 編輯書籤(&E) + + + + The document '%1' has been modified. Do you want to save your changes? + 文件 '%1' 已經被修改。你想要儲存變更嗎? + + + + Page width + 頁面寬度 + + + + Page size + 頁面大小 + + + + Match &case + 符合大小寫(&C) + + + + Whole &words + + + + + Highlight &all + 全部高亮度標示(&A) + + + + &Open... + 開啟(&O)... + + + + Open in new &tab... + 在新分頁中開啟(&T)... + + + + Open &copy in new tab + 在新分頁開啟副本(&C) + + + + Move to &instance... + + + + + &Refresh + 重新整理(&R) + + + + Information + + + + + Instance-to-instance communication requires D-Bus support. + + + + + </ul><p>See <a href="https://launchpad.net/qpdfview">launchpad.net/qpdfview</a> for more information.</p><p>&copy; %1 The qpdfview developers</p> + + + + + Save &as... + 另存為(&A)... + + + + Save &copy... + + + + + &Print... + 列印(&P)... + + + + E&xit + 退出(&X) + + + + &Previous page + 上一頁(&P) + + + + &Next page + 下一頁(&N) + + + + &First page + 第一頁(&F) + + + + &Last page + 最後一頁(&L) + + + + &Set first page... + + + + + &Jump to page... + 跳到頁面(&J)... + + + + Jump &backward + + + + + Jump for&ward + + + + + &Search... + 搜尋(&S)... + + + + Find previous + 尋找上一個 + + + + Find next + 尋找下一個 + + + + Cancel search + 取消搜尋 + + + + &Copy to clipboard + 複製到剪貼簿(&C) + + + + &Add annotation + 加入註解(&A) + + + + Settings... + 設定... + + + + &Continuous + 連續(&C) + + + + &Two pages + 兩頁(&T) + + + + Two pages &with cover page + + + + + &Multiple pages + 多頁(&M) + + + + Right to left + 從右到左 + + + + Zoom &in + 放大(&I) + + + + Zoom &out + 縮小(&O) + + + + Original &size + 原始尺寸(&S) + + + + Fit to page width + 符合頁面寬度 + + + + Fit to page size + 符合頁面 + + + + Rotate &left + 向左旋轉(&L) + + + + Rotate &right + 向右旋轉(&R) + + + + Invert colors + 反轉顏色 + + + + Convert to grayscale + 轉換為灰階 + + + + Trim margins + 裁切邊緣 + + + + Darken with paper color + + + + + Lighten with paper color + + + + + Fonts... + 字型... + + + + &Fullscreen + 全螢幕(&F) + + + + &Presentation... + 簡報(&P)... + + + + &Previous tab + 上一個分頁(&P) + + + + &Next tab + 下一個分頁(&N) + + + + &Close tab + 關閉分頁(&C) + + + + Close &all tabs + 關閉所有分頁(&A) + + + + Close all tabs &but current tab + 關閉目前分頁外的所有分頁(&B) + + + + Restore &most recently closed tab + 還原最近關閉的分頁(&M) + + + + &Previous bookmark + 上一個書籤(&P) + + + + &Next bookmark + 下一個書籤(&N) + + + + &Add bookmark + 加入書籤(&A) + + + + Open copy in new &window + + + + + Split view horizontally... + + + + + Split view vertically... + + + + + Close current view + + + + + Thumb&nails + 縮圖(&N) + + + + Book&marks + 書籤(&M) + + + + Composition + + + + + + &Remove bookmark + 移除書籤(&R) + + + + Edit '%1' at %2,%3... + + + + + Open containing &folder + 開啟包含的資料夾(&F) + + + + &Save + + + + + Remove all bookmarks + 移除所有書籤 + + + + &Contents + 內容(&C) + + + + &About + 關於(&A) + + + + + &File + 檔案(&F) + + + + + &Edit + 編輯(&E) + + + + + &View + 檢視(&V) + + + + &Outline + + + + + &Properties + 屬性(&P) + + + + &Search + 搜尋(&S) + + + + &Tool bars + 工具列(&T) + + + + &Docks + + + + + &Tabs + 分頁(&T) + + + + &Bookmarks + 書籤(&B) + + + + &Help + 幫助(&H) + + + + + Choose instance + + + + + + Instance: + + + + + qpdfview::PageItem + + + Go to page %1. + 跳到第 %1 頁。 + + + + Go to page %1 of file '%2'. + 跳到檔案 '%2' 的第 %1 頁。 + + + + Open '%1'. + 開啟 '%1'。 + + + + Edit form field '%1'. + + + + + Copy &text + 複製文字(&T) + + + + &Select text + 選擇文字(&S) + + + + Copy &image + 複製圖片(&I) + + + + Save image to &file... + 儲存圖片到檔案(&F)... + + + + Save image to file + 儲存圖片到檔案 + + + + Warning + 警告 + + + + Could not save image to file '%1'. + 無法儲存圖片到檔案「%1」。 + + + + Add &text + 加入文字(&T) + + + + Add &highlight + + + + + &Copy link address + 複製連結位置(&C) + + + + &Select link address + 選擇連結位置(&S) + + + + &Remove annotation + 移除註解(&R) + + + + qpdfview::PdfSettingsWidget + + + Antialiasing: + 反鋸齒: + + + + Text antialiasing: + 文字反鋸齒: + + + + + None + + + + + Full + + + + + Reduced + + + + + + Text hinting: + + + + + Ignore paper color: + + + + + Overprint preview: + + + + + Solid + + + + + Shaped + + + + + Thin line mode: + + + + + Splash + Splash + + + + Arthur + Arthur + + + + Backend: + 後端: + + + + qpdfview::PluginHandler + + + Image (%1) + 圖片 (%1) + + + + Compressed (%1) + + + + + Supported formats (%1) + 支援的格式 (%1) + + + + Could not decompress '%1'! + + + + + Could not match file type of '%1'! + + + + + Critical + + + + + Could not load plug-in for file type '%1'! + + + + + qpdfview::PrintDialog + + + Fit to page: + 符合頁面: + + + + Page ranges: + 頁面範圍: + + + + All pages + 所有頁面 + + + + Even pages + 偶數頁 + + + + Odd pages + 奇數頁 + + + + Page set: + + + + + Single page + 單頁 + + + + Two pages + 兩頁 + + + + Four pages + 四頁 + + + + Six pages + 六頁 + + + + Nine pages + 九頁 + + + + Sixteen pages + 十六頁 + + + + Number-up: + + + + + Bottom to top and left to right + 由下至上,由左至右 + + + + Bottom to top and right to left + 由下至上,由右至左 + + + + Left to right and bottom to top + 由左至右,由下至上 + + + + Left to right and top to bottom + 由左至右,由上至下 + + + + Right to left and bottom to top + 由右至左,由下至上 + + + + Right to left and top to bottom + 由右至左,由上至下 + + + + Top to bottom and left to right + 由上至下,由左至右 + + + + Top to bottom and right to left + 由上至下,由右至左 + + + + Number-up layout: + + + + + Extended options + + + + + qpdfview::PsSettingsWidget + + + Graphics antialias bits: + + + + + Text antialias bits: + + + + + qpdfview::RecentlyClosedMenu + + + &Recently closed + 最近關閉的(&R) + + + + &Clear list + 清除清單(&C) + + + + qpdfview::RecentlyUsedMenu + + + Recently &used + 最近使用的(&U) + + + + &Clear list + 清除清單 + + + + qpdfview::SearchModel + + + <b>%1</b> occurrences + + + + + <b>%1</b> occurrences on page <b>%2</b> + + + + + qpdfview::SearchableMenu + + + Search for '%1'... + 搜尋 '%1'... + + + + qpdfview::SettingsDialog + + + General + 一般 + + + + &Behavior + 行為(&B) + + + + &Graphics + 圖形(&G) + + + + &Interface + 介面(&I) + + + + &Shortcuts + 捷徑(&S) + + + + &Modifiers + + + + + Defaults + 預設 + + + + Defaults on current tab + + + + + Mouse wheel modifiers + + + + + Mouse button modifiers + + + + + Open URL: + 開啟 URL: + + + + Auto-refresh: + 自動重新整理: + + + + + + + + + + + + Effective after restart. + 重新啟動後生效。 + + + + Track recently used: + 記錄最近使用的: + + + + Keep recently closed: + 保存最近關閉的: + + + + Restore tabs: + 還原分頁: + + + + Restore bookmarks: + 還原書籤: + + + + Restore per-file settings: + + + + + min + 分鐘 + + + + Save database interval: + 儲存資料庫間隔: + + + + Synchronize presentation: + + + + + Default + 預設 + + + + Presentation screen: + 簡報螢幕: + + + + Synchronize split views: + + + + + Zoom factor: + 縮放係數: + + + + Parallel search execution: + + + + + ms + 毫秒 + + + + None + + + + + Highlight duration: + + + + + Highlight color: + 高亮度標記顏色: + + + + Annotation color: + 註解顏色: + + + + '%1' is replaced by the absolute file path. '%2' resp. '%3' is replaced by line resp. column number. + + + + + Source editor: + + + + + Use tiling: + + + + + Keep obsolete pixmaps: + + + + + Use device pixel ratio: + + + + + Decorate pages: + + + + + Decorate links: + + + + + Decorate form fields: + + + + + Background color: + 背景顏色: + + + + Paper color: + 頁面顏色: + + + + Presentation background color: + 簡報背景顏色: + + + + Pages per row: + 每行頁數: + + + + + + px + 像素 + + + + Page spacing: + + + + + Thumbnail spacing: + + + + + Thumbnail size: + 縮圖大小: + + + + Fit to viewport + + + + + Document context menu: + + + + + Tab context menu: + + + + + Open in source editor: + + + + + + %1 MB + %1 MB + + + + Cache size: + 快取大小: + + + + Minimal scrolling: + + + + + Prefetch: + + + + + Prefetch distance: + + + + + Top + 頂部 + + + + Bottom + 底部 + + + + Left + 左側 + + + + Right + 右側 + + + + Tab position: + 分頁列位置: + + + + As needed + 需要時 + + + + Always + 總是 + + + + Exit after last tab: + 最後一個分頁關閉後退出: + + + + Scrollable menus: + + + + + Searchable menus: + + + + + Zoom to selection: + + + + + + Never + 永不 + + + + Settings + 設定 + + + + Tab visibility: + 分頁可見度: + + + + Spread tabs: + + + + + New tab next to current tab: + + + + + Recently used count: + + + + + Recently closed count: + + + + + Extended search dock: + + + + + Toggle tool and menu bars with fullscreen: + + + + + File tool bar: + + + + + Edit tool bar: + + + + + View tool bar: + + + + + Use page label: + + + + + Document title as tab title: + + + + + Current page in window title: + + + + + Instance name in window title: + + + + + Synchronize outline view: + + + + + Highlight current thumbnail: + 高亮度標記目前的縮圖: + + + + Limit thumbnails to results: + + + + + Annotation overlay: + + + + + Form field overlay: + + + + + Zoom: + 縮放: + + + + Rotate: + 旋轉: + + + + Scroll: + 捲動: + + + + Copy to clipboard: + 複製到剪貼簿: + + + + Add annotation: + 加入註解: + + + + qpdfview::ShortcutHandler + + + Action + 動作 + + + + Key sequence + + + + + Skip backward + 向後捲動 + + + + Skip forward + 向前捲動 + + + + Move up + 向上移動 + + + + Move down + 向下移動 + + + + Move left + 向左移動 + + + + Move right + 向右移動 + + + + qpdfview::TreeView + + + &Expand all + 全部展開(&E) + + + + &Collapse all + 全部摺疊(&C) + + + + MainWindow + + &Save copy... + 儲存副本(&S)... + + +