┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2007-01-15 06:43:17 +0000
committerPeter Penz <[email protected]>2007-01-15 06:43:17 +0000
commita58ce6d0b7494982a7dbc37a8a3e3ef849af323e (patch)
treef25ac168b63649612424f594796c48311519c8a7
parentde4ffa3322c8d919ebdb0cdb51115bace8aa8d11 (diff)
Use a QTreeView for the representation of the details view (previously a QListView has been used).
svn path=/trunk/playground/utils/dolphin/; revision=623643
-rw-r--r--src/dolphindetailsview.cpp2
-rw-r--r--src/dolphindetailsview.h6
-rw-r--r--src/dolphinview.cpp97
-rw-r--r--src/dolphinview.h18
4 files changed, 82 insertions, 41 deletions
diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp
index 987b5a984..37d2fa70e 100644
--- a/src/dolphindetailsview.cpp
+++ b/src/dolphindetailsview.cpp
@@ -22,7 +22,7 @@
#include "dolphinview.h"
DolphinDetailsView::DolphinDetailsView(DolphinView* parent) :
- QListView(parent)
+ QTreeView(parent)
{
}
diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h
index cb233b9fd..16a0811fc 100644
--- a/src/dolphindetailsview.h
+++ b/src/dolphindetailsview.h
@@ -21,7 +21,7 @@
#ifndef DOLPHINDETAILSVIEW_H
#define DOLPHINDETAILSVIEW_H
-#include <QListView>
+#include <QTreeView>
class DolphinView;
@@ -32,10 +32,8 @@ class DolphinView;
* The width of the columns are automatically adjusted in a way
* that full available width of the view is used by stretching the width
* of the name column.
- *
- * @author Peter Penz
*/
-class DolphinDetailsView : public QListView
+class DolphinDetailsView : public QTreeView
{
Q_OBJECT
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp
index c0c18f90e..69ba35d50 100644
--- a/src/dolphinview.cpp
+++ b/src/dolphinview.cpp
@@ -65,11 +65,13 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow,
m_topLayout(0),
m_urlNavigator(0),
m_iconsView(0),
+ m_detailsView(0),
m_filterBar(0),
m_statusBar(0),
m_dirModel(0),
m_dirLister(0),
- m_proxyModel(0)
+ m_proxyModel(0),
+ m_mimeTypeResolver(0)
{
hide();
setFocusPolicy(Qt::StrongFocus);
@@ -87,6 +89,8 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow,
m_dirLister->setAutoUpdate(true);
m_dirLister->setMainWindow(this);
m_dirLister->setShowingDotFiles(showHiddenFiles);
+ m_dirLister->setDelayedMimeTypes(true);
+
connect(m_dirLister, SIGNAL(clear()),
this, SLOT(slotClear()));
connect(m_dirLister, SIGNAL(percent(int)),
@@ -100,9 +104,6 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow,
connect(m_dirLister, SIGNAL(errorMessage(const QString&)),
this, SLOT(slotErrorMessage(const QString&)));
- m_iconsView = new DolphinIconsView(this);
- applyModeToView();
-
m_dirModel = new KDirModel();
m_dirModel->setDirLister(m_dirLister);
m_dirModel->setDropsAllowed(KDirModel::DropOnDirectory);
@@ -110,14 +111,7 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow,
m_proxyModel = new DolphinSortFilterProxyModel(this);
m_proxyModel->setSourceModel(m_dirModel);
- m_iconsView->setModel(m_proxyModel);
-
- KFileItemDelegate* delegate = new KFileItemDelegate(this);
- delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType);
- m_iconsView->setItemDelegate(delegate);
-
- m_dirLister->setDelayedMimeTypes(true);
- new KMimeTypeResolver(m_iconsView, m_dirModel);
+ createView();
m_iconSize = K3Icon::SizeMedium;
@@ -129,15 +123,10 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow,
this, SLOT(closeFilterBar()));
m_topLayout->addWidget(m_urlNavigator);
- m_topLayout->addWidget(m_iconsView);
+ m_topLayout->addWidget(itemView());
m_topLayout->addWidget(m_filterBar);
m_topLayout->addWidget(m_statusBar);
- connect(m_iconsView, SIGNAL(clicked(const QModelIndex&)),
- this, SLOT(triggerItem(const QModelIndex&)));
- connect(m_iconsView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
- this, SLOT(emitSelectionChangedSignal()));
-
loadDirectory(m_urlNavigator->url());
}
@@ -178,7 +167,7 @@ void DolphinView::setMode(Mode mode)
ViewProperties props(m_urlNavigator->url());
props.setViewMode(m_mode);
- applyModeToView();
+ createView();
startDirLister(m_urlNavigator->url());
emit modeChanged();
@@ -476,16 +465,18 @@ const Q3ValueList<UrlNavigator::HistoryElem> DolphinView::urlHistory(int& index)
bool DolphinView::hasSelection() const
{
- return m_iconsView->selectionModel()->hasSelection();
+ return itemView()->selectionModel()->hasSelection();
}
KFileItemList DolphinView::selectedItems() const
{
+ const QAbstractItemView* view = itemView();
+
// Our view has a selection, we will map them back to the DirModel
// and then fill the KFileItemList.
- assert(m_iconsView && m_iconsView->selectionModel());
+ assert((view != 0) && (view->selectionModel() != 0));
- const QItemSelection selection = m_proxyModel->mapSelectionToSource(m_iconsView->selectionModel()->selection());
+ const QItemSelection selection = m_proxyModel->mapSelectionToSource(view->selectionModel()->selection());
KFileItemList itemList;
const QModelIndexList indexList = selection.indexes();
@@ -634,7 +625,7 @@ void DolphinView::loadDirectory(const KUrl& url)
const Mode mode = props.viewMode();
if (m_mode != mode) {
m_mode = mode;
- applyModeToView();
+ createView();
emit modeChanged();
}
@@ -981,26 +972,57 @@ void DolphinView::slotChangeNameFilter(const QString& nameFilter)
#endif
}
-void DolphinView::applyModeToView()
+void DolphinView::createView()
{
- m_iconsView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ // delete current view
+ QAbstractItemView* view = itemView();
+ if (view != 0) {
+ m_topLayout->remove(view);
+ view->close();
+ view->deleteLater();
+ m_iconsView = 0;
+ m_detailsView = 0;
+ }
+
+ assert(m_iconsView == 0);
+ assert(m_detailsView == 0);
+
+ delete m_mimeTypeResolver;
+ m_mimeTypeResolver = 0;
- // TODO: the following code just tries to test some QListView capabilities
+ // ... and recreate it representing the current mode
switch (m_mode) {
case IconsView:
+ m_iconsView = new DolphinIconsView(this);
m_iconsView->setViewMode(QListView::IconMode);
m_iconsView->setSpacing(32);
- // m_iconsView->setAlternatingRowColors(false);
- // m_iconsView->setGridSize(QSize(128, 64));
+ view = m_iconsView;
+ // TODO: read out view settings
break;
case DetailsView:
- m_iconsView->setViewMode(QListView::ListMode);
- m_iconsView->setSpacing(0);
- // m_iconsView->setAlternatingRowColors(true);
- // m_iconsView->setGridSize(QSize(256, 24));
+ m_detailsView = new DolphinDetailsView(this);
+ view = m_detailsView;
+ // TODO: read out view settings
break;
}
+
+ view->setModel(m_proxyModel);
+
+ view->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+ KFileItemDelegate* delegate = new KFileItemDelegate(this);
+ delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType);
+ view->setItemDelegate(delegate);
+
+ m_mimeTypeResolver = new KMimeTypeResolver(view, m_dirModel);
+
+ connect(view, SIGNAL(clicked(const QModelIndex&)),
+ this, SLOT(triggerItem(const QModelIndex&)));
+ connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
+ this, SLOT(emitSelectionChangedSignal()));
+
+ m_topLayout->insertWidget(1, view);
}
int DolphinView::columnIndex(Sorting sorting) const
@@ -1017,7 +1039,7 @@ int DolphinView::columnIndex(Sorting sorting) const
void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags)
{
- QItemSelectionModel* selectionModel = m_iconsView->selectionModel();
+ QItemSelectionModel* selectionModel = itemView()->selectionModel();
const QAbstractItemModel* itemModel = selectionModel->model();
const QModelIndex topLeft = itemModel->index(0, 0);
@@ -1028,4 +1050,13 @@ void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags)
selectionModel->select(selection, flags);
}
+QAbstractItemView* DolphinView::itemView() const
+{
+ assert((m_iconsView == 0) || (m_detailsView == 0));
+ if (m_detailsView != 0) {
+ return m_detailsView;
+ }
+ return m_iconsView;
+}
+
#include "dolphinview.moc"
diff --git a/src/dolphinview.h b/src/dolphinview.h
index cd3df38b3..c28a47e6e 100644
--- a/src/dolphinview.h
+++ b/src/dolphinview.h
@@ -46,6 +46,7 @@ class Q3IconViewItem;
class Q3ListViewItem;
class Q3VBoxLayout;
class DolphinMainWindow;
+class DolphinDetailsView;
class DolphinDirLister;
class DolphinStatusBar;
class DolphinIconsView;
@@ -54,6 +55,7 @@ class DolphinSortFilterProxyModel;
class ViewProperties;
class KProgress;
class KDirModel;
+class KMimeTypeResolver;
class FilterBar;
class QModelIndex;
@@ -456,10 +458,10 @@ private:
QString renameIndexPresentation(int index, int itemCount) const;
/**
- * Applies the current view mode m_mode to the
- * view implementation.
+ * Creates a new view representing the given view mode (DolphinView::viewMode()).
+ * The current view will get deleted.
*/
- void applyModeToView();
+ void createView();
/**
* Returns the column index used in the KDirModel depending on \a sorting.
@@ -472,6 +474,12 @@ private:
*/
void selectAll(QItemSelectionModel::SelectionFlags flags);
+ /**
+ * Returns a pointer to the currently used item view, which is either
+ * a ListView or a TreeView.
+ */
+ QAbstractItemView* itemView() const;
+
private:
bool m_refreshing;
bool m_showProgress;
@@ -484,13 +492,17 @@ private:
DolphinMainWindow* m_mainWindow;
QVBoxLayout* m_topLayout;
UrlNavigator* m_urlNavigator;
+
DolphinIconsView* m_iconsView;
+ DolphinDetailsView* m_detailsView;
+
FilterBar *m_filterBar;
DolphinStatusBar* m_statusBar;
KDirModel* m_dirModel;
DolphinDirLister* m_dirLister;
DolphinSortFilterProxyModel* m_proxyModel;
+ KMimeTypeResolver* m_mimeTypeResolver;
};