diff options
Diffstat (limited to 'src/backend/drivers/cswordbookmoduleinfo.cpp')
-rw-r--r-- | src/backend/drivers/cswordbookmoduleinfo.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/backend/drivers/cswordbookmoduleinfo.cpp b/src/backend/drivers/cswordbookmoduleinfo.cpp new file mode 100644 index 0000000..0a8c1e6 --- /dev/null +++ b/src/backend/drivers/cswordbookmoduleinfo.cpp @@ -0,0 +1,68 @@ +/********* +* +* This file is part of BibleTime's source code, http://www.bibletime.info/. +* +* Copyright 1999-2008 by the BibleTime developers. +* The BibleTime source code is licensed under the GNU General Public License version 2.0. +* +**********/ + +//BibleTime includes +#include "cswordbookmoduleinfo.h" +#include "backend/keys/cswordtreekey.h" + +//Sword includes +#include <treekeyidx.h> +#include <treekey.h> + +CSwordBookModuleInfo::CSwordBookModuleInfo( sword::SWModule* module, CSwordBackend* const usedBackend ) +: CSwordModuleInfo(module, usedBackend), +m_depth(-1) {} + +CSwordBookModuleInfo::CSwordBookModuleInfo( const CSwordBookModuleInfo& module ) +: CSwordModuleInfo(module) { + m_depth = module.m_depth; +} + +CSwordBookModuleInfo::~CSwordBookModuleInfo() {} + +int CSwordBookModuleInfo::depth() { + if (m_depth == -1) { + sword::TreeKeyIdx* key = tree(); + + if (key) { + key->root(); + computeDepth(key, 0); + } + } + + return m_depth; +} + +void CSwordBookModuleInfo::computeDepth(sword::TreeKeyIdx* key, int level ) { + std::string savedKey; + // savedKey = key->getFullName(); //sword 1.5.8 + savedKey = key->getText(); + + if (level > m_depth) { + m_depth = level; + } + + if (key->hasChildren()) { + key->firstChild(); + computeDepth(key, level+1); + + key->setText( savedKey.c_str() );//return to the initial value + } + + if (key->nextSibling()) { + computeDepth(key, level); + } +} + +/** Returns a treekey filled with the structure of this module */ +sword::TreeKeyIdx* CSwordBookModuleInfo::tree() const { + sword::TreeKeyIdx* treeKey = dynamic_cast<sword::TreeKeyIdx*>((sword::SWKey*)*(module())); + Q_ASSERT(treeKey); + return treeKey; +} |