diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch) | |
tree | 5ac38a06f3dde268dc7927dc155896926aaf7012 /kspell2/backgroundthread.cpp | |
download | tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kspell2/backgroundthread.cpp')
-rw-r--r-- | kspell2/backgroundthread.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/kspell2/backgroundthread.cpp b/kspell2/backgroundthread.cpp new file mode 100644 index 000000000..ffa5d0d8a --- /dev/null +++ b/kspell2/backgroundthread.cpp @@ -0,0 +1,115 @@ +/** + * backgroundthread.cpp + * + * Copyright (C) 2004 Zack Rusin <zack@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ +#include "backgroundthread.h" + +#include "threadevents.h" +#include "broker.h" +#include "filter.h" +#include "dictionary.h" + +#include <kdebug.h> +#include <qapplication.h> + +using namespace KSpell2; + +BackgroundThread::BackgroundThread() + : QThread(), m_broker( 0 ), m_dict( 0 ) +{ + m_recv = 0; + m_filter = Filter::defaultFilter(); + m_done = false; +} + +void BackgroundThread::setReceiver( QObject *recv ) +{ + m_recv = recv; +} + +void BackgroundThread::setBroker( const Broker::Ptr& broker ) +{ + stop(); + m_broker = broker; + delete m_dict; + m_dict = m_broker->dictionary(); + m_filter->restart(); +} + +QStringList BackgroundThread::suggest( const QString& word ) const +{ + return m_dict->suggest( word ); +} + +void BackgroundThread::run() +{ + m_mutex.lock(); + m_done = false; + for ( Word w = m_filter->nextWord(); !m_done && !w.end; + w = m_filter->nextWord() ) { + if ( !m_dict->check( w.word ) && !m_done ) { + MisspellingEvent *event = new MisspellingEvent( w.word, w.start ); + QApplication::postEvent( m_recv, event ); + } + } + m_mutex.unlock(); + FinishedCheckingEvent *event = new FinishedCheckingEvent(); + QApplication::postEvent( m_recv, event ); +} + +void BackgroundThread::setText( const QString& buff ) +{ + stop(); + m_mutex.lock(); + m_filter->setBuffer( buff ); + m_mutex.unlock(); + start(); +} + +void BackgroundThread::setFilter( Filter *filter ) +{ + stop(); + m_mutex.lock(); + Filter *oldFilter = m_filter; + m_filter = filter; + if ( oldFilter ) { + m_filter->setBuffer( oldFilter->buffer() ); + oldFilter->setBuffer( QString::null ); + } + m_mutex.unlock(); + start(); +} + +void BackgroundThread::changeLanguage( const QString& lang ) +{ + stop(); + m_mutex.lock(); + delete m_dict; + m_dict = m_broker->dictionary( lang ); + m_filter->restart(); + m_mutex.unlock(); + start(); +} + +void BackgroundThread::stop() +{ + //### maybe terminate() would be better than using m_done + m_done = true; + wait(); +} |