X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/dbc8874c00c35aaefacdd03f8aef9e4ac4e2be01..41e64a33e8d86791cdb794a7f98d9b17a4ee363b:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 9379a49cb..7311b3074 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); @@ -99,12 +98,12 @@ DolphinView::DolphinView(QWidget* parent, this, SLOT(updateSorting(DolphinView::Sorting))); connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(updateSortOrder(Qt::SortOrder))); - connect(m_controller, SIGNAL(itemTriggered(const QModelIndex&)), - this, SLOT(triggerItem(const QModelIndex&))); + connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)), + this, SLOT(triggerItem(const KFileItem&))); 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())); @@ -123,7 +122,7 @@ const KUrl& DolphinView::url() const KUrl DolphinView::rootUrl() const { - return isColumnViewActive() ? m_dirLister->url() : url(); + return isColumnViewActive() ? m_columnView->rootUrl() : url(); } void DolphinView::setActive(bool active) @@ -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,17 @@ 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->setRootUrl(rootUrl); + m_columnView->showColumn(url); + } } else { applyViewProperties(url); - startDirLister(url); + loadDirectory(url); } itemView()->setFocus(); @@ -490,10 +485,8 @@ void DolphinView::activate() setActive(true); } -void DolphinView::triggerItem(const QModelIndex& index) +void DolphinView::triggerItem(const KFileItem& item) { - Q_ASSERT(index.isValid()); - const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); if ((modifier & Qt::ShiftModifier) || (modifier & Qt::ControlModifier)) { // items are selected by the user, hence don't trigger the @@ -501,8 +494,6 @@ void DolphinView::triggerItem(const QModelIndex& index) return; } - const KFileItem item = m_dolphinModel->itemForIndex(m_proxyModel->mapToSource(index)); - if (item.isNull()) { return; } @@ -510,7 +501,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 +537,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 +553,16 @@ 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 (isColumnViewActive()) { + // adjusting the directory lister is not enough in the case of the + // column view, as each column has its own directory lister internally... 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); - } + m_columnView->showColumn(url); } - } else { - m_dirLister->openUrl(url, false, reload); } } @@ -602,7 +577,7 @@ KUrl DolphinView::viewPropertiesUrl() const void DolphinView::applyViewProperties(const KUrl& url) { - if (isColumnViewActive() && m_dirLister->url().isParentOf(url)) { + if (isColumnViewActive() && rootUrl().isParentOf(url)) { // The column view is active, hence don't apply the view properties // of sub directories (represented by columns) to the view. The // view always represents the properties of the first column. @@ -616,14 +591,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 +601,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 +627,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 +639,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 +756,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 +773,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 +817,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); @@ -912,8 +883,6 @@ void DolphinView::applyCutItemEffect() const KFileItem item = *it; if (isCutItem(item)) { const QModelIndex index = m_dolphinModel->indexForItem(item); - // Huh? the item is already known - //const KFileItem item = m_dolphinModel->itemForIndex(index); const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole); if (value.type() == QVariant::Icon) { const QIcon icon(qvariant_cast(value));