You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bibletime/bibletime/frontend/cswordsetupmodulelistview.cpp

275 lines
9.8 KiB

/*********
*
* 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 <tqtooltip.h>
//KDE includes
#include <tdelocale.h>
#include <kiconloader.h>
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<TQCheckListItem*>( 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<TQCheckListItem*>( i );
Q_ASSERT(checkItem);
return (checkItem && (checkItem->type() == TQCheckListItem::CheckBox));
}
TQString CSwordSetupModuleListView::tooltip(TQListViewItem* i, int /*column*/) const {
TQString ret;
TQCheckListItem* checkItem = dynamic_cast<TQCheckListItem*>( 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"