mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-23 20:14:05 +00:00
Revert "fix:head lazy load"
This reverts commit15702d860b
. Revert "add lazy loading to headwords dialog" This reverts commit473c61724f
.
This commit is contained in:
parent
7eb0fa6d96
commit
ffb1922bd7
|
@ -51,12 +51,9 @@ DictHeadwords::DictHeadwords( QWidget *parent, Config::Class & cfg_,
|
|||
|
||||
ui.matchCase->setChecked( cfg.headwordsDialog.matchCase );
|
||||
|
||||
model = new HeadwordListModel( this );
|
||||
model = new QStringListModel( this );
|
||||
model->setStringList( headers );
|
||||
|
||||
connect(model,&HeadwordListModel::finished,this,[this](){
|
||||
ui.exportButton->setEnabled(true);
|
||||
ui.progressBar->hide();
|
||||
});
|
||||
proxy = new QSortFilterProxyModel( this );
|
||||
|
||||
proxy->setSourceModel( model );
|
||||
|
@ -137,12 +134,16 @@ void DictHeadwords::setup( Dictionary::Class *dict_ )
|
|||
|
||||
setWindowTitle( QString::fromUtf8( dict->getName().c_str() ) );
|
||||
|
||||
auto size = dict->getWordCount();
|
||||
model->setDict(dict);
|
||||
headers.clear();
|
||||
model->setStringList( headers );
|
||||
|
||||
dict->getHeadwords( headers );
|
||||
model->setStringList( headers );
|
||||
|
||||
proxy->sort( 0 );
|
||||
filterChanged();
|
||||
|
||||
if( size > AUTO_APPLY_LIMIT )
|
||||
if( headers.size() > AUTO_APPLY_LIMIT )
|
||||
{
|
||||
cfg.headwordsDialog.autoApply = ui.autoApply->isChecked();
|
||||
ui.autoApply->setChecked( false );
|
||||
|
@ -154,7 +155,6 @@ void DictHeadwords::setup( Dictionary::Class *dict_ )
|
|||
ui.autoApply->setChecked( cfg.headwordsDialog.autoApply );
|
||||
}
|
||||
|
||||
ui.exportButton->setEnabled(false);
|
||||
ui.applyButton->setEnabled( !ui.autoApply->isChecked() );
|
||||
|
||||
setWindowIcon( dict->getIcon() );
|
||||
|
@ -169,7 +169,7 @@ void DictHeadwords::savePos()
|
|||
cfg.headwordsDialog.searchMode = ui.searchModeCombo->currentIndex();
|
||||
cfg.headwordsDialog.matchCase = ui.matchCase->isChecked();
|
||||
|
||||
if( model->totalCount() <= AUTO_APPLY_LIMIT )
|
||||
if( headers.size() <= AUTO_APPLY_LIMIT )
|
||||
cfg.headwordsDialog.autoApply = ui.autoApply->isChecked();
|
||||
|
||||
cfg.headwordsDialog.headwordsDialogGeometry = saveGeometry();
|
||||
|
@ -226,15 +226,12 @@ void DictHeadwords::filterChanged()
|
|||
QString pattern;
|
||||
switch( syntax )
|
||||
{
|
||||
case QRegExp::FixedString:
|
||||
pattern = QRegularExpression::escape( ui.filterLine->text() );
|
||||
break;
|
||||
case QRegExp::WildcardUnix:
|
||||
pattern = wildcardsToRegexp( ui.filterLine->text() );
|
||||
break;
|
||||
default:
|
||||
pattern = ui.filterLine->text();
|
||||
break;
|
||||
case QRegExp::FixedString: pattern = QRegularExpression::escape( ui.filterLine->text() );
|
||||
break;
|
||||
case QRegExp::WildcardUnix: pattern = wildcardsToRegexp( ui.filterLine->text() );
|
||||
break;
|
||||
default: pattern = ui.filterLine->text();
|
||||
break;
|
||||
}
|
||||
|
||||
QRegularExpression regExp( pattern, options );
|
||||
|
@ -248,6 +245,8 @@ void DictHeadwords::filterChanged()
|
|||
QApplication::setOverrideCursor( Qt::WaitCursor );
|
||||
|
||||
proxy->setFilterRegularExpression( regExp );
|
||||
|
||||
|
||||
proxy->sort( 0 );
|
||||
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
@ -273,7 +272,8 @@ void DictHeadwords::autoApplyStateChanged( int state )
|
|||
void DictHeadwords::showHeadwordsNumber()
|
||||
{
|
||||
ui.headersNumber->setText( tr( "Unique headwords total: %1, filtered: %2" )
|
||||
.arg( QString::number( model->totalCount() ), QString::number( proxy->rowCount() ) ) );
|
||||
.arg( QString::number( headers.size() ) )
|
||||
.arg( QString::number( proxy->rowCount() ) ) );
|
||||
}
|
||||
|
||||
void DictHeadwords::saveHeadersToFile()
|
||||
|
@ -303,7 +303,7 @@ void DictHeadwords::saveHeadersToFile()
|
|||
if ( !file.open( QFile::WriteOnly | QIODevice::Text ) )
|
||||
break;
|
||||
|
||||
int headwordsNumber = model->totalCount();
|
||||
int headwordsNumber = proxy->rowCount();
|
||||
|
||||
// Setup progress dialog
|
||||
int n = headwordsNumber;
|
||||
|
@ -335,7 +335,7 @@ void DictHeadwords::saveHeadersToFile()
|
|||
if( progress.wasCanceled() )
|
||||
break;
|
||||
|
||||
QVariant value = model->getRow(i);
|
||||
QVariant value = proxy->data( proxy->index( i, 0 ) );
|
||||
if( !value.canConvert< QString >() )
|
||||
continue;
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "dictionary.hh"
|
||||
#include "delegate.hh"
|
||||
#include "helpwindow.hh"
|
||||
#include "headwordslistmodel.h"
|
||||
|
||||
class DictHeadwords : public QDialog
|
||||
{
|
||||
|
@ -30,8 +29,8 @@ public:
|
|||
protected:
|
||||
Config::Class & cfg;
|
||||
Dictionary::Class * dict;
|
||||
|
||||
HeadwordListModel * model;
|
||||
QStringList headers;
|
||||
QStringListModel * model;
|
||||
QSortFilterProxyModel * proxy;
|
||||
WordListItemDelegate * delegate;
|
||||
QString dictId;
|
||||
|
|
|
@ -19,46 +19,6 @@
|
|||
<item row="3" column="0">
|
||||
<widget class="QListView" name="headersListView"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="autoApply">
|
||||
<property name="toolTip">
|
||||
<string>If checked any filter changes will we immediately applied to headwords list</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Auto apply</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLineEdit" name="filterLine">
|
||||
<property name="toolTip">
|
||||
<string>Filter string (fixed string, wildcards or regular expression)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Filter:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="applyButton">
|
||||
<property name="toolTip">
|
||||
<string>Press this button to apply filter to headwords list</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Apply</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
|
@ -135,17 +95,44 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QProgressBar" name="progressBar">
|
||||
<property name="maximum">
|
||||
<number>0</number>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="applyButton">
|
||||
<property name="toolTip">
|
||||
<string>Press this button to apply filter to headwords list</string>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>-1</number>
|
||||
<property name="text">
|
||||
<string>Apply</string>
|
||||
</property>
|
||||
<property name="invertedAppearance">
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="autoApply">
|
||||
<property name="toolTip">
|
||||
<string>If checked any filter changes will we immediately applied to headwords list</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Auto apply</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Filter:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLineEdit" name="filterLine">
|
||||
<property name="toolTip">
|
||||
<string>Filter string (fixed string, wildcards or regular expression)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
@ -226,7 +226,6 @@ DEFINES += PROGRAM_VERSION=\\\"$$VERSION\\\"
|
|||
HEADERS += folding.hh \
|
||||
article_inspect.h \
|
||||
globalbroadcaster.h \
|
||||
headwordslistmodel.h \
|
||||
inc_case_folding.hh \
|
||||
inc_diacritic_folding.hh \
|
||||
mainwindow.hh \
|
||||
|
@ -367,7 +366,6 @@ FORMS += groups.ui \
|
|||
SOURCES += folding.cc \
|
||||
article_inspect.cpp \
|
||||
globalbroadcaster.cpp \
|
||||
headwordslistmodel.cpp \
|
||||
main.cc \
|
||||
dictionary.cc \
|
||||
config.cc \
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
#include "headwordslistmodel.h"
|
||||
|
||||
HeadwordListModel::HeadwordListModel(QObject *parent)
|
||||
: QAbstractListModel(parent), wordsCount(0)
|
||||
{}
|
||||
|
||||
int HeadwordListModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return parent.isValid() ? 0 : wordsCount;
|
||||
}
|
||||
|
||||
int HeadwordListModel::totalCount() const{
|
||||
return totalSize;
|
||||
}
|
||||
|
||||
bool HeadwordListModel::isFinish() const{
|
||||
return wordsCount >=totalSize;
|
||||
}
|
||||
|
||||
QString HeadwordListModel::getRow(int row)
|
||||
{
|
||||
if(fileSortedList.empty()){
|
||||
fileSortedList<<fileList;
|
||||
fileSortedList.sort();
|
||||
}
|
||||
return fileSortedList.at(row);
|
||||
}
|
||||
|
||||
int HeadwordListModel::wordCount() const{
|
||||
return wordsCount;
|
||||
}
|
||||
|
||||
QVariant HeadwordListModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
if (index.row() >= totalSize || index.row() < 0)
|
||||
return QVariant();
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
return fileList.at(index.row());
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
bool HeadwordListModel::canFetchMore(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.isValid())
|
||||
return false;
|
||||
return (wordsCount < totalSize);
|
||||
}
|
||||
|
||||
void HeadwordListModel::fetchMore(const QModelIndex &parent)
|
||||
{
|
||||
if (parent.isValid())
|
||||
return;
|
||||
int remainder = fileList.size() - wordsCount;
|
||||
int itemsToFetch = qMin(100, remainder);
|
||||
|
||||
if (itemsToFetch <= 0)
|
||||
return;
|
||||
|
||||
beginInsertRows(QModelIndex(), wordsCount, wordsCount + itemsToFetch - 1);
|
||||
|
||||
wordsCount+= itemsToFetch;
|
||||
|
||||
endInsertRows();
|
||||
|
||||
emit numberPopulated(wordsCount);
|
||||
}
|
||||
|
||||
void HeadwordListModel::setDict(Dictionary::Class * dict){
|
||||
_dict = dict;
|
||||
totalSize = _dict->getWordCount();
|
||||
wordsCount=0;
|
||||
QThreadPool::globalInstance()->start(
|
||||
[ this ]()
|
||||
{
|
||||
beginResetModel();
|
||||
_dict->getHeadwords( fileList );
|
||||
totalSize = fileList.size();
|
||||
emit finished(totalSize);
|
||||
endResetModel();
|
||||
} );
|
||||
|
||||
}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
#ifndef HEADWORDSLISTMODEL_H
|
||||
#define HEADWORDSLISTMODEL_H
|
||||
|
||||
#include "dictionary.hh"
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QStringList>
|
||||
|
||||
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);
|
||||
signals:
|
||||
void numberPopulated(int number);
|
||||
void finished(int number);
|
||||
|
||||
public slots:
|
||||
void setDict(Dictionary::Class * dict);
|
||||
|
||||
protected:
|
||||
bool canFetchMore(const QModelIndex &parent) const override;
|
||||
void fetchMore(const QModelIndex &parent) override;
|
||||
|
||||
|
||||
private:
|
||||
QStringList fileList;
|
||||
QStringList fileSortedList;
|
||||
long wordsCount;
|
||||
long totalSize;
|
||||
Dictionary::Class * _dict;
|
||||
};
|
||||
|
||||
#endif // HEADWORDSLISTMODEL_H
|
Loading…
Reference in a new issue