// // C++ Implementation: cdisplaytemplatemgr // // Description: // // // Author: The BibleTime team , (C) 2004 // // Copyright: See COPYING file that comes with this distribution // // //BibleTime includes #include "cdisplaytemplatemgr.h" #include "cswordmoduleinfo.h" #include "clanguagemgr.h" #include "frontend/cbtconfig.h" #include "util/cpointers.h" #include "config.h" //Qt includes #include #include #include //KDE includes #include #include #include CDisplayTemplateMgr::CDisplayTemplateMgr() { init(); loadUserTemplates(); } CDisplayTemplateMgr::~CDisplayTemplateMgr() {} /*! \fn CDisplayTemplateMgr::fillTemplate( const TQString& name, const TQString& title, const TQString& content ) */ const TQString CDisplayTemplateMgr::fillTemplate( const TQString& name, const TQString& content, Settings& settings ) { const TQString templateName = m_templateMap.contains(name) ? name : defaultTemplate(); TQString displayTypeString; if (!settings.pageCSS_ID.isEmpty()) { displayTypeString = settings.pageCSS_ID; } else { if (settings.modules.count()) { switch (settings.modules.first()->type()) { case CSwordModuleInfo::Bible: displayTypeString = "bible"; break; case CSwordModuleInfo::GenericBook: displayTypeString = "book"; break; case CSwordModuleInfo::Commentary: case CSwordModuleInfo::Lexicon: default: displayTypeString = "singleentry"; break; }; } else { //use bible as default type if no modules are set displayTypeString = "bible"; }; } TQString newContent = content; const int moduleCount = settings.modules.count(); if (moduleCount >= 2) { //create header for the modules TQString header; ListCSwordModuleInfo::iterator end_it = settings.modules.end(); for (ListCSwordModuleInfo::iterator it(settings.modules.begin()); it != end_it; ++it) { header.append("") .append((*it)->name()) .append(""); } newContent.setLatin1("") .append(header) .append("") .append(content) .append("
"); } TQString langCSS; CLanguageMgr::LangMap langMap = CPointers::languageMgr()->availableLanguages(); for ( CLanguageMgr::LangMapIterator it( langMap ); it.current(); ++it ) { const CLanguageMgr::Language* lang = it.current(); //if (lang->isValid() && CBTConfig::get(lang).first) { if (!lang->abbrev().isEmpty() && CBTConfig::get(lang).first) { const TQFont f = CBTConfig::get(lang).second; //don't use important, because it would reset the title formatting, etc. to the setup font TQString css("{ "); css.append("font-family:").append(f.family())/*.append(" !important")*/; css.append("; font-size:").append(TQString::number(f.pointSize())).append("pt /*!important*/"); css.append("; font-weight:").append(f.bold() ? "bold" : "normal /*!important*/"); css.append("; font-style:").append(f.italic() ? "italic" : "normal /*!important*/"); css.append("; }\n"); langCSS += TQString("\n*[lang=%1] %2") .arg(lang->abbrev()) .arg(css); } } //at first append the font standard settings for all languages without configured font CLanguageMgr::LangMapIterator it( langMap ); const CLanguageMgr::Language* lang = it.current(); if (lang && !lang->abbrev().isEmpty()/*&& lang->isValid()*/) { const TQFont standardFont = CBTConfig::getDefault(lang); //we just need a dummy lang param langCSS.prepend( TQString("\n#content {font-family:%1; font-size:%2pt; font-weight:%3; font-style: %4;}\n") .arg(standardFont.family()) .arg(standardFont.pointSize()) .arg(standardFont.bold() ? "bold" : "normal") .arg(standardFont.italic() ? "italic" : "normal") ); } // qWarning("Outputing unformated text"); const TQString t = TQString(m_templateMap[ templateName ]) //don't change the map's content directly, use a copy .replace("#TITLE#", settings.title) .replace("#LANG_ABBREV#", settings.langAbbrev.isEmpty() ? TQString("en") : settings.langAbbrev) .replace("#DISPLAYTYPE#", displayTypeString) .replace("#LANG_CSS#", langCSS) .replace("#PAGE_DIRECTION#", settings.pageDirection) .replace("#CONTENT#", newContent); //printf("%s\n\n", t.latin1()); return t; /* TQString(m_templateMap[ templateName ]) //don't change the map's content directly, use a copy .replace("#TITLE#", settings.title) .replace("#LANG_ABBREV#", settings.langAbbrev.isEmpty() ? TQString("en") : settings.langAbbrev) .replace("#DISPLAYTYPE#", displayTypeString) .replace("#LANG_CSS#", langCSS) .replace("#PAGE_DIRECTION#", settings.pageDirection) .replace("#CONTENT#", newContent);*/ } /*! \fn CDisplayTemplateMgr::loadUserTemplates */ void CDisplayTemplateMgr::loadUserTemplates() { qDebug("Loading user templates"); TQStringList files = KGlobal::dirs()->findAllResources("BT_DisplayTemplates"); for ( TQStringList::iterator it( files.begin() ); it != files.end(); ++it) { qDebug("Found user template %s", (*it).latin1()); TQFile f( *it ); Q_ASSERT( f.exists() ); if (f.open( IO_ReadOnly )) { TQString fileContent = TQTextStream( &f ).read(); if (!fileContent.isEmpty()) { m_templateMap[ TQFileInfo(*it).fileName() + TQString(" ") + i18n("(user template)")] = fileContent; } } } } //Include the HTML templates which were put into a cpp file by a Perl script #include "../display-templates/template-init.cpp"