1 /*********
2 *
3 * This file is part of BibleTime's source code, http://www.bibletime.info/.
4 *
5 * Copyright 1999-2016 by the BibleTime developers.
6 * The BibleTime source code is licensed under the GNU General Public License version 2.0.
7 *
8 **********/
9
10 #include "btprinter.h"
11 #include "bibletime.h"
12 #include <QPrintDialog>
13 #include <QPrinter>
14 #include <QTextEdit>
15 #include "../util/btassert.h"
16 #include "backend/config/btconfig.h"
17 #include "backend/keys/cswordversekey.h"
18 #include "backend/managers/cdisplaytemplatemgr.h"
19
20
21 namespace {
22
mangleFilterOptions(FilterOptions fo)23 inline FilterOptions mangleFilterOptions(FilterOptions fo) {
24 fo.footnotes = false;
25 fo.scriptureReferences = false;
26 fo.strongNumbers = false;
27 fo.morphTags = false;
28 fo.headings = false;
29 return fo;
30 }
31
32 } // anonymous namespace
33
BtPrinter(DisplayOptions const & displayOptions,FilterOptions const & filterOptions,QObject * const parent)34 BtPrinter::BtPrinter(DisplayOptions const & displayOptions,
35 FilterOptions const & filterOptions,
36 QObject * const parent)
37 : QObject{parent}
38 , CDisplayRendering{displayOptions, mangleFilterOptions(filterOptions)}
39 {}
40
printKeyTree(KeyTree const & tree)41 void BtPrinter::printKeyTree(KeyTree const & tree) {
42 QTextEdit htmlPage;
43 htmlPage.setHtml(renderKeyTree(tree));
44
45 QPrinter printer;
46 QPrintDialog printDialog(&printer);
47 if (printDialog.exec() == QDialog::Accepted)
48 htmlPage.print(&printer);
49 }
50
entryLink(KeyTreeItem const & item,CSwordModuleInfo const * module)51 QString BtPrinter::entryLink(KeyTreeItem const & item,
52 CSwordModuleInfo const * module)
53 {
54 BT_ASSERT(module);
55 if (module->type() != CSwordModuleInfo::Bible)
56 return item.key();
57
58 CSwordVerseKey vk(module);
59 vk.setKey(item.key());
60 switch (item.settings().keyRenderingFace) {
61 case KeyTreeItem::Settings::CompleteShort:
62 return QString::fromUtf8(vk.getShortText());
63
64 case KeyTreeItem::Settings::CompleteLong:
65 return vk.key();
66
67 case KeyTreeItem::Settings::NoKey:
68 return QString::null;
69
70 case KeyTreeItem::Settings::SimpleKey: // fall through:
71 default:
72 return QString::number(vk.getVerse());
73 }
74 }
75
renderEntry(KeyTreeItem const & i,CSwordKey * key)76 QString BtPrinter::renderEntry(KeyTreeItem const & i, CSwordKey * key) {
77 Q_UNUSED(key);
78 BT_ASSERT(dynamic_cast<BtPrinter::KeyTreeItem const *>(&i));
79 BtPrinter::KeyTreeItem const * const printItem =
80 static_cast<BtPrinter::KeyTreeItem const *>(&i);
81
82 if (printItem->hasAlternativeContent()) {
83 QString ret =
84 QString::fromLatin1("<div class=\"entry\"><div class=\""
85 "rangeheading\">%1</div>").arg(
86 printItem->getAlternativeContent());
87 if (!i.childList()->isEmpty())
88 Q_FOREACH (const KeyTreeItem * const c, *i.childList())
89 ret.append(CDisplayRendering::renderEntry(*c));
90 ret.append("</div>");
91 return ret;
92 }
93 return CDisplayRendering::renderEntry(i);
94 }
95
finishText(QString const & text,KeyTree const & tree)96 QString BtPrinter::finishText(QString const & text, KeyTree const & tree) {
97 BtConstModuleList const modules = collectModules(tree);
98 BT_ASSERT(!modules.empty());
99
100 CLanguageMgr::Language const * const lang = modules.first()->language();
101 BT_ASSERT(lang);
102
103 CDisplayTemplateMgr::Settings settings;
104 //settings.modules = modules;
105 settings.pageCSS_ID = "printer";
106 if (modules.count() == 1 && lang->isValid())
107 settings.langAbbrev = lang->abbrev();
108
109 if (modules.count() == 1)
110 settings.textDirection = modules.first()->textDirection();
111
112 return CDisplayTemplateMgr::instance()->fillTemplate(
113 CDisplayTemplateMgr::activeTemplateName(),
114 text,
115 settings);
116 }
117