X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/85bc196887fbed01187e3830cd28c2500cb01cb2..bbc814c7fa79b545ceef3e6f7eaf00398eef896c:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 17bbd608d..bb84d32c0 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include @@ -39,6 +41,7 @@ #include #include +#include "dolphincolumnview.h" #include "dolphincontroller.h" #include "dolphinstatusbar.h" #include "dolphinmainwindow.h" @@ -52,6 +55,7 @@ #include "urlnavigator.h" #include "viewproperties.h" #include "dolphinsettings.h" +#include "dolphin_generalsettings.h" DolphinView::DolphinView(DolphinMainWindow* mainWindow, QWidget* parent, @@ -71,6 +75,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, m_controller(0), m_iconsView(0), m_detailsView(0), + m_columnView(0), m_fileItemDelegate(0), m_filterBar(0), m_statusBar(0), @@ -92,6 +97,8 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, this, SLOT(updateCutItems())); m_urlNavigator = new UrlNavigator(DolphinSettings::instance().bookmarkManager(), url, this); + m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl()); + m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl()); m_urlNavigator->setShowHiddenFiles(showHiddenFiles); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), this, SLOT(loadDirectory(const KUrl&))); @@ -288,8 +295,8 @@ void DolphinView::renameSelectedItems() name.replace(replaceIndex, 1, number); if (oldUrl.fileName() != name) { - KUrl newUrl(oldUrl.upUrl()); - newUrl.addPath(name); + KUrl newUrl = oldUrl; + newUrl.setFileName(name); m_mainWindow->rename(oldUrl, newUrl); } ++it; @@ -316,8 +323,8 @@ void DolphinView::renameSelectedItems() } else { const KUrl& oldUrl = urls.first(); - KUrl newUrl = oldUrl.upUrl(); - newUrl.addPath(newName); + KUrl newUrl = oldUrl; + newUrl.setFileName(newName); m_mainWindow->rename(oldUrl, newUrl); } } @@ -340,7 +347,6 @@ DolphinStatusBar* DolphinView::statusBar() const int DolphinView::contentsX() const { - return itemView()->horizontalScrollBar()->value(); } @@ -349,11 +355,6 @@ int DolphinView::contentsY() const return itemView()->verticalScrollBar()->value(); } -void DolphinView::refreshSettings() -{ - startDirLister(m_urlNavigator->url()); -} - void DolphinView::emitRequestItemInfo(const KUrl& url) { emit requestItemInfo(url); @@ -451,7 +452,7 @@ void DolphinView::goHome() void DolphinView::setUrlEditable(bool editable) { - m_urlNavigator->editUrl(editable); + m_urlNavigator->setUrlEditable(editable); } bool DolphinView::hasSelection() const @@ -597,7 +598,16 @@ void DolphinView::loadDirectory(const KUrl& url) const ViewProperties props(url); const Mode mode = props.viewMode(); - if (m_mode != mode) { + bool changeMode = (m_mode != mode); + if (changeMode && isColumnViewActive()) { + // The column view is active. Only change the + // mode if the current URL is no child of the column view. + if (m_dirLister->url().isParentOf(url)) { + changeMode = false; + } + } + + if (changeMode) { m_mode = mode; createView(); emit modeChanged(); @@ -766,12 +776,13 @@ void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) void DolphinView::restoreContentsPos() { - UrlNavigator::HistoryElem historyItem = m_urlNavigator->currentHistoryItem(); - if (!historyItem.url().isEmpty()) { + KUrl currentUrl = m_urlNavigator->url(); + if (!currentUrl.isEmpty()) { QAbstractItemView* view = itemView(); - // TODO: view->setCurrentItem(historyItem.currentFileName()); - view->horizontalScrollBar()->setValue(historyItem.contentsX()); - view->verticalScrollBar()->setValue(historyItem.contentsY()); + // TODO: view->setCurrentItem(m_urlNavigator->currentFileName()); + QPoint pos = m_urlNavigator->savedPosition(); + view->horizontalScrollBar()->setValue(pos.x()); + view->verticalScrollBar()->setValue(pos.y()); } } @@ -824,7 +835,43 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_cutItemsCache.clear(); m_blockContentsMovedSignal = true; m_dirLister->stop(); - m_dirLister->openUrl(url, false, reload); + + bool openDir = true; + bool keepOldDirs = isColumnViewActive(); + if (keepOldDirs) { + if (reload) { + keepOldDirs = false; + + const KUrl& dirListerUrl = m_dirLister->url(); + if (dirListerUrl.isValid()) { + const KUrl::List dirs = m_dirLister->directories(); + KUrl url; + foreach (url, dirs) { + m_dirLister->updateDirectory(url); + } + openDir = false; + } + } + else if (m_dirLister->directories().contains(url)) { + // The dir lister contains the directory already, so + // KDirLister::openUrl() may not been invoked twice. + m_dirLister->updateDirectory(url); + openDir = false; + } + 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 bookmark has been selected + // and hence the view must be reset. + keepOldDirs = false; + } + } + } + + if (openDir) { + m_dirLister->openUrl(url, keepOldDirs, reload); + } } QString DolphinView::defaultStatusBarText() const @@ -1072,11 +1119,13 @@ void DolphinView::createView() view = 0; m_iconsView = 0; m_detailsView = 0; + m_columnView = 0; m_fileItemDelegate = 0; } Q_ASSERT(m_iconsView == 0); Q_ASSERT(m_detailsView == 0); + Q_ASSERT(m_columnView == 0); // ... and recreate it representing the current mode switch (m_mode) { @@ -1089,6 +1138,11 @@ void DolphinView::createView() m_detailsView = new DolphinDetailsView(this, m_controller); view = m_detailsView; break; + + case ColumnView: + m_columnView = new DolphinColumnView(this, m_controller); + view = m_columnView; + break; } Q_ASSERT(view != 0); @@ -1125,10 +1179,13 @@ void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags) QAbstractItemView* DolphinView::itemView() const { - Q_ASSERT((m_iconsView == 0) || (m_detailsView == 0)); if (m_detailsView != 0) { return m_detailsView; } + else if (m_columnView != 0) { + return m_columnView; + } + return m_iconsView; }