X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c8072005fada01d772595ec64adca449134f421e..ad74c99bbc4b4907a0cec0b7c5e3b9b37e5bad5b:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index c30b2d0bc..f3a836b73 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -62,8 +62,6 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, const KUrl& url) : QWidget(parent), m_showProgress(false), - m_folderCount(0), - m_fileCount(0), m_mainWindow(mainWindow), m_topLayout(0), m_urlNavigator(0), @@ -94,11 +92,10 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, m_dirLister->setMainWindow(this); m_dirLister->setDelayedMimeTypes(true); - m_dolphinModel = new DolphinModel(); + 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); @@ -106,10 +103,10 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(updateStatusBar())); connect(m_dirLister, SIGNAL(percent(int)), this, SLOT(updateProgress(int))); - connect(m_dirLister, SIGNAL(deleteItem(KFileItem*)), + connect(m_dirLister, SIGNAL(deleteItem(const KFileItem&)), this, SLOT(updateStatusBar())); connect(m_dirLister, SIGNAL(completed()), - this, SLOT(updateItemCount())); + this, SLOT(slotDirListerCompleted())); connect(m_dirLister, SIGNAL(infoMessage(const QString&)), this, SLOT(showInfoMessage(const QString&))); connect(m_dirLister, SIGNAL(errorMessage(const QString&)), @@ -136,9 +133,11 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(showInfoMessage(const QString&))); connect(m_view, SIGNAL(itemTriggered(KFileItem)), this, SLOT(slotItemTriggered(KFileItem))); + connect(m_view, SIGNAL(startedPathLoading(const KUrl&)), + this, SLOT(saveRootUrl(const KUrl&))); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), - m_view, SLOT(setUrl(const KUrl&))); + this, SLOT(restoreView(const KUrl&))); m_statusBar = new DolphinStatusBar(this, url); connect(m_view, SIGNAL(urlChanged(const KUrl&)), @@ -147,7 +146,7 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, m_filterBar = new FilterBar(this); m_filterBar->setVisible(settings->filterBar()); connect(m_filterBar, SIGNAL(filterChanged(const QString&)), - this, SLOT(changeNameFilter(const QString&))); + this, SLOT(setNameFilter(const QString&))); connect(m_filterBar, SIGNAL(closeRequest()), this, SLOT(closeFilterBar())); @@ -188,11 +187,11 @@ bool DolphinViewContainer::isActive() const void DolphinViewContainer::renameSelectedItems() { DolphinViewContainer* view = m_mainWindow->activeViewContainer(); - const QList items = m_view->selectedItems(); + const KFileItemList items = m_view->selectedItems(); if (items.count() > 1) { // More than one item has been selected for renaming. Open // a rename dialog and rename all items afterwards. - RenameDialog dialog(items); + RenameDialog dialog(this, items); if (dialog.exec() == QDialog::Rejected) { return; } @@ -211,8 +210,8 @@ void DolphinViewContainer::renameSelectedItems() Q_ASSERT(replaceIndex >= 0); int index = 1; - QList::const_iterator it = items.begin(); - QList::const_iterator end = items.end(); + KFileItemList::const_iterator it = items.begin(); + KFileItemList::const_iterator end = items.end(); while (it != end) { const KUrl& oldUrl = (*it).url(); QString number; @@ -237,7 +236,7 @@ void DolphinViewContainer::renameSelectedItems() // TODO: Think about using KFileItemDelegate as soon as it supports editing. // Currently the RenameDialog is used, but I'm not sure whether inline renaming // is a benefit for the user at all -> let's wait for some input first... - RenameDialog dialog(items); + RenameDialog dialog(this, items); if (dialog.exec() == QDialog::Rejected) { return; } @@ -291,7 +290,7 @@ void DolphinViewContainer::updateProgress(int percent) } } -void DolphinViewContainer::updateItemCount() +void DolphinViewContainer::slotDirListerCompleted() { if (m_showProgress) { m_statusBar->setProgressText(QString()); @@ -299,23 +298,6 @@ void DolphinViewContainer::updateItemCount() m_showProgress = false; } - KFileItemList items(m_dirLister->items()); - KFileItemList::const_iterator it = items.begin(); - const KFileItemList::const_iterator end = items.end(); - - m_fileCount = 0; - m_folderCount = 0; - - while (it != end) { - KFileItem* item = *it; - if (item->isDir()) { - ++m_folderCount; - } else { - ++m_fileCount; - } - ++it; - } - updateStatusBar(); QTimer::singleShot(100, this, SLOT(restoreContentsPos())); @@ -348,31 +330,19 @@ void DolphinViewContainer::closeFilterBar() QString DolphinViewContainer::defaultStatusBarText() const { - int m_fileCount = 0; - int m_folderCount = 0; - - for (int i = 0; i < m_proxyModel->rowCount(); i++) - { - if (m_dolphinModel->itemForIndex(m_proxyModel->mapToSource(m_proxyModel->index(i, m_proxyModel->sortColumn()))).isDir()) - { - m_folderCount++; - } - else - { - m_fileCount++; - } - } - - return KIO::itemsSummaryString(m_fileCount + m_folderCount, - m_fileCount, - m_folderCount, + int folderCount = 0; + int fileCount = 0; + m_view->calculateItemCount(fileCount, folderCount); + return KIO::itemsSummaryString(fileCount + folderCount, + fileCount, + folderCount, 0, false); } QString DolphinViewContainer::selectionStatusBarText() const { QString text; - const QList list = m_view->selectedItems(); + const KFileItemList list = m_view->selectedItems(); if (list.isEmpty()) { // when an item is triggered, it is temporary selected but selectedItems() // will return an empty list @@ -382,8 +352,8 @@ QString DolphinViewContainer::selectionStatusBarText() const int fileCount = 0; int folderCount = 0; KIO::filesize_t byteSize = 0; - QList::const_iterator it = list.begin(); - const QList::const_iterator end = list.end(); + KFileItemList::const_iterator it = list.begin(); + const KFileItemList::const_iterator end = list.end(); while (it != end) { const KFileItem& item = *it; if (item.isDir()) { @@ -439,30 +409,9 @@ void DolphinViewContainer::updateStatusBar() } } -void DolphinViewContainer::changeNameFilter(const QString& nameFilter) +void DolphinViewContainer::setNameFilter(const QString& nameFilter) { - // The name filter of KDirLister does a 'hard' filtering, which - // means that only the items are shown where the names match - // exactly the filter. This is non-transparent for the user, which - // just wants to have a 'soft' filtering: does the name contain - // the filter string? - QString adjustedFilter(nameFilter); - adjustedFilter.insert(0, '*'); - adjustedFilter.append('*'); - - // Use the ProxyModel to filter: - // This code is #ifdefed as setNameFilter behaves - // slightly different than the QSortFilterProxyModel - // as it will not remove directories. I will ask - // our beloved usability experts for input - // -- z. -#if 0 - m_dirLister->setNameFilter(adjustedFilter); - m_dirLister->emitChanges(); -#else - m_proxyModel->setFilterRegExp(nameFilter); -#endif - + m_view->setNameFilter(nameFilter); updateStatusBar(); } @@ -491,6 +440,17 @@ void DolphinViewContainer::activate() setActive(true); } +void DolphinViewContainer::restoreView(const KUrl& url) +{ + m_view->updateView(url, m_urlNavigator->savedRootUrl()); +} + +void DolphinViewContainer::saveRootUrl(const KUrl& url) +{ + Q_UNUSED(url); + m_urlNavigator->saveRootUrl(m_view->rootUrl()); +} + void DolphinViewContainer::slotItemTriggered(const KFileItem& item) { // Prefer the local path over the URL.