goldendict-ng/src/headwordsmodel.hh
xiaoyifang c4caec7d68
opt: headwords dialog (#1600)
* opt: headword dialog optimization

Changes:

- when the headword count < 500000(arbitrary number) ,load all at once.
- opt: remove unused signal
-  headword dialog ui add max filter results


---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-06-25 15:24:33 +08:00

58 lines
1.5 KiB
C++

#ifndef HEADWORDSMODEL_H
#define HEADWORDSMODEL_H
#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;
};
#endif // HEADWORDSMODEL_H