X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c05395ef9a6f449bd96b4323d308b53d70cede99..136e2ae3d75677ec008e7b5973b8e73bc38e9530:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 42305be1f..6db79452c 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -20,6 +20,7 @@ #include "dolphinview.h" +#include #include #include #include @@ -90,7 +91,6 @@ DolphinView::DolphinView(QWidget* parent, m_mode(DolphinView::IconsView), m_topLayout(0), m_controller(0), - m_fileItemDelegate(0), m_viewAccessor(proxyModel), m_selectionModel(0), m_selectionChangedTimer(0), @@ -230,7 +230,7 @@ void DolphinView::setMode(Mode mode) // the file item delegate has been recreated, apply the current // additional information manually const KFileItemDelegate::InformationList infoList = props.additionalInfo(); - m_fileItemDelegate->setShowInformation(infoList); + m_viewAccessor.itemDelegate()->setShowInformation(infoList); emit additionalInfoChanged(); // Not all view modes support categorized sorting. Adjust the sorting model @@ -434,7 +434,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) const KUrl viewPropsUrl = rootUrl(); ViewProperties props(viewPropsUrl); props.setAdditionalInfo(info); - m_fileItemDelegate->setShowInformation(info); + m_viewAccessor.itemDelegate()->setShowInformation(info); emit additionalInfoChanged(); @@ -445,7 +445,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) KFileItemDelegate::InformationList DolphinView::additionalInfo() const { - return m_fileItemDelegate->showInformation(); + return m_viewAccessor.itemDelegate()->showInformation(); } void DolphinView::reload() @@ -479,9 +479,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) } m_controller->setUrl(url); // emits urlChanged, which we forward - if (m_viewAccessor.prepareUrlChange(url)) { - initializeView(); - } + m_viewAccessor.prepareUrlChange(url); applyViewProperties(); loadDirectory(url); @@ -755,8 +753,6 @@ void DolphinView::setShowPreview(bool show) // As the view does not emit a signal when the icon size has been changed, // the used zoom level of the controller must be adjusted manually: updateZoomLevel(oldZoomLevel); - - loadDirectory(viewPropsUrl); } void DolphinView::setShowHiddenFiles(bool show) @@ -771,8 +767,6 @@ void DolphinView::setShowHiddenFiles(bool show) m_viewAccessor.dirLister()->setShowingDotFiles(show); emit showHiddenFilesChanged(); - - loadDirectory(viewPropsUrl); } void DolphinView::setCategorizedSorting(bool categorized) @@ -987,7 +981,7 @@ void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& props.setAdditionalInfo(info); props.save(); - m_fileItemDelegate->setShowInformation(info); + m_viewAccessor.itemDelegate()->setShowInformation(info); emit additionalInfoChanged(); } @@ -1018,7 +1012,7 @@ void DolphinView::updateAdditionalInfoActions(KActionCollection* collection) showGroupInfo->setEnabled(enable); showMimeInfo->setEnabled(enable); - foreach (KFileItemDelegate::Information info, m_fileItemDelegate->showInformation()) { + foreach (KFileItemDelegate::Information info, m_viewAccessor.itemDelegate()->showInformation()) { switch (info) { case KFileItemDelegate::Size: showSizeInfo->setChecked(true); @@ -1239,7 +1233,7 @@ void DolphinView::applyViewProperties() createView(); } Q_ASSERT(m_viewAccessor.itemView() != 0); - Q_ASSERT(m_fileItemDelegate != 0); + Q_ASSERT(m_viewAccessor.itemDelegate() != 0); const bool showHiddenFiles = props.showHiddenFiles(); if (showHiddenFiles != m_viewAccessor.dirLister()->showingDotFiles()) { @@ -1273,8 +1267,8 @@ void DolphinView::applyViewProperties() } KFileItemDelegate::InformationList info = props.additionalInfo(); - if (info != m_fileItemDelegate->showInformation()) { - m_fileItemDelegate->setShowInformation(info); + if (info != m_viewAccessor.itemDelegate()->showInformation()) { + m_viewAccessor.itemDelegate()->setShowInformation(info); emit additionalInfoChanged(); } @@ -1303,46 +1297,16 @@ void DolphinView::createView() deleteView(); Q_ASSERT(m_viewAccessor.itemView() == 0); m_viewAccessor.createView(this, m_controller, m_mode); - initializeView(); - m_topLayout->insertWidget(1, m_viewAccessor.layoutTarget()); -} -void DolphinView::deleteView() -{ - QAbstractItemView* view = m_viewAccessor.itemView(); - if (view != 0) { - // It's important to set the keyboard focus to the parent - // before deleting the view: Otherwise when having a split - // view the other view will get the focus and will request - // an activation (see DolphinView::eventFilter()). - setFocusProxy(0); - setFocus(); - - m_topLayout->removeWidget(view); - view->close(); - - disconnect(view); - m_controller->disconnect(view); - view->disconnect(); - - // TODO: move this code into ViewAccessor::deleteView() - deleteWhenNotDragSource(view); - view = 0; - - m_viewAccessor.deleteView(); - m_fileItemDelegate = 0; - } -} - -void DolphinView::initializeView() -{ QAbstractItemView* view = m_viewAccessor.itemView(); Q_ASSERT(view != 0); view->installEventFilter(this); view->viewport()->installEventFilter(this); - setFocusProxy(view); - //if (m_mode != ColumnView) { + + /* TODO: enable folder expanding again later + + if (m_mode != ColumnView) { // Give the view the ability to auto-expand its directories on hovering // (the column view takes care about this itself). If the details view // uses expandable folders, the auto-expanding should be used always. @@ -1351,8 +1315,7 @@ void DolphinView::initializeView() connect(folderExpander, SIGNAL(enterDir(const QModelIndex&)), m_controller, SLOT(triggerItem(const QModelIndex&))); - // TODO: enable again later - /*} + } else { // Listen out for requests to delete the current column. connect(m_viewAccessor.columnsContainer(), SIGNAL(requestColumnDeletion(QAbstractItemView*)), @@ -1361,26 +1324,20 @@ void DolphinView::initializeView() m_controller->setItemView(view); - m_fileItemDelegate = new DolphinFileItemDelegate(view); - m_fileItemDelegate->setShowToolTipWhenElided(false); - m_fileItemDelegate->setMinimizedNameColumn(m_mode == DetailsView); - view->setItemDelegate(m_fileItemDelegate); - - view->setModel(m_viewAccessor.proxyModel()); - if (m_selectionModel != 0) { - view->setSelectionModel(m_selectionModel); - } else { - m_selectionModel = view->selectionModel(); - } - m_selectionChangedTimer = new QTimer(this); m_selectionChangedTimer->setSingleShot(true); m_selectionChangedTimer->setInterval(300); connect(m_selectionChangedTimer, SIGNAL(timeout()), this, SLOT(emitSelectionChangedSignal())); - // reparent the selection model, as it should not be deleted - // when deleting the model + // When changing the view mode, the selection is lost due to reinstantiating + // a new item view with a custom selection model. Pass the ownership of the + // selection model to DolphinView, so that it can be shared by all item views. + if (m_selectionModel != 0) { + view->setSelectionModel(m_selectionModel); + } else { + m_selectionModel = view->selectionModel(); + } m_selectionModel->setParent(this); view->setSelectionMode(QAbstractItemView::ExtendedSelection); @@ -1399,6 +1356,35 @@ void DolphinView::initializeView() this, SLOT(emitContentsMoved())); connect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(emitContentsMoved())); + + setFocusProxy(m_viewAccessor.layoutTarget()); + m_topLayout->insertWidget(1, m_viewAccessor.layoutTarget()); +} + +void DolphinView::deleteView() +{ + QAbstractItemView* view = m_viewAccessor.itemView(); + if (view != 0) { + // It's important to set the keyboard focus to the parent + // before deleting the view: Otherwise when having a split + // view the other view will get the focus and will request + // an activation (see DolphinView::eventFilter()). + setFocusProxy(0); + setFocus(); + + m_topLayout->removeWidget(view); + view->close(); + + disconnect(view); + m_controller->disconnect(view); + view->disconnect(); + + // TODO: move this code into ViewAccessor::deleteView() + deleteWhenNotDragSource(view); + view = 0; + + m_viewAccessor.deleteView(); + } } void DolphinView::pasteToUrl(const KUrl& url) @@ -1486,12 +1472,11 @@ void DolphinView::ViewAccessor::deleteView() } -bool DolphinView::ViewAccessor::prepareUrlChange(const KUrl& url) +void DolphinView::ViewAccessor::prepareUrlChange(const KUrl& url) { if (m_columnsContainer != 0) { - return m_columnsContainer->showColumn(url); + m_columnsContainer->showColumn(url); } - return false; } QAbstractItemView* DolphinView::ViewAccessor::itemView() const @@ -1511,6 +1496,11 @@ QAbstractItemView* DolphinView::ViewAccessor::itemView() const return 0; } +KFileItemDelegate* DolphinView::ViewAccessor::itemDelegate() const +{ + return static_cast(itemView()->itemDelegate()); +} + QWidget* DolphinView::ViewAccessor::layoutTarget() const { if (m_columnsContainer != 0) {