/********* * * This file is part of BibleTime's source code, http://www.bibletime.info/. * * Copyright 1999-2006 by the BibleTime developers. * The BibleTime source code is licensed under the GNU General Public License version 2.0. * **********/ #include "cmodulechooser.h" #include "backend/cswordkey.h" #include "backend/cswordversekey.h" #include "frontend/cbtconfig.h" #include "util/cresmgr.h" #include "util/ctoolclass.h" //TQt includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include //TDE includes #include #include #include #include namespace Search { namespace Options { /****************************/ /****************************/ /****************************/ CModuleChooser::ModuleCheckBoxItem::ModuleCheckBoxItem(TQListViewItem* item, CSwordModuleInfo* module) : TQCheckListItem(item, TQString(), TQCheckListItem::CheckBox) { m_module = module; setText(0,m_module->name()); }; CModuleChooser::ModuleCheckBoxItem::~ModuleCheckBoxItem() {} ; /** Returns the used module. */ CSwordModuleInfo* const CModuleChooser::ModuleCheckBoxItem::module() const { return m_module; } /****************************/ /****************************/ /****************************/ CModuleChooser::CModuleChooser(TQWidget* parent) : TDEListView(parent) { initView(); initTree(); } CModuleChooser::~CModuleChooser() {} void CModuleChooser::show() { TDEListView::show(); //open module items TQListViewItemIterator it( this ); for ( ; it.current(); ++it ) { if ( ModuleCheckBoxItem* i = dynamic_cast(it.current()) ) { if (i->isOn()) { ensureItemVisible(i); }; } } } /** Initializes this widget and the childs of it. */ void CModuleChooser::initView() { addColumn( i18n("Work") ); setRootIsDecorated(true); // header()->hide(); setFullWidth(true); } /** Initializes the tree of this widget. */ void CModuleChooser::initTree() { ListCSwordModuleInfo mods = backend()->moduleList(); /** * The next steps: * 1. Sort by type * 2. Sort the modules of this type by their language * 3. Create the subfolders for this */ TQMap typenameMap; typenameMap.insert(CSwordModuleInfo::Bible, i18n("Bibles")); typenameMap.insert(CSwordModuleInfo::Commentary, i18n("Commentaries")); typenameMap.insert(CSwordModuleInfo::Lexicon, i18n("Lexicons")); typenameMap.insert(CSwordModuleInfo::GenericBook, i18n("Books")); int type = CSwordModuleInfo::Bible; bool ok = true; bool addedDevotionals = false; bool addedGlossaries = false; bool addedLexs = false; bool incType = false; while (ok) { ListCSwordModuleInfo modsForType; TQString typeFolderCaption = TQString(); incType = false; if (static_cast(type) == CSwordModuleInfo::Lexicon) { if (!addedLexs) { // for (mods.first(); mods.current(); mods.next()) { ListCSwordModuleInfo::iterator end_it = mods.end(); for (ListCSwordModuleInfo::iterator it(mods.begin()); it != end_it; ++it) { if (((*it)->type() == CSwordModuleInfo::Lexicon) && ((*it)->category() != CSwordModuleInfo::DailyDevotional) && ((*it)->category() != CSwordModuleInfo::Glossary) ) { modsForType.append( *it ); }; }; addedLexs = true; typeFolderCaption = TQString(); } else if (!addedDevotionals) { // for (mods.first(); mods.current(); mods.next()) { ListCSwordModuleInfo::iterator end_it = mods.end(); for (ListCSwordModuleInfo::iterator it(mods.begin()); it != end_it; ++it) { if ((*it)->category() == CSwordModuleInfo::DailyDevotional) { modsForType.append(*it); }; }; addedDevotionals = true; typeFolderCaption = i18n("Daily Devotionals"); } else if (!addedGlossaries) { // for (mods.first(); mods.current(); mods.next()) { ListCSwordModuleInfo::iterator end_it = mods.end(); for (ListCSwordModuleInfo::iterator it(mods.begin()); it != end_it; ++it) { if ((*it)->category() == CSwordModuleInfo::Glossary) { modsForType.append(*it); }; }; addedGlossaries = true; typeFolderCaption = i18n("Glossaries"); }; if (addedLexs && addedDevotionals && addedGlossaries) incType = true; } else if (type == CSwordModuleInfo::Bible || type == CSwordModuleInfo::Commentary || type == CSwordModuleInfo::GenericBook) { // for (mods.first(); mods.current(); mods.next()) { ListCSwordModuleInfo::iterator end_it = mods.end(); for (ListCSwordModuleInfo::iterator it(mods.begin()); it != end_it; ++it) { if ((*it)->type() == type) { modsForType.append(*it); }; }; incType = true; } else ok = false; if (typeFolderCaption.isEmpty()) { typeFolderCaption = typenameMap[static_cast(type)]; } //get the available languages of the selected modules TQStringList langs; // for (modsForType.first(); modsForType.current(); modsForType.next()) { ListCSwordModuleInfo::iterator end_it = modsForType.end(); for (ListCSwordModuleInfo::iterator it(modsForType.begin()); it != end_it; ++it) { if ( !langs.contains(TQString( (*it)->module()->Lang() ))) { langs.append( (*it)->module()->Lang() ); } }; langs.sort(); //go through the list of languages and create subfolders for each language and the modules of the language TQListViewItem* typeFolder = 0; if (modsForType.count()) { typeFolder = new TQListViewItem(this, typeFolder, typeFolderCaption); } else { if (incType) { type++; } continue; }; TQString language = TQString(); CLanguageMgr* langMgr = languageMgr(); for ( TQStringList::Iterator it = langs.begin(); it != langs.end(); ++it ) { language = langMgr->languageForAbbrev(*it)->translatedName(); if (language.isEmpty()) { language = (*it); } TQListViewItem* langFolder = new TQListViewItem(typeFolder,language); langFolder->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); //create the module items of this lang folder // for (modsForType.first(); modsForType.current(); modsForType.next()) { ListCSwordModuleInfo::iterator end_modItr = modsForType.end(); for (ListCSwordModuleInfo::iterator mod_Itr(modsForType.begin()); mod_Itr != end_modItr; ++mod_Itr) { if (TQString( (*mod_Itr)->module()->Lang() ) == (*it) ) { //found correct language ModuleCheckBoxItem* i = new ModuleCheckBoxItem(langFolder, *mod_Itr); i->setPixmap(0, CToolClass::getIconForModule(*mod_Itr)); }; }; }; typeFolder->setPixmap(0,SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); if (incType) { ++type; } }; } /** Returns a list of selected modules. */ ListCSwordModuleInfo CModuleChooser::modules() { ListCSwordModuleInfo mods; TQListViewItemIterator it( this ); for ( ; it.current(); ++it ) { if ( ModuleCheckBoxItem* i = dynamic_cast(it.current()) ) { //add the module if the box is checked if (i->isOn()) { mods.append(i->module()); }; }; }; return mods; } /** Sets the list of modules and updates the state of the checkbox items. */ void CModuleChooser::setModules( ListCSwordModuleInfo modules ) { // tqWarning("CModuleChooser::setModules( ListCSwordModuleInfo modules )"); TQListViewItemIterator it( this ); for ( ; it.current(); ++it ) { if ( ModuleCheckBoxItem* i = dynamic_cast(it.current()) ) { i->setOn(modules.contains(i->module())); //set the status for the module checkbox item // if (i->isOn()) { //if it's checked, show the item // tqWarning("show item!"); // ensureItemVisible(i); // } } }; } /****************************/ CModuleChooserDialog::CModuleChooserDialog( TQWidget* parentDialog, ListCSwordModuleInfo modules ) : KDialogBase(Plain, i18n("Choose work(s)"), Ok, Ok, parentDialog, "CModuleChooser", false, true) { initView(); initConnections(); m_moduleChooser->setModules(modules); }; CModuleChooserDialog::~CModuleChooserDialog() {} ; /** Initializes the view of this dialog */ void CModuleChooserDialog::initView() { setButtonOKText(i18n("Use chosen work(s)")); TQFrame* page = plainPage(); TQHBoxLayout* layout = new TQHBoxLayout(page); m_moduleChooser = new CModuleChooser(page); m_moduleChooser->setMinimumSize(320,400); layout->addWidget(m_moduleChooser); } /** Initializes the connections of this dialog. */ void CModuleChooserDialog::initConnections() {} /** Reimplementation to handle the modules. */ void CModuleChooserDialog::slotOk() { emit modulesChanged( m_moduleChooser->modules() ); KDialogBase::slotOk(); } } //end of namespace Search::Options } //end of namespace Search #include "cmodulechooser.moc"