From: Peter Penz Date: Mon, 15 Jan 2007 06:43:17 +0000 (+0000) Subject: Use a QTreeView for the representation of the details view (previously a QListView... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/a58ce6d0b7494982a7dbc37a8a3e3ef849af323e Use a QTreeView for the representation of the details view (previously a QListView has been used). svn path=/trunk/playground/utils/dolphin/; revision=623643 --- 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 +#include 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 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; };