goldendict-ng/src/headwordsmodel.hh
shenleban tongying 618310f772
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
clean: just use #pragma once
2024-11-06 22:53:04 -05:00

55 lines
1.4 KiB
C++

#pragma once
#include "dict/dictionary.hh"
#include <QAbstractListModel>
#include <QStringList>
static const int HEADWORDS_MAX_LIMIT = 500000;
class HeadwordListModel: public QAbstractListModel
{
Q_OBJECT
public:
HeadwordListModel( QObject * parent = nullptr );
int rowCount( const QModelIndex & parent = QModelIndex() ) const override;
int totalCount() const;
int wordCount() const;
bool isFinish() const;
QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const override;
QString getRow( int row );
void setFilter( const QRegularExpression & );
void appendWord( const QString & word );
int getCurrentIndex() const;
bool containWord( const QString & word );
QSet< QString > getRemainRows( int & nodeIndex );
void setMaxFilterResults( int _maxFilterResults );
signals:
void numberPopulated( int number );
public slots:
void setDict( Dictionary::Class * dict );
void requestFinished();
protected:
bool canFetchMore( const QModelIndex & parent ) const override;
void fetchMore( const QModelIndex & parent ) override;
private:
QStringList words;
QStringList original_words;
QSet< QString > hashedWords;
QStringList filterWords;
bool filtering;
QStringList fileSortedList;
long totalSize;
int maxFilterResults;
bool finished;
Dictionary::Class * _dict;
int index;
char * ptr;
QMutex lock;
std::list< sptr< Dictionary::WordSearchRequest > > queuedRequests;
};