From e80f07735774cfd8e4debef48cbef7869506e585 Mon Sep 17 00:00:00 2001 From: John Tapsell Date: Mon, 3 Dec 2007 10:32:27 +0000 Subject: [PATCH] The first columns model and selection model should be the same as the view's model and selection model. This means 1) We don't leak memory switching to and from column view 2) Selection is preserved when switching views 3) We don't have 2 models running for the root directory CCMAIL:peter.penz@gmx.at svn path=/trunk/KDE/kdebase/apps/; revision=744386 --- src/dolphincolumnview.cpp | 15 +++++++++++++++ src/dolphincolumnview.h | 2 ++ src/dolphincolumnwidget.cpp | 18 ++++++++---------- src/dolphincolumnwidget.h | 1 + 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index a6fda66d0e..d6bd08a422 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -554,4 +554,19 @@ void DolphinColumnView::removeAllColumns() assureVisibleActiveColumn(); } +void DolphinColumnView::setModel ( QAbstractItemModel * model ) +{ + QAbstractItemView::setModel(model); + if(m_columns[0]) { + m_columns[0]->setModel(model); + m_columns[0]->setSelectionModel(selectionModel()); + } +} +void DolphinColumnView::setSelectionModel ( QItemSelectionModel * selectionModel ) +{ + if(m_columns[0]) + m_columns[0]->setSelectionModel(selectionModel); + QAbstractItemView::setSelectionModel(selectionModel); +} + #include "dolphincolumnview.moc" diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h index 30ac7ae710..0030c69ce0 100644 --- a/src/dolphincolumnview.h +++ b/src/dolphincolumnview.h @@ -103,6 +103,8 @@ protected: virtual void mousePressEvent(QMouseEvent* event); virtual void resizeEvent(QResizeEvent* event); + virtual void setSelectionModel ( QItemSelectionModel * selectionModel ); + virtual void setModel ( QAbstractItemModel * model ); private slots: void zoomIn(); diff --git a/src/dolphincolumnwidget.cpp b/src/dolphincolumnwidget.cpp index 677215972d..abd236c7dd 100644 --- a/src/dolphincolumnwidget.cpp +++ b/src/dolphincolumnwidget.cpp @@ -115,18 +115,16 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent, m_dirLister->setShowingDotFiles(showHiddenFiles); connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), this, SLOT(generatePreviews(const KFileItemList&))); +} - m_dolphinModel = new DolphinModel(this); - m_dolphinModel->setDirLister(m_dirLister); - m_dolphinModel->setDropsAllowed(DolphinModel::DropOnDirectory); - - m_proxyModel = new DolphinSortFilterProxyModel(this); - m_proxyModel->setSourceModel(m_dolphinModel); - - setModel(m_proxyModel); +void DolphinColumnWidget::setModel ( QAbstractItemModel * model ) +{ + m_proxyModel = dynamic_cast(model); + if(m_proxyModel) + m_dolphinModel = dynamic_cast(m_proxyModel->sourceModel()); new KMimeTypeResolver(this, m_dolphinModel); - - m_dirLister->openUrl(url, KDirLister::NoFlags); + m_dirLister->openUrl(m_url, KDirLister::NoFlags); + QListView::setModel(m_proxyModel); } DolphinColumnWidget::~DolphinColumnWidget() diff --git a/src/dolphincolumnwidget.h b/src/dolphincolumnwidget.h index e8fea3bf59..14b4c87517 100644 --- a/src/dolphincolumnwidget.h +++ b/src/dolphincolumnwidget.h @@ -89,6 +89,7 @@ public: * which contain the given filter string will be shown. */ void setNameFilter(const QString& nameFilter); + virtual void setModel ( QAbstractItemModel * model ); protected: virtual QStyleOptionViewItem viewOptions() const;