X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/293e65797afd44a530df3435a8cc5b1b024aa3bb..d511752c9de4d9adc30a15ddf9bf89efc1924a7b:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 65ec4c9d3..876e037f5 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -28,10 +28,10 @@ #include #include +#include #include #include #include -#include #include #include #include @@ -57,13 +57,12 @@ DolphinView::DolphinView(QWidget* parent, const KUrl& url, KDirLister* dirLister, KDirModel* dirModel, - DolphinSortFilterProxyModel* proxyModel, - Mode mode) : + DolphinSortFilterProxyModel* proxyModel) : QWidget(parent), m_active(true), - m_blockContentsMovedSignal(false), + m_loadingDirectory(false), m_initializeColumnView(false), - m_mode(mode), + m_mode(DolphinView::IconsView), m_topLayout(0), m_controller(0), m_iconsView(0), @@ -90,6 +89,8 @@ DolphinView::DolphinView(QWidget* parent, m_controller = new DolphinController(this); m_controller->setUrl(url); + connect(m_controller, SIGNAL(urlChanged(const KUrl&)), + this, SIGNAL(urlChanged(const KUrl&))); connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)), this, SLOT(openContextMenu(const QPoint&))); connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const QModelIndex&, QWidget*)), @@ -107,7 +108,7 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(viewportEntered()), this, SLOT(clearHoverInformation())); - createView(); + applyViewProperties(url); m_topLayout->addWidget(itemView()); } @@ -133,7 +134,7 @@ void DolphinView::setActive(bool active) m_active = active; - QColor color = KGlobalSettings::baseColor(); + QColor color = KColorScheme(KColorScheme::View).background(); if (active) { emit urlChanged(url()); emit selectionChanged(selectedItems()); @@ -171,9 +172,8 @@ void DolphinView::setMode(Mode mode) // to go back to the root URL of the column view automatically. // Otherwise there it would not be possible to turn off the column view // without focusing the first column. - // TODO: reactivate again after DolphinView/DolphinViewController split works - //setUrl(m_dirLister->url()); - //m_controller->setUrl(m_dirLister->url()); + setUrl(m_dirLister->url()); + m_controller->setUrl(m_dirLister->url()); } ViewProperties props(url()); @@ -337,7 +337,7 @@ void DolphinView::setContentsPosition(int x, int y) view->horizontalScrollBar()->setValue(x); view->verticalScrollBar()->setValue(y); - m_blockContentsMovedSignal = false; + m_loadingDirectory = false; } QPoint DolphinView::contentsPosition() const @@ -417,9 +417,24 @@ void DolphinView::reload() void DolphinView::refresh() { createView(); + applyViewProperties(m_controller->url()); reload(); } +void DolphinView::setUrl(const KUrl& url) +{ + if (m_controller->url() == url) { + return; + } + + m_controller->setUrl(url); + + applyViewProperties(url); + + startDirLister(url); + emit urlChanged(url); +} + void DolphinView::mouseReleaseEvent(QMouseEvent* event) { QWidget::mouseReleaseEvent(event); @@ -450,18 +465,11 @@ void DolphinView::triggerItem(const QModelIndex& index) return; } - // Prefer the local path over the URL. This assures that the - // volume space information is correct. Assuming that the URL is media:/sda1, - // and the local path is /windows/C: For the URL the space info is related - // to the root partition (and hence wrong) and for the local path the space - // info is related to the windows partition (-> correct). - const QString localPath(item->localPath()); - KUrl url; - if (localPath.isEmpty()) { - url = item->url(); - } else { - url = localPath; - } + // The stuff below should be moved to ViewContainer and be just a signal? + + // Prefer the local path over the URL. + bool isLocal; + KUrl url = item->mostLocalUrl(isLocal); if (item->isDir()) { setUrl(url); @@ -533,15 +541,15 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) if (!url.isValid()) { const QString location(url.pathOrUrl()); if (location.isEmpty()) { - emit errorMessage(i18n("The location is empty.")); + emit errorMessage(i18nc("@info:status", "The location is empty.")); } else { - emit errorMessage(i18n("The location '%1' is invalid.", location)); + emit errorMessage(i18nc("@info:status", "The location '%1' is invalid.", location)); } return; } m_cutItemsCache.clear(); - m_blockContentsMovedSignal = true; + m_loadingDirectory = true; m_dirLister->stop(); @@ -583,14 +591,8 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) } } -void DolphinView::setUrl(const KUrl& url) +void DolphinView::applyViewProperties(const KUrl& url) { - if (m_controller->url() == url) { - return; - } - - m_controller->setUrl(url); - const ViewProperties props(url); const Mode mode = props.viewMode(); @@ -616,6 +618,11 @@ void DolphinView::setUrl(const KUrl& url) m_initializeColumnView = true; } } + if (itemView() == 0) { + createView(); + } + Q_ASSERT(itemView() != 0); + Q_ASSERT(m_fileItemDelegate != 0); const bool showHiddenFiles = props.showHiddenFiles(); if (showHiddenFiles != m_dirLister->showingDotFiles()) { @@ -663,9 +670,6 @@ void DolphinView::setUrl(const KUrl& url) m_controller->setShowPreview(showPreview); emit showPreviewChanged(); } - - startDirLister(url); - emit urlChanged(url); } void DolphinView::changeSelection(const KFileItemList& selection) @@ -754,7 +758,12 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) void DolphinView::emitContentsMoved() { - if (!m_blockContentsMovedSignal) { + // only emit the contents moved signal if: + // - no directory loading is ongoing (this would reset the contents position + // always to (0, 0)) + // - if the Column View is active: the column view does an automatic + // positioning during the loading operation, which must be remembered + if (!m_loadingDirectory || isColumnViewActive()) { const QPoint pos(contentsPosition()); emit contentsMoved(pos.x(), pos.y()); } @@ -787,13 +796,13 @@ void DolphinView::showHoverInformation(const QModelIndex& index) const KFileItem* item = fileItem(index); if (item != 0) { - emit requestItemInfo(item->url()); + emit requestItemInfo(*item); } } void DolphinView::clearHoverInformation() { - emit requestItemInfo(KUrl()); + emit requestItemInfo(KFileItem()); }