X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/dbc8874c00c35aaefacdd03f8aef9e4ac4e2be01..29402a79bc09945ccd96201cbb42027b4c581a00:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 9379a49cb..ad760fb13 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -60,7 +60,6 @@ DolphinView::DolphinView(QWidget* parent, QWidget(parent), m_active(true), m_loadingDirectory(false), - m_initializeColumnView(false), m_storedCategorizedSorting(false), m_mode(DolphinView::IconsView), m_topLayout(0), @@ -84,8 +83,8 @@ DolphinView::DolphinView(QWidget* parent, connect(m_dirLister, SIGNAL(completed()), this, SLOT(updateCutItems())); - connect(m_dirLister, SIGNAL(newItems(const QList&)), - this, SLOT(generatePreviews(const QList&))); + connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), + this, SLOT(generatePreviews(const KFileItemList&))); m_controller = new DolphinController(this); m_controller->setUrl(url); @@ -103,8 +102,8 @@ DolphinView::DolphinView(QWidget* parent, this, SLOT(triggerItem(const QModelIndex&))); connect(m_controller, SIGNAL(activated()), this, SLOT(activate())); - connect(m_controller, SIGNAL(itemEntered(const QModelIndex&)), - this, SLOT(showHoverInformation(const QModelIndex&))); + connect(m_controller, SIGNAL(itemEntered(const KFileItem&)), + this, SLOT(showHoverInformation(const KFileItem&))); connect(m_controller, SIGNAL(viewportEntered()), this, SLOT(clearHoverInformation())); @@ -181,7 +180,7 @@ void DolphinView::setMode(Mode mode) emit categorizedSortingChanged(); } - startDirLister(viewPropsUrl); + loadDirectory(viewPropsUrl); emit modeChanged(); } @@ -200,7 +199,7 @@ void DolphinView::setShowPreview(bool show) m_controller->setShowPreview(show); emit showPreviewChanged(); - startDirLister(viewPropsUrl, true); + loadDirectory(viewPropsUrl, true); } bool DolphinView::showPreview() const @@ -219,9 +218,10 @@ void DolphinView::setShowHiddenFiles(bool show) props.setShowHiddenFiles(show); m_dirLister->setShowingDotFiles(show); + m_controller->setShowHiddenFiles(show); emit showHiddenFilesChanged(); - startDirLister(viewPropsUrl, true); + loadDirectory(viewPropsUrl, true); } bool DolphinView::showHiddenFiles() const @@ -278,8 +278,8 @@ void DolphinView::invertSelection() // QAbstractItemView does not offer a virtual method invertSelection() // as counterpart to QAbstractItemView::selectAll(). This makes it // necessary to delegate the inverting of the selection to the - // column view, as only the selection of the active column should get - // inverted. + // column view, as only the selection of the active column should + // get inverted. m_columnView->invertSelection(); } else { QItemSelectionModel* selectionModel = itemView()->selectionModel(); @@ -304,7 +304,7 @@ void DolphinView::clearSelection() itemView()->selectionModel()->clear(); } -QList DolphinView::selectedItems() const +KFileItemList DolphinView::selectedItems() const { const QAbstractItemView* view = itemView(); @@ -313,7 +313,7 @@ QList DolphinView::selectedItems() const Q_ASSERT((view != 0) && (view->selectionModel() != 0)); const QItemSelection selection = m_proxyModel->mapSelectionToSource(view->selectionModel()->selection()); - QList itemList; + KFileItemList itemList; const QModelIndexList indexList = selection.indexes(); foreach (QModelIndex index, indexList) { @@ -329,10 +329,9 @@ QList DolphinView::selectedItems() const KUrl::List DolphinView::selectedUrls() const { KUrl::List urls; - const QList list = selectedItems(); - for ( QList::const_iterator it = list.begin(), end = list.end(); - it != end; ++it ) { - urls.append((*it).url()); + const KFileItemList list = selectedItems(); + foreach (KFileItem item, list) { + urls.append(item.url()); } return urls; } @@ -413,20 +412,11 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) ViewProperties props(viewPropsUrl); props.setAdditionalInfo(info); - m_controller->setShowAdditionalInfo(!info.isEmpty()); + m_controller->setAdditionalInfoCount(info.count()); m_fileItemDelegate->setShowInformation(info); emit additionalInfoChanged(info); - startDirLister(viewPropsUrl, true); -} - -void DolphinView::setAdditionalInfo(KFileItemDelegate::Information info) -{ - KFileItemDelegate::InformationList list; - if (info != KFileItemDelegate::NoInformation) - list << info; - - setAdditionalInfo(list); + loadDirectory(viewPropsUrl, true); } KFileItemDelegate::InformationList DolphinView::additionalInfo() const @@ -437,7 +427,7 @@ KFileItemDelegate::InformationList DolphinView::additionalInfo() const void DolphinView::reload() { setUrl(url()); - startDirLister(url(), true); + loadDirectory(url(), true); } void DolphinView::refresh() @@ -462,12 +452,16 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) if (restoreColumnView) { applyViewProperties(rootUrl); - Q_ASSERT(itemView() == m_columnView); - startDirLister(rootUrl); - m_columnView->showColumn(url); + loadDirectory(rootUrl); + // Restoring the column view relies on the URL-history. It might be possible + // that the view properties have been changed or deleted in the meantime, so + // it cannot be asserted that really a column view has been created: + if (itemView() == m_columnView) { + m_columnView->showColumn(url); + } } else { applyViewProperties(url); - startDirLister(url); + loadDirectory(url); } itemView()->setFocus(); @@ -510,7 +504,7 @@ void DolphinView::triggerItem(const QModelIndex& index) emit itemTriggered(item); // caught by DolphinViewContainer or DolphinPart } -void DolphinView::generatePreviews(const QList& items) +void DolphinView::generatePreviews(const KFileItemList& items) { if (m_controller->showPreview()) { KIO::PreviewJob* job = KIO::filePreview(items, 128); @@ -546,7 +540,7 @@ void DolphinView::emitSelectionChangedSignal() emit selectionChanged(DolphinView::selectedItems()); } -void DolphinView::startDirLister(const KUrl& url, bool reload) +void DolphinView::loadDirectory(const KUrl& url, bool reload) { if (!url.isValid()) { const QString location(url.pathOrUrl()); @@ -562,32 +556,12 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_loadingDirectory = true; m_dirLister->stop(); + m_dirLister->openUrl(url, reload ? KDirLister::Reload : KDirLister::NoFlags); - bool keepOldDirs = isColumnViewActive() && !m_initializeColumnView; - m_initializeColumnView = false; - - if (keepOldDirs) { - // keeping old directories is only necessary for hierarchical views - // like the column view - if (reload) { - // for the column view it is not enough to reload the directory lister, - // so this task is delegated to the column view directly - m_columnView->reload(); - } else if (m_dirLister->directories().contains(url)) { - // The dir lister contains the directory already, so - // KDirLister::openUrl() may not get invoked twice. - m_dirLister->updateDirectory(url); - } else { - const KUrl& dirListerUrl = m_dirLister->url(); - if ((dirListerUrl == url) || !m_dirLister->url().isParentOf(url)) { - // The current URL is not a child of the dir lister - // URL. This may happen when e. g. a place has been selected - // and hence the view must be reset. - m_dirLister->openUrl(url, false, false); - } - } - } else { - m_dirLister->openUrl(url, false, reload); + if (isColumnViewActive() && reload) { + // reloading the directory lister is not enough in the case of the + // column view, as each column has its own directory lister internally... + m_columnView->reload(); } } @@ -616,14 +590,6 @@ void DolphinView::applyViewProperties(const KUrl& url) m_mode = mode; createView(); emit modeChanged(); - - if (m_mode == ColumnView) { - // The mode has been changed to the Column View. When starting the dir - // lister with DolphinView::startDirLister() it is important to give a - // hint that the dir lister may not keep the current directory - // although this is the default for showing a hierarchy. - m_initializeColumnView = true; - } } if (itemView() == 0) { createView(); @@ -634,6 +600,7 @@ void DolphinView::applyViewProperties(const KUrl& url) const bool showHiddenFiles = props.showHiddenFiles(); if (showHiddenFiles != m_dirLister->showingDotFiles()) { m_dirLister->setShowingDotFiles(showHiddenFiles); + m_controller->setShowHiddenFiles(showHiddenFiles); emit showHiddenFilesChanged(); } @@ -659,7 +626,7 @@ void DolphinView::applyViewProperties(const KUrl& url) KFileItemDelegate::InformationList info = props.additionalInfo(); if (info != m_fileItemDelegate->showInformation()) { - m_controller->setShowAdditionalInfo(!info.isEmpty()); + m_controller->setAdditionalInfoCount(info.count()); m_fileItemDelegate->setShowInformation(info); emit additionalInfoChanged(info); } @@ -671,7 +638,7 @@ void DolphinView::applyViewProperties(const KUrl& url) } } -void DolphinView::changeSelection(const QList& selection) +void DolphinView::changeSelection(const KFileItemList& selection) { clearSelection(); if (selection.isEmpty()) { @@ -788,16 +755,13 @@ void DolphinView::updateCutItems() applyCutItemEffect(); } -void DolphinView::showHoverInformation(const QModelIndex& index) +void DolphinView::showHoverInformation(const KFileItem& item) { if (hasSelection()) { return; } - const KFileItem item = fileItem(index); - if (!item.isNull()) { - emit requestItemInfo(item); - } + emit requestItemInfo(item); } void DolphinView::clearHoverInformation() @@ -808,6 +772,11 @@ void DolphinView::clearHoverInformation() void DolphinView::createView() { + KFileItemDelegate::InformationList infoList; + if (m_fileItemDelegate != 0) { + infoList = m_fileItemDelegate->showInformation(); + } + // delete current view QAbstractItemView* view = itemView(); if (view != 0) { @@ -847,6 +816,7 @@ void DolphinView::createView() Q_ASSERT(view != 0); m_fileItemDelegate = new KFileItemDelegate(view); + m_fileItemDelegate->setShowInformation(infoList); view->setItemDelegate(m_fileItemDelegate); view->setModel(m_proxyModel);