┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views
diff options
context:
space:
mode:
Diffstat (limited to 'src/views')
-rw-r--r--src/views/dolphinview.cpp75
-rw-r--r--src/views/dolphinview.h42
2 files changed, 90 insertions, 27 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index 29f62f735..2dc21b335 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -49,6 +49,7 @@
#include <kurl.h>
#include "additionalinfoaccessor.h"
+#include "dolphindirlister.h"
#include "dolphinmodel.h"
#include "dolphincolumnviewcontainer.h"
#include "dolphinviewcontroller.h"
@@ -67,9 +68,7 @@
#include "zoomlevelinfo.h"
#include "dolphindetailsviewexpander.h"
-DolphinView::DolphinView(QWidget* parent,
- const KUrl& url,
- DolphinSortFilterProxyModel* proxyModel) :
+DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
QWidget(parent),
m_active(true),
m_showPreview(false),
@@ -83,7 +82,7 @@ DolphinView::DolphinView(QWidget* parent,
m_topLayout(0),
m_dolphinViewController(0),
m_viewModeController(0),
- m_viewAccessor(proxyModel),
+ m_viewAccessor(),
m_selectionChangedTimer(0),
m_activeItemUrl(),
m_restoredContentsPosition(),
@@ -277,6 +276,11 @@ bool DolphinView::supportsCategorizedSorting() const
return m_viewAccessor.supportsCategorizedSorting();
}
+KFileItem DolphinView::rootItem() const
+{
+ return m_viewAccessor.dirLister()->rootItem();
+}
+
KFileItemList DolphinView::items() const
{
return m_viewAccessor.dirLister()->items();
@@ -442,6 +446,11 @@ void DolphinView::setNameFilter(const QString& nameFilter)
m_viewModeController->setNameFilter(nameFilter);
}
+QString DolphinView::nameFilter() const
+{
+ return m_viewModeController->nameFilter();
+}
+
void DolphinView::calculateItemCount(int& fileCount,
int& folderCount,
KIO::filesize_t& totalFileSize) const
@@ -1326,15 +1335,21 @@ QItemSelection DolphinView::childrenMatchingPattern(const QModelIndex& parent, c
void DolphinView::connectViewAccessor()
{
KDirLister* dirLister = m_viewAccessor.dirLister();
- connect(dirLister, SIGNAL(redirection(KUrl,KUrl)),
- this, SLOT(slotRedirection(KUrl,KUrl)));
- connect(dirLister, SIGNAL(started(KUrl)),
- this, SLOT(slotDirListerStarted(KUrl)));
- connect(dirLister, SIGNAL(completed()),
- this, SLOT(slotDirListerCompleted()));
+ connect(dirLister, SIGNAL(redirection(KUrl,KUrl)), this, SLOT(slotRedirection(KUrl,KUrl)));
+ connect(dirLister, SIGNAL(started(KUrl)), this, SLOT(slotDirListerStarted(KUrl)));
+ connect(dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted()));
+ connect(dirLister, SIGNAL(canceled()), this, SLOT(slotDirListerCompleted()));
connect(dirLister, SIGNAL(refreshItems(const QList<QPair<KFileItem,KFileItem>>&)),
this, SLOT(slotRefreshItems()));
+ connect(dirLister, SIGNAL(clear()), this, SIGNAL(itemCountChanged()));
+ connect(dirLister, SIGNAL(newItems(KFileItemList)), this, SIGNAL(itemCountChanged()));
+ connect(dirLister, SIGNAL(infoMessage(const QString&)), this, SIGNAL(infoMessage(const QString&)));
+ connect(dirLister, SIGNAL(errorMessage(const QString&)), this, SIGNAL(infoMessage(const QString&)));
+ connect(dirLister, SIGNAL(percent(int)), this, SIGNAL(pathLoadingProgress(int)));
+ connect(dirLister, SIGNAL(urlIsFileError(const KUrl&)), this, SIGNAL(urlIsFileError(const KUrl&)));
+ connect(dirLister, SIGNAL(itemsDeleted(const KFileItemList&)), this, SIGNAL(itemCountChanged()));
+
QAbstractItemView* view = m_viewAccessor.itemView();
connect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
@@ -1343,15 +1358,21 @@ void DolphinView::connectViewAccessor()
void DolphinView::disconnectViewAccessor()
{
KDirLister* dirLister = m_viewAccessor.dirLister();
- disconnect(dirLister, SIGNAL(redirection(KUrl,KUrl)),
- this, SLOT(slotRedirection(KUrl,KUrl)));
- disconnect(dirLister, SIGNAL(started(KUrl)),
- this, SLOT(slotDirListerStarted(KUrl)));
- disconnect(dirLister, SIGNAL(completed()),
- this, SLOT(slotDirListerCompleted()));
+ disconnect(dirLister, SIGNAL(redirection(KUrl,KUrl)), this, SLOT(slotRedirection(KUrl,KUrl)));
+ disconnect(dirLister, SIGNAL(started(KUrl)), this, SLOT(slotDirListerStarted(KUrl)));
+ disconnect(dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted()));
+ disconnect(dirLister, SIGNAL(canceled()), this, SLOT(slotDirListerCompleted()));
disconnect(dirLister, SIGNAL(refreshItems(const QList<QPair<KFileItem,KFileItem>>&)),
this, SLOT(slotRefreshItems()));
+ disconnect(dirLister, SIGNAL(clear()), this, SIGNAL(itemCountChanged()));
+ disconnect(dirLister, SIGNAL(newItems(KFileItemList)), this, SIGNAL(itemCountChanged()));
+ disconnect(dirLister, SIGNAL(infoMessage(const QString&)), this, SIGNAL(infoMessage(const QString&)));
+ disconnect(dirLister, SIGNAL(errorMessage(const QString&)), this, SIGNAL(errorMessage(const QString&)));
+ disconnect(dirLister, SIGNAL(percent(int)), this, SIGNAL(pathLoadingProgress(int)));
+ disconnect(dirLister, SIGNAL(urlIsFileError(const KUrl&)), this, SIGNAL(urlIsFileError(const KUrl&)));
+ disconnect(dirLister, SIGNAL(itemsDeleted(const KFileItemList&)), this, SIGNAL(itemCountChanged()));
+
QAbstractItemView* view = m_viewAccessor.itemView();
disconnect(view->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
@@ -1372,18 +1393,36 @@ void DolphinView::updateWritableState()
}
}
-DolphinView::ViewAccessor::ViewAccessor(DolphinSortFilterProxyModel* proxyModel) :
+DolphinView::ViewAccessor::ViewAccessor() :
m_rootUrl(),
m_iconsView(0),
m_detailsView(0),
m_columnsContainer(0),
- m_proxyModel(proxyModel),
+ m_dolphinModel(0),
+ m_proxyModel(0),
m_dragSource(0)
{
+ DolphinDirLister* dirLister = new DolphinDirLister();
+ dirLister->setAutoUpdate(true);
+ dirLister->setDelayedMimeTypes(true);
+
+ m_dolphinModel = new DolphinModel();
+ m_dolphinModel->setDirLister(dirLister); // m_dolphinModel takes ownership of dirLister
+ m_dolphinModel->setDropsAllowed(DolphinModel::DropOnDirectory);
+
+ m_proxyModel = new DolphinSortFilterProxyModel();
+ m_proxyModel->setSourceModel(m_dolphinModel);
+ m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
}
DolphinView::ViewAccessor::~ViewAccessor()
{
+ delete m_proxyModel;
+ m_proxyModel = 0;
+
+ delete m_dolphinModel;
+ m_dolphinModel = 0;
+
delete m_dragSource;
m_dragSource = 0;
}
diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h
index 91909710f..04b821e71 100644
--- a/src/views/dolphinview.h
+++ b/src/views/dolphinview.h
@@ -119,15 +119,10 @@ public:
};
/**
- * @param parent Parent widget of the view.
* @param url Specifies the content which should be shown.
- * @param proxyModel Used proxy model which specifies the sorting. The
- * model is not owned by the view and won't get
- * deleted.
+ * @param parent Parent widget of the view.
*/
- DolphinView(QWidget* parent,
- const KUrl& url,
- DolphinSortFilterProxyModel* proxyModel);
+ DolphinView( const KUrl& url, QWidget* parent);
virtual ~DolphinView();
@@ -182,6 +177,13 @@ public:
bool supportsCategorizedSorting() const;
/**
+ * Returns the root item which represents the current URL. Note that the returned
+ * item can be null (KFileItem::isNull() will return true) in case that the directory
+ * has not been loaded.
+ */
+ KFileItem rootItem() const;
+
+ /**
* Returns the items of the view.
*/
KFileItemList items() const;
@@ -189,7 +191,6 @@ public:
/**
* Returns the selected items. The list is empty if no item has been
* selected.
- * @see DolphinView::selectedUrls()
*/
KFileItemList selectedItems() const;
@@ -274,6 +275,7 @@ public:
* which contain the given filter string will be shown.
*/
void setNameFilter(const QString& nameFilter);
+ QString nameFilter() const;
/**
* Calculates the number of currently shown files into
@@ -436,6 +438,11 @@ signals:
void itemTriggered(const KFileItem& item);
/**
+ * Is emitted if items have been added or deleted.
+ */
+ void itemCountChanged();
+
+ /**
* Is emitted if a new tab should be opened for the URL \a url.
*/
void tabRequested(const KUrl& url);
@@ -524,6 +531,18 @@ signals:
void finishedPathLoading(const KUrl& url);
/**
+ * Is emitted after DolphinView::setUrl() has been invoked and provides
+ * the information how much percent of the current path have been loaded.
+ */
+ void pathLoadingProgress(int percent);
+
+ /**
+ * Is emitted if the DolphinView::setUrl() is invoked but the URL is not
+ * a directory.
+ */
+ void urlIsFileError(const KUrl& file);
+
+ /**
* Emitted when KDirLister emits redirection.
* Testcase: fish://localhost
*/
@@ -756,7 +775,7 @@ private:
class ViewAccessor
{
public:
- ViewAccessor(DolphinSortFilterProxyModel* proxyModel);
+ ViewAccessor();
~ViewAccessor();
void createView(QWidget* parent,
@@ -805,9 +824,13 @@ private:
DolphinIconsView* m_iconsView;
DolphinDetailsView* m_detailsView;
DolphinColumnViewContainer* m_columnsContainer;
+ DolphinModel* m_dolphinModel;
DolphinSortFilterProxyModel* m_proxyModel;
QAbstractItemView* m_dragSource;
QPointer<DolphinDetailsViewExpander> m_detailsViewExpander;
+
+ // For unit tests
+ friend class DolphinDetailsViewTest;
};
bool m_active : 1;
@@ -843,6 +866,7 @@ private:
// For unit tests
friend class TestBase;
+ friend class DolphinDetailsViewTest;
};
/// Allow using DolphinView::Mode in QVariant