2
// C++ Implementation: cdisplaytemplatemgr
7
// Author: The BibleTime team <info@bibletime.info>, (C) 2004
9
// Copyright: See COPYING file that comes with this distribution
14
#include "cdisplaytemplatemgr.h"
15
#include "cswordmoduleinfo.h"
16
#include "clanguagemgr.h"
18
#include "frontend/cbtconfig.h"
20
#include "util/cpointers.h"
25
#include <qstringlist.h>
27
#include <qfileinfo.h>
31
#include <kstandarddirs.h>
35
CDisplayTemplateMgr::CDisplayTemplateMgr() {
40
CDisplayTemplateMgr::~CDisplayTemplateMgr() {}
44
\fn CDisplayTemplateMgr::fillTemplate( const QString& name, const QString& title, const QString& content )
46
const QString CDisplayTemplateMgr::fillTemplate( const QString& name, const QString& content, Settings& settings ) {
47
const QString templateName = m_templateMap.contains(name) ? name : defaultTemplate();
49
QString displayTypeString;
51
if (!settings.pageCSS_ID.isEmpty()) {
52
displayTypeString = settings.pageCSS_ID;
55
if (settings.modules.count()) {
56
switch (settings.modules.first()->type()) {
58
case CSwordModuleInfo::Bible:
59
displayTypeString = "bible";
62
case CSwordModuleInfo::GenericBook:
63
displayTypeString = "book";
66
case CSwordModuleInfo::Commentary:
68
case CSwordModuleInfo::Lexicon:
71
displayTypeString = "singleentry";
75
else { //use bible as default type if no modules are set
76
displayTypeString = "bible";
80
QString newContent = content;
81
const int moduleCount = settings.modules.count();
83
if (moduleCount >= 2) {
84
//create header for the modules
87
ListCSwordModuleInfo::iterator end_it = settings.modules.end();
89
for (ListCSwordModuleInfo::iterator it(settings.modules.begin()); it != end_it; ++it) {
90
header.append("<th style=\"width:")
91
.append(QString::number(int( 100.0 / (float)moduleCount )))
93
.append((*it)->name())
97
newContent.setLatin1("<table><tr>")
105
CLanguageMgr::LangMap langMap = CPointers::languageMgr()->availableLanguages();
107
for ( CLanguageMgr::LangMapIterator it( langMap ); it.current(); ++it ) {
108
const CLanguageMgr::Language* lang = it.current();
111
//if (lang->isValid() && CBTConfig::get(lang).first) {
112
if (!lang->abbrev().isEmpty() && CBTConfig::get(lang).first) {
113
const QFont f = CBTConfig::get(lang).second;
115
//don't use important, because it would reset the title formatting, etc. to the setup font
117
css.append("font-family:").append(f.family())/*.append(" !important")*/;
118
css.append("; font-size:").append(QString::number(f.pointSize())).append("pt /*!important*/");
119
css.append("; font-weight:").append(f.bold() ? "bold" : "normal /*!important*/");
120
css.append("; font-style:").append(f.italic() ? "italic" : "normal /*!important*/");
124
QString("\n*[lang=%1] %2")
130
//at first append the font standard settings for all languages without configured font
131
CLanguageMgr::LangMapIterator it( langMap );
133
const CLanguageMgr::Language* lang = it.current();
135
if (lang && !lang->abbrev().isEmpty()/*&& lang->isValid()*/) {
136
const QFont standardFont = CBTConfig::getDefault(lang); //we just need a dummy lang param
138
QString("\n#content {font-family:%1; font-size:%2pt; font-weight:%3; font-style: %4;}\n")
139
.arg(standardFont.family())
140
.arg(standardFont.pointSize())
141
.arg(standardFont.bold() ? "bold" : "normal")
142
.arg(standardFont.italic() ? "italic" : "normal")
146
// qWarning("Outputing unformated text");
147
const QString t = QString(m_templateMap[ templateName ]) //don't change the map's content directly, use a copy
148
.replace("#TITLE#", settings.title)
149
.replace("#LANG_ABBREV#", settings.langAbbrev.isEmpty() ? QString("en") : settings.langAbbrev)
150
.replace("#DISPLAYTYPE#", displayTypeString)
151
.replace("#LANG_CSS#", langCSS)
152
.replace("#PAGE_DIRECTION#", settings.pageDirection)
153
.replace("#CONTENT#", newContent);
154
//printf("%s\n\n", t.latin1());
157
/* QString(m_templateMap[ templateName ]) //don't change the map's content directly, use a copy
158
.replace("#TITLE#", settings.title)
159
.replace("#LANG_ABBREV#", settings.langAbbrev.isEmpty() ? QString("en") : settings.langAbbrev)
160
.replace("#DISPLAYTYPE#", displayTypeString)
161
.replace("#LANG_CSS#", langCSS)
162
.replace("#PAGE_DIRECTION#", settings.pageDirection)
163
.replace("#CONTENT#", newContent);*/
168
\fn CDisplayTemplateMgr::loadUserTemplates
170
void CDisplayTemplateMgr::loadUserTemplates() {
171
qDebug("Loading user templates");
172
QStringList files = KGlobal::dirs()->findAllResources("BT_DisplayTemplates");
174
for ( QStringList::iterator it( files.begin() ); it != files.end(); ++it) {
175
qDebug("Found user template %s", (*it).latin1());
178
Q_ASSERT( f.exists() );
180
if (f.open( IO_ReadOnly )) {
181
QString fileContent = QTextStream( &f ).read();
183
if (!fileContent.isEmpty()) {
184
m_templateMap[ QFileInfo(*it).fileName() + QString(" ") + i18n("(user template)")] = fileContent;
190
//Include the HTML templates which were put into a cpp file by a Perl script
191
#include "../display-templates/template-init.cpp"