mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-23 18:32:53 +00:00
gwenview: use the new recursive listing feature of KDirLister
requires the following commit from kdelibs: 5d60973ab442fb6c3ccad7027d96da18f4fdeaea Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
6983e81516
commit
c55b482da9
2 changed files with 26 additions and 51 deletions
|
@ -36,8 +36,7 @@ namespace Gwenview
|
|||
|
||||
struct RecursiveDirModelPrivate
|
||||
{
|
||||
KUrl mUrl;
|
||||
QList<KDirLister*> mDirListers;
|
||||
KDirLister* mDirLister;
|
||||
|
||||
int rowForUrl(const KUrl &url) const
|
||||
{
|
||||
|
@ -77,36 +76,32 @@ struct RecursiveDirModelPrivate
|
|||
return mList;
|
||||
}
|
||||
|
||||
void listDir(RecursiveDirModel* parent, const KUrl &url);
|
||||
|
||||
private:
|
||||
KFileItemList mList;
|
||||
QHash<KUrl, int> mRowForUrl;
|
||||
};
|
||||
|
||||
void RecursiveDirModelPrivate::listDir(RecursiveDirModel* parent, const KUrl &url)
|
||||
{
|
||||
KDirLister* dirLister = new KDirLister(parent);
|
||||
parent->connect(
|
||||
dirLister, SIGNAL(itemsAdded(KFileItemList)),
|
||||
parent, SLOT(slotItemsAdded(KFileItemList))
|
||||
);
|
||||
parent->connect(
|
||||
dirLister, SIGNAL(itemsDeleted(KFileItemList)),
|
||||
parent, SLOT(slotItemsDeleted(KFileItemList))
|
||||
);
|
||||
parent->connect(
|
||||
dirLister, SIGNAL(completed()),
|
||||
parent, SLOT(slotCompleted())
|
||||
);
|
||||
mDirListers.append(dirLister);
|
||||
dirLister->openUrl(url);
|
||||
}
|
||||
|
||||
RecursiveDirModel::RecursiveDirModel(QObject* parent)
|
||||
: QAbstractListModel(parent)
|
||||
, d(new RecursiveDirModelPrivate)
|
||||
{
|
||||
d->mDirLister = new KDirLister(this);
|
||||
connect(
|
||||
d->mDirLister, SIGNAL(itemsAdded(KFileItemList)),
|
||||
this, SLOT(slotItemsAdded(KFileItemList))
|
||||
);
|
||||
connect(
|
||||
d->mDirLister, SIGNAL(itemsDeleted(KFileItemList)),
|
||||
this, SLOT(slotItemsDeleted(KFileItemList))
|
||||
);
|
||||
connect(
|
||||
d->mDirLister, SIGNAL(clear()),
|
||||
this, SLOT(slotClear())
|
||||
);
|
||||
connect(
|
||||
d->mDirLister, SIGNAL(completed()),
|
||||
this, SIGNAL(completed())
|
||||
);
|
||||
}
|
||||
|
||||
RecursiveDirModel::~RecursiveDirModel()
|
||||
|
@ -116,30 +111,20 @@ RecursiveDirModel::~RecursiveDirModel()
|
|||
|
||||
KUrl RecursiveDirModel::url() const
|
||||
{
|
||||
return d->mUrl;
|
||||
return d->mDirLister->url();
|
||||
}
|
||||
|
||||
void RecursiveDirModel::setUrl(const KUrl& url)
|
||||
{
|
||||
foreach (KDirLister* lister, d->mDirListers) {
|
||||
lister->stop();
|
||||
}
|
||||
qDeleteAll(d->mDirListers);
|
||||
d->mDirListers.clear();
|
||||
beginResetModel();
|
||||
d->clear();
|
||||
endResetModel();
|
||||
d->mUrl = url;
|
||||
d->listDir(this, url);
|
||||
d->mDirLister->openUrl(url, true);
|
||||
}
|
||||
|
||||
int RecursiveDirModel::rowCount(const QModelIndex& parent) const
|
||||
{
|
||||
if (parent.isValid()) {
|
||||
return 0;
|
||||
} else {
|
||||
return d->list().count();
|
||||
}
|
||||
return d->list().count();
|
||||
}
|
||||
|
||||
QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const
|
||||
|
@ -168,15 +153,12 @@ QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const
|
|||
|
||||
void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
|
||||
{
|
||||
QList<KUrl> dirUrls;
|
||||
KFileItemList fileList;
|
||||
Q_FOREACH(const KFileItem& item, newList) {
|
||||
if (item.isFile()) {
|
||||
if (d->rowForUrl(item.url()) == -1) {
|
||||
fileList << item;
|
||||
}
|
||||
} else if (item.isReadable()) {
|
||||
dirUrls << item.url();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -187,10 +169,6 @@ void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
|
|||
}
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
Q_FOREACH(const KUrl& url, dirUrls) {
|
||||
d->listDir(this, url);
|
||||
}
|
||||
}
|
||||
|
||||
void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list)
|
||||
|
@ -211,14 +189,11 @@ void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list)
|
|||
}
|
||||
}
|
||||
|
||||
void RecursiveDirModel::slotCompleted()
|
||||
void RecursiveDirModel::slotClear()
|
||||
{
|
||||
foreach (const KDirLister* lister, d->mDirListers) {
|
||||
if (!lister->isFinished()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
emit completed();
|
||||
beginResetModel();
|
||||
d->clear();
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -58,7 +58,7 @@ Q_SIGNALS:
|
|||
private Q_SLOTS:
|
||||
void slotItemsAdded(const KFileItemList&);
|
||||
void slotItemsDeleted(const KFileItemList&);
|
||||
void slotCompleted();
|
||||
void slotClear();
|
||||
private:
|
||||
RecursiveDirModelPrivate* const d;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue