mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-24 02:42:52 +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
|
struct RecursiveDirModelPrivate
|
||||||
{
|
{
|
||||||
KUrl mUrl;
|
KDirLister* mDirLister;
|
||||||
QList<KDirLister*> mDirListers;
|
|
||||||
|
|
||||||
int rowForUrl(const KUrl &url) const
|
int rowForUrl(const KUrl &url) const
|
||||||
{
|
{
|
||||||
|
@ -77,36 +76,32 @@ struct RecursiveDirModelPrivate
|
||||||
return mList;
|
return mList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void listDir(RecursiveDirModel* parent, const KUrl &url);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KFileItemList mList;
|
KFileItemList mList;
|
||||||
QHash<KUrl, int> mRowForUrl;
|
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)
|
RecursiveDirModel::RecursiveDirModel(QObject* parent)
|
||||||
: QAbstractListModel(parent)
|
: QAbstractListModel(parent)
|
||||||
, d(new RecursiveDirModelPrivate)
|
, 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()
|
RecursiveDirModel::~RecursiveDirModel()
|
||||||
|
@ -116,30 +111,20 @@ RecursiveDirModel::~RecursiveDirModel()
|
||||||
|
|
||||||
KUrl RecursiveDirModel::url() const
|
KUrl RecursiveDirModel::url() const
|
||||||
{
|
{
|
||||||
return d->mUrl;
|
return d->mDirLister->url();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecursiveDirModel::setUrl(const KUrl& url)
|
void RecursiveDirModel::setUrl(const KUrl& url)
|
||||||
{
|
{
|
||||||
foreach (KDirLister* lister, d->mDirListers) {
|
d->mDirLister->openUrl(url, true);
|
||||||
lister->stop();
|
|
||||||
}
|
|
||||||
qDeleteAll(d->mDirListers);
|
|
||||||
d->mDirListers.clear();
|
|
||||||
beginResetModel();
|
|
||||||
d->clear();
|
|
||||||
endResetModel();
|
|
||||||
d->mUrl = url;
|
|
||||||
d->listDir(this, url);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int RecursiveDirModel::rowCount(const QModelIndex& parent) const
|
int RecursiveDirModel::rowCount(const QModelIndex& parent) const
|
||||||
{
|
{
|
||||||
if (parent.isValid()) {
|
if (parent.isValid()) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
|
||||||
return d->list().count();
|
|
||||||
}
|
}
|
||||||
|
return d->list().count();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const
|
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)
|
void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
|
||||||
{
|
{
|
||||||
QList<KUrl> dirUrls;
|
|
||||||
KFileItemList fileList;
|
KFileItemList fileList;
|
||||||
Q_FOREACH(const KFileItem& item, newList) {
|
Q_FOREACH(const KFileItem& item, newList) {
|
||||||
if (item.isFile()) {
|
if (item.isFile()) {
|
||||||
if (d->rowForUrl(item.url()) == -1) {
|
if (d->rowForUrl(item.url()) == -1) {
|
||||||
fileList << item;
|
fileList << item;
|
||||||
}
|
}
|
||||||
} else if (item.isReadable()) {
|
|
||||||
dirUrls << item.url();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,10 +169,6 @@ void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList)
|
||||||
}
|
}
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_FOREACH(const KUrl& url, dirUrls) {
|
|
||||||
d->listDir(this, url);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list)
|
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) {
|
beginResetModel();
|
||||||
if (!lister->isFinished()) {
|
d->clear();
|
||||||
return;
|
endResetModel();
|
||||||
}
|
|
||||||
}
|
|
||||||
emit completed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -58,7 +58,7 @@ Q_SIGNALS:
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void slotItemsAdded(const KFileItemList&);
|
void slotItemsAdded(const KFileItemList&);
|
||||||
void slotItemsDeleted(const KFileItemList&);
|
void slotItemsDeleted(const KFileItemList&);
|
||||||
void slotCompleted();
|
void slotClear();
|
||||||
private:
|
private:
|
||||||
RecursiveDirModelPrivate* const d;
|
RecursiveDirModelPrivate* const d;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue