/********* * * 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 "cswordsetupmodulelistview.h" #include "btinstallmgr.h" #include "backend/cswordbackend.h" #include "backend/cswordmoduleinfo.h" #include "util/cresmgr.h" #include "util/ctoolclass.h" //QT includes #include //KDE includes #include #include using namespace sword; namespace BookshelfManager { /** Tooltip implementation for TQListView widgets. * @short Tooltip for InstallationManager listviews * @author Joachim Ansorg */ class ToolTip : public TQToolTip { public: /** Constructor which takes the listview to operate on. * @param listview We operate on this widget to request tooltips from it'd child items. * @short Constructor. */ ToolTip(CSwordSetupModuleListView* listview) : TQToolTip( listview->viewport() ), m_parent( listview ) {} /** Reimplementation of TQToolTip::maybeTip. It's requested if a new tooltip may be displayed. * @short Display a tooltip if we're over an item */ virtual void maybeTip(const TQPoint& pos) { TQListViewItem* i = m_parent->itemAt(pos); Q_ASSERT(i); const TQRect rect = m_parent->itemRect(i); if (m_parent->showTooltip(i, pos, 0)) { const TQString tipText = m_parent->tooltip(i, 0); tip(rect, tipText); } } protected: CSwordSetupModuleListView* m_parent; }; /** Listview specially made for the installation manager. * @short InstallationManager module listviews * @author Martin Gruner */ CSwordSetupModuleListView::CSwordSetupModuleListView(TQWidget *parent, bool is_remote, sword::InstallSource* installSource) : TDEListView(parent), m_is_remote( is_remote ) { Q_ASSERT(installSource); new BookshelfManager::ToolTip(this); m_backend = installSource ? BTInstallMgr::Tool::backend(installSource) : CPointers::backend(); addColumn(i18n("Name")); setColumnWidthMode( 0, TQListView::Maximum ); setColumnWidth( 0, 200 ); //don`t get too broad addColumn(i18n("Status")); setColumnAlignment(1, TQt::AlignRight); addColumn(i18n("Installed version")); //version setColumnAlignment(2, TQt::AlignHCenter); if (m_is_remote) { addColumn(i18n("Remote version")); //version } else { addColumn(i18n("Location")); } setColumnAlignment(3, TQt::AlignLeft); setAllColumnsShowFocus(true); setFullWidth(true); setRootIsDecorated(true); setResizeMode(TQListView::LastColumn); setTooltipColumn(0); init(); } CSwordSetupModuleListView::~CSwordSetupModuleListView() { if (m_is_remote) { delete m_backend; } } void CSwordSetupModuleListView::init() { m_categoryBible = new TQCheckListItem(this, i18n("Bibles"), TQCheckListItem::CheckBoxController); m_categoryCommentary = new TQCheckListItem(this, i18n("Commentaries"), TQCheckListItem::CheckBoxController); m_categoryLexicon = new TQCheckListItem(this, i18n("Lexicons"), TQCheckListItem::CheckBoxController); m_categoryBook = new TQCheckListItem(this, i18n("Books"), TQCheckListItem::CheckBoxController); m_categoryDevotionals = new TQCheckListItem(this, i18n("Daily Devotionals"), TQCheckListItem::CheckBoxController); m_categoryGlossaries = new TQCheckListItem(this, i18n("Glossaries"), TQCheckListItem::CheckBoxController); m_categoryBible->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryCommentary->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryLexicon->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryBook->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryDevotionals->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryGlossaries->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); m_categoryBible->setOpen(true); m_categoryCommentary->setOpen(true); m_categoryLexicon->setOpen(true); m_categoryBook->setOpen(true); m_categoryDevotionals->setOpen(true); m_categoryGlossaries->setOpen(true); // connect(this, TQT_SIGNAL(executed(TQListViewItem*)), TQT_SLOT(slotItemClicked(TQListViewItem*))); connect(this, TQT_SIGNAL(clicked(TQListViewItem*)), TQT_SLOT(slotItemClicked(TQListViewItem*))); //items have to be clicked only once in double click mode connect(this, TQT_SIGNAL(spacePressed(TQListViewItem*)), TQT_SLOT(slotItemClicked(TQListViewItem*))); } void CSwordSetupModuleListView::finish() { if (!m_categoryBible->childCount()) delete m_categoryBible; if (!m_categoryCommentary->childCount()) delete m_categoryCommentary; if (!m_categoryBook->childCount()) delete m_categoryBook; if (!m_categoryLexicon->childCount()) delete m_categoryLexicon; if (!m_categoryDevotionals->childCount()) delete m_categoryDevotionals; if (!m_categoryGlossaries->childCount()) delete m_categoryGlossaries; } void CSwordSetupModuleListView::clear() { TQListView::clear(); init(); } void CSwordSetupModuleListView::addModule(CSwordModuleInfo* module, TQString localVersion) { TQListViewItem* parent = 0; switch ( module->type() ) { case CSwordModuleInfo::Bible: parent = m_categoryBible; break; case CSwordModuleInfo::Commentary: parent = m_categoryCommentary; break; case CSwordModuleInfo::Lexicon: parent = m_categoryLexicon; break; case CSwordModuleInfo::GenericBook: parent = m_categoryBook; break; default: parent = 0; break; } //handling for special module types if ((parent == m_categoryLexicon) && (module->category() == CSwordModuleInfo::Glossary)) { parent = m_categoryGlossaries; } if ((parent == m_categoryLexicon) && (module->category() == CSwordModuleInfo::DailyDevotional)) { parent = m_categoryDevotionals; } //now we know the category, find the right language group in that category const CLanguageMgr::Language* const lang = module->language(); TQString langName = lang->translatedName(); if (!lang->isValid()) { langName = TQString(module->module()->Lang()); } TQListViewItem * langFolder = 0; if (parent) { langFolder = parent->firstChild(); while( langFolder ) { //try to find language folder if it exsists if (langFolder->text(0) == langName) { //found right folder break; } langFolder = langFolder->nextSibling(); } } if (!langFolder) { //not yet there langFolder = new TQCheckListItem(parent, langName, TQCheckListItem::CheckBoxController); langFolder->setPixmap(0, SmallIcon(CResMgr::mainIndex::closedFolder::icon, 16)); langFolder->setOpen(false); } Q_ASSERT(langFolder); TQListViewItem* newItem = 0; if (langFolder) { newItem = new TQCheckListItem(langFolder, module->name(), TQCheckListItem::CheckBox); } else { //shouldn't happen newItem = new TQCheckListItem(this, module->name(), TQCheckListItem::CheckBox); } newItem->setPixmap(0, CToolClass::getIconForModule(module)); if (m_is_remote) { newItem->setText(1, localVersion.isEmpty() ? i18n("New") : i18n("Updated")); } else { newItem->setText(1, i18n("Installed") ); } newItem->setText(2, localVersion); if (m_is_remote) { newItem->setText(3, module->config(CSwordModuleInfo::ModuleVersion)); } else { newItem->setText(3, module->config(CSwordModuleInfo::AbsoluteDataPath)); } } TQStringList CSwordSetupModuleListView::selectedModules() { TQStringList moduleList; TQListViewItemIterator list_it( this ); while ( list_it.current() ) { TQCheckListItem* i = dynamic_cast( list_it.current() ); if (i && i->isOn() && i->type() == TQCheckListItem::CheckBox ) { moduleList << i->text(0); } ++list_it; } return moduleList; } void CSwordSetupModuleListView::slotItemClicked(TQListViewItem*) { emit selectedModulesChanged(); } bool CSwordSetupModuleListView::showTooltip(TQListViewItem* i, const TQPoint&, int) const { TQCheckListItem* checkItem = dynamic_cast( i ); Q_ASSERT(checkItem); return (checkItem && (checkItem->type() == TQCheckListItem::CheckBox)); } TQString CSwordSetupModuleListView::tooltip(TQListViewItem* i, int /*column*/) const { TQString ret; TQCheckListItem* checkItem = dynamic_cast( i ); if (checkItem && (checkItem->type() == TQCheckListItem::CheckBox)) { const TQString moduleName = checkItem->text(0); CSwordModuleInfo* module = m_backend->findModuleByName(moduleName); ret = CToolClass::moduleToolTip(module); } return ret; } } //NAMESPACE #include "cswordsetupmodulelistview.moc"