/********* * * 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 "cmoduleresultview.h" #include "backend/cswordmoduleinfo.h" #include "frontend/util/csortlistviewitem.h" #include "frontend/cexportmanager.h" #include "util/cresmgr.h" #include "util/ctoolclass.h" //TQt includes //KDE includes #include #include #include namespace Search { namespace Result { /******************************************** ************ ModuleResultList ************** ********************************************/ CModuleResultView::CModuleResultView(TQWidget* parent, const char* name) : TDEListView(parent, name) { initView(); initConnections(); strongsResults = 0; }; CModuleResultView::~CModuleResultView() {} ; /** Initializes this widget. */ void CModuleResultView::initView() { addColumn(i18n("Work")); addColumn(i18n("Hits")); setFullWidth(true); // setFullWidth(true); setSorting(0, true); setSorting(1, true); setAllColumnsShowFocus(true); //setup the popup menu m_popup = new TDEPopupMenu(this); // m_popup->insertTitle(i18n("Bible window")); m_actions.copyMenu = new TDEActionMenu(i18n("Copy..."), CResMgr::searchdialog::result::moduleList::copyMenu::icon, TQT_TQOBJECT(m_popup)); m_actions.copyMenu->setDelayed(false); m_actions.copy.result = new TDEAction(i18n("Reference only"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(copyResult()), TQT_TQOBJECT(this)); m_actions.copyMenu->insert(m_actions.copy.result); m_actions.copy.resultWithText = new TDEAction(i18n("Reference with text"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(copyResultWithText()), TQT_TQOBJECT(this)); m_actions.copyMenu->insert(m_actions.copy.resultWithText); m_actions.copyMenu->plug(m_popup); m_actions.saveMenu = new TDEActionMenu(i18n("Save..."), CResMgr::searchdialog::result::moduleList::saveMenu::icon, TQT_TQOBJECT(m_popup)); m_actions.saveMenu->setDelayed( false ); m_actions.save.result = new TDEAction(i18n("Reference only"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(saveResult()), TQT_TQOBJECT(this)); m_actions.saveMenu->insert(m_actions.save.result); m_actions.save.resultWithText = new TDEAction(i18n("Reference with text"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(saveResultWithText()), TQT_TQOBJECT(this)); m_actions.saveMenu->insert(m_actions.save.resultWithText); m_actions.saveMenu->plug(m_popup); m_actions.printMenu = new TDEActionMenu(i18n("Print..."), CResMgr::searchdialog::result::moduleList::printMenu::icon, TQT_TQOBJECT(m_popup)); m_actions.printMenu->setDelayed(false); m_actions.print.result = new TDEAction(i18n("Reference with text"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(printResult()), TQT_TQOBJECT(this)); m_actions.printMenu->insert(m_actions.print.result); m_actions.printMenu->plug(m_popup); } /** Initializes the connections of this widget, */ void CModuleResultView::initConnections() { connect(this, TQT_SIGNAL(currentChanged(TQListViewItem*)), this, TQT_SLOT(executed(TQListViewItem*))); connect(this, TQT_SIGNAL(contextMenu(TDEListView*, TQListViewItem*, const TQPoint&)), this, TQT_SLOT(showPopup(TDEListView*, TQListViewItem*, const TQPoint&))); } /** Setups the tree using the given list of modules. */ void CModuleResultView::setupTree( ListCSwordModuleInfo modules, const TQString& searchedText ) { clear(); util::CSortListViewItem* item = 0; util::CSortListViewItem* oldItem = 0; sword::ListKey result; if (strongsResults) { delete strongsResults; strongsResults = 0; } bool strongsAvailable = false; ListCSwordModuleInfo::iterator end_it = modules.end(); for (ListCSwordModuleInfo::iterator it(modules.begin()); it != end_it; ++it) { // for (modules.first(); modules.current(); modules.next()) { result = (*it)->searchResult(); item = new util::CSortListViewItem(this, (*it)->name(), TQString::number(result.Count()) ); item->setColumnSorting(1, util::CSortListViewItem::Number); item->setPixmap(0,CToolClass::getIconForModule(*it) ); oldItem = item; //---------------------------------------------------------------------- // we need to make a decision here. Either don't show any Strong's // number translations, or show the first one in the search text, or // figure out how to show them all. // I choose option number 2 at this time. //---------------------------------------------------------------------- int sstIndex, sTokenIndex; // strong search text index for finding "strong:" if ((sstIndex = searchedText.find("strong:", 0)) != -1) { TQString sNumber; //-------------------------------------------------- // get the strongs number from the search text //-------------------------------------------------- // first find the first space after "strong:" // this should indicate a change in search token sstIndex = sstIndex + 7; sTokenIndex = searchedText.find(" ", sstIndex); sNumber = searchedText.mid(sstIndex, sTokenIndex - sstIndex); setupStrongsResults((*it), item, sNumber); item->setOpen(true); strongsAvailable = true; } }; //Allow to hide the module strongs if there are any available setRootIsDecorated( strongsAvailable ); setSelected(currentItem(), true); executed(currentItem()); } void CModuleResultView::setupStrongsResults(CSwordModuleInfo* module, TQListViewItem* parent, const TQString& sNumber) { TQString lText; util::CSortListViewItem* item = 0; strongsResults = new StrongsResultClass(module, sNumber); for (int cnt = 0; cnt < strongsResults->Count(); ++cnt) { lText = strongsResults->keyText(cnt); item = new util::CSortListViewItem(parent, lText, TQString::number(strongsResults->keyCount(cnt))); item->setColumnSorting(1, util::CSortListViewItem::Number); } } /** Is executed when an item was selected in the list. */ void CModuleResultView::executed( TQListViewItem* i ) { TQString itemText, lText; if (CSwordModuleInfo* m = CPointers::backend()->findModuleByName(i->text(0))) { emit moduleChanged(); emit moduleSelected(m); return; } if (!strongsResults) { return; } itemText = i->text(0); for (int cnt = 0; cnt < strongsResults->Count(); cnt++) { lText = strongsResults->keyText(cnt); if (lText == itemText) { //clear the verses list emit moduleChanged(); emit strongsSelected(activeModule(), strongsResults->getKeyList(cnt)); return; } } } /** Returns the currently active module. */ CSwordModuleInfo* const CModuleResultView::activeModule() { Q_ASSERT(currentItem()); TQListViewItem* item = currentItem(); if (!item) { return 0; } // we need to find the parent most node because that is the node // that is the module name. while (item->parent()) { item = item->parent(); } if (item) { return CPointers::backend()->findModuleByName(item->text(0)); } return 0; } /** No descriptions */ void CModuleResultView::showPopup(TDEListView*, TQListViewItem*, const TQPoint& point) { //make sure that all entries have the correct status m_popup->exec(point); } /** Copies the whole search result into the clipboard. */ void CModuleResultView::copyResult() { if (CSwordModuleInfo* m = activeModule()) { sword::ListKey result = m->searchResult(); CExportManager mgr(i18n("Copy search result..."), true, i18n("Copying search result")); mgr.copyKeyList(&result,m,CExportManager::Text,false); }; } /** Copies the whole search result with the text into the clipboard. */ void CModuleResultView::copyResultWithText() { if (CSwordModuleInfo* m = activeModule()) { sword::ListKey result = m->searchResult(); CExportManager mgr(i18n("Copy search result..."), true, i18n("Copying search result")); mgr.copyKeyList(&result,m,CExportManager::Text,true); }; } /** Saves the search result keys. */ void CModuleResultView::saveResult() { if (CSwordModuleInfo* m = activeModule()) { sword::ListKey result = m->searchResult(); CExportManager mgr(i18n("Save search result..."), true, i18n("Saving search result")); mgr.saveKeyList(&result,m,CExportManager::Text,false); }; } /** Saves the search result with it's text. */ void CModuleResultView::saveResultWithText() { if (CSwordModuleInfo* m = activeModule()) { sword::ListKey result = m->searchResult(); CExportManager mgr(i18n("Save search result..."), true, i18n("Saving search result")); mgr.saveKeyList(&result,m,CExportManager::Text,true); }; } /** Appends the whole search result to the printer queue. */ void CModuleResultView::printResult() { if (CSwordModuleInfo* m = activeModule()) { sword::ListKey result = m->searchResult(); CExportManager mgr(i18n("Print search result..."), true, i18n("Printing search result")); mgr.printKeyList(&result,m,CBTConfig::getDisplayOptionDefaults(), CBTConfig::getFilterOptionDefaults()); }; } } //end of namespace Search.Result } //end of namespace Search #include "cmoduleresultview.moc"