diff options
Diffstat (limited to 'bibletime/frontend/keychooser/clexiconkeychooser.cpp')
-rw-r--r-- | bibletime/frontend/keychooser/clexiconkeychooser.cpp | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/bibletime/frontend/keychooser/clexiconkeychooser.cpp b/bibletime/frontend/keychooser/clexiconkeychooser.cpp deleted file mode 100644 index ff55602..0000000 --- a/bibletime/frontend/keychooser/clexiconkeychooser.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/********* -* -* 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 "clexiconkeychooser.h" -#include "ckeychooserwidget.h" -#include "cscrollbutton.h" - -#include "backend/cswordlexiconmoduleinfo.h" -#include "frontend/cbtconfig.h" - -#include "util/cresmgr.h" - -//STL headers -#include <algorithm> -#include <iterator> -#include <map> - -//Qt includes -#include <qcombobox.h> -#include <qlayout.h> -#include <qlistbox.h> - -//KDE includes -#include <klocale.h> - -CLexiconKeyChooser::CLexiconKeyChooser(ListCSwordModuleInfo modules, CSwordKey *key, QWidget *parent, const char *name ) -: CKeyChooser(modules, key, parent, name), -m_key(dynamic_cast<CSwordLDKey*>(key)) { - - setModules(modules, false); - - //we use a layout because the key chooser should be resized to full size - m_layout = new QHBoxLayout(this, QBoxLayout::LeftToRight); - m_layout->setResizeMode(QLayout::FreeResize); - - m_widget = new CKeyChooserWidget(0, false, this); - - //don't allow a too high width, try to keep as narrow as possible - //to aid users with smaller screen resolutions - m_widget->comboBox()->setMaximumWidth(200); - - m_widget->setToolTips( - CResMgr::displaywindows::lexiconWindow::entryList::tooltip, - CResMgr::displaywindows::lexiconWindow::nextEntry::tooltip, - CResMgr::displaywindows::general::scrollButton::tooltip, - CResMgr::displaywindows::lexiconWindow::previousEntry::tooltip - ); - - m_layout->addWidget(m_widget,0,Qt::AlignLeft); - - connect(m_widget,SIGNAL(changed(int)),SLOT(activated(int))); - connect(m_widget,SIGNAL(focusOut(int)),SLOT(activated(int))); - - setModules(modules, true); - setKey(key); -} - -CSwordKey* const CLexiconKeyChooser::key() { - // qWarning("key"); - return m_key; -} - -void CLexiconKeyChooser::setKey(CSwordKey* key) { - if (!(m_key = dynamic_cast<CSwordLDKey*>(key))) { - return; - } - - // qWarning("setKey start"); - QString newKey = m_key->key(); - const int index = m_widget->comboBox()->listBox()->index(m_widget->comboBox()->listBox()->findItem( newKey )); - m_widget->comboBox()->setCurrentItem(index); - - // qWarning("setKey end"); - emit keyChanged( m_key ); -} - -void CLexiconKeyChooser::activated(int index) { - // qWarning("activated"); - const QString text = m_widget->comboBox()->text(index); - - // To prevent from eternal loop, because activated() is emitted again - if (m_key && m_key->key() != text) { - m_key->key(text); - setKey(m_key); - } - // qWarning("activated end"); -} - -inline const bool my_cmpEntries(const QString& a, const QString& b) { - return a < b; -}; - -/** Reimplementation. */ -void CLexiconKeyChooser::refreshContent() { - if (m_modules.count() == 1) { - m_widget->reset(m_modules.first()->entries(), 0, true); - // qWarning("resetted"); - } - else { - typedef std::multimap<unsigned int, QStringList*> EntryMap; - EntryMap entryMap; - QStringList* entries = 0; - for (m_modules.first(); m_modules.current(); m_modules.next()) { - entries = m_modules.current()->entries(); - entryMap.insert( std::make_pair(entries->count(), entries) ); - } - - QStringList goodEntries; //The string list which contains the entries which are available in all modules - - EntryMap::iterator it = entryMap.begin(); //iterator to go thoigh all selected modules - QStringList refEntries = *(it->second); //copy the items for the first time - QStringList* cmpEntries = ( ++it )->second; //list for comparision, starts with the second module in the map - - while(it != entryMap.end()) { - std::set_intersection( - refEntries.begin(), --(refEntries.end()), //--end() is the last valid entry - cmpEntries->begin(), --(cmpEntries->end()), - std::back_inserter(goodEntries), //append valid entries to the end of goodEntries - my_cmpEntries //ci_cmpEntries is the comparision function - ); - - cmpEntries = ( ++it )->second; //this is a pointer to the string list of a new module - - /* - * use the good entries for next comparision, - * because the final list can only have the entries of goodEntries as maxiumum - */ - refEntries = goodEntries; - }; - - m_widget->reset(goodEntries, 0, true); //write down the entries - } //end of ELSE - - //make sure the list sorted - /* This is not the best solution, module()->entries() should be sorted already */ - // Q_ASSERT(m_widget->comboBox()->listBox()); - // m_widget->comboBox()->listBox()->sort(); -} - -/** No descriptions */ -void CLexiconKeyChooser::adjustFont() { - // //Make sure the entries are displayed correctly. - // m_widget->comboBox()->setFont( CBTConfig::get( m_modules.first()->language() ).second ); -} - -/** Sets the module and refreshes the combo boxes */ -void CLexiconKeyChooser::setModules( const ListCSwordModuleInfo& modules, const bool refresh ) { - Q_ASSERT(!m_modules.autoDelete()); - m_modules.clear(); - Q_ASSERT(!m_modules.autoDelete()); - - // for (modules.first(); modules.current(); modules.next()) { - ListCSwordModuleInfo::const_iterator end_it = modules.end(); - for (ListCSwordModuleInfo::const_iterator it(modules.begin()); it != end_it; ++it) { - CSwordLexiconModuleInfo* lexicon = dynamic_cast<CSwordLexiconModuleInfo*>(*it); - if (lexicon) { - m_modules.append(lexicon); - } - } - - if (refresh) { - refreshContent(); - // adjustFont(); - } -} - -/** No descriptions */ -void CLexiconKeyChooser::updateKey(CSwordKey*) {} |