X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/487215f0c459ca38c68619325edac4a2fe42ca4b..11e1ee53bbd5fcce304c491a3bb0b1641cdef4f2:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index ece22f4c0..53b1c7529 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -55,7 +55,6 @@ #include "dolphinsortfilterproxymodel.h" #include "dolphindetailsview.h" #include "dolphiniconsview.h" -#include "dolphincontextmenu.h" #include "draganddrophelper.h" #include "filterbar.h" #include "statusbar/dolphinstatusbar.h" @@ -63,12 +62,9 @@ #include "settings/dolphinsettings.h" #include "dolphin_generalsettings.h" -DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, - QWidget* parent, - const KUrl& url) : +DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : QWidget(parent), m_isFolderWritable(false), - m_mainWindow(mainWindow), m_topLayout(0), m_urlNavigator(0), m_view(0), @@ -89,13 +85,15 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(dropUrls(const KUrl&, QDropEvent*))); connect(m_urlNavigator, SIGNAL(activated()), this, SLOT(activate())); + //connect(m_urlNavigator, SIGNAL(tabRequested(const KUrl&)), + // this, connect(m_urlNavigator->editor(), SIGNAL(completionModeChanged(KGlobalSettings::Completion)), this, SLOT(saveUrlCompletionMode(KGlobalSettings::Completion))); const GeneralSettings* settings = DolphinSettings::instance().generalSettings(); m_urlNavigator->setUrlEditable(settings->editableUrl()); m_urlNavigator->setShowFullPath(settings->showFullPath()); - m_urlNavigator->setHomeUrl(settings->homeUrl()); + m_urlNavigator->setHomeUrl(KUrl(settings->homeUrl())); KUrlComboBox* editor = m_urlNavigator->editor(); editor->setCompletionMode(KGlobalSettings::Completion(settings->urlCompletionMode())); @@ -132,10 +130,6 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, m_view = new DolphinView(this, url, m_proxyModel); connect(m_view, SIGNAL(urlChanged(const KUrl&)), m_urlNavigator, SLOT(setUrl(const KUrl&))); - connect(m_view, SIGNAL(requestContextMenu(KFileItem, const KUrl&, const QList&)), - this, SLOT(openContextMenu(KFileItem, const KUrl&, const QList&))); - connect(m_view, SIGNAL(contentsMoved(int, int)), - this, SLOT(saveContentsPos(int, int))); connect(m_view, SIGNAL(requestItemInfo(KFileItem)), this, SLOT(showItemInfo(KFileItem))); connect(m_view, SIGNAL(errorMessage(const QString&)), @@ -146,18 +140,19 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(showOperationCompletedMessage(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_view, SIGNAL(redirection(KUrl, KUrl)), this, SLOT(redirect(KUrl, KUrl))); connect(m_view, SIGNAL(selectionChanged(const KFileItemList&)), this, SLOT(delayedStatusBarUpdate())); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), - this, SLOT(restoreView(const KUrl&))); + this, SLOT(slotUrlNavigatorLocationChanged(const KUrl&))); + connect(m_urlNavigator, SIGNAL(urlAboutToBeChanged(const KUrl&)), + this, SLOT(saveViewState())); connect(m_urlNavigator, SIGNAL(historyChanged()), this, SLOT(slotHistoryChanged())); + // initialize status bar m_statusBar = new DolphinStatusBar(this, m_view); m_statusBarTimer = new QTimer(this); m_statusBarTimer->setSingleShot(true); @@ -165,6 +160,11 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, connect(m_statusBarTimer, SIGNAL(timeout()), this, SLOT(updateStatusBar())); + KIO::FileUndoManager* undoManager = KIO::FileUndoManager::self(); + connect(undoManager, SIGNAL(jobRecordingFinished(CommandType)), + this, SLOT(delayedStatusBarUpdate())); + + // initialize filter bar m_filterBar = new FilterBar(this); m_filterBar->setVisible(settings->filterBar()); connect(m_filterBar, SIGNAL(filterChanged(const QString&)), @@ -191,23 +191,9 @@ DolphinViewContainer::~DolphinViewContainer() m_dirLister = 0; // deleted by m_dolphinModel } -void DolphinViewContainer::setUrl(const KUrl& newUrl) -{ - if (newUrl != m_urlNavigator->url()) { - m_urlNavigator->setUrl(newUrl); - // Temporary disable the 'File'->'Create New...' menu until - // the write permissions can be checked in a fast way at - // DolphinViewContainer::slotDirListerCompleted(). - m_isFolderWritable = false; - if (isActive()) { - m_mainWindow->newMenu()->menu()->setEnabled(false); - } - } -} - -const KUrl& DolphinViewContainer::url() const +KUrl DolphinViewContainer::url() const { - return m_urlNavigator->url(); + return m_urlNavigator->locationUrl(); } void DolphinViewContainer::setActive(bool active) @@ -215,7 +201,7 @@ void DolphinViewContainer::setActive(bool active) m_urlNavigator->setActive(active); m_view->setActive(active); if (active) { - m_mainWindow->newMenu()->menu()->setEnabled(m_isFolderWritable); + emit writeStateChanged(m_isFolderWritable); } } @@ -236,6 +222,20 @@ bool DolphinViewContainer::isFilterBarVisible() const return m_filterBar->isVisible(); } +void DolphinViewContainer::setUrl(const KUrl& newUrl) +{ + if (newUrl != m_urlNavigator->locationUrl()) { + m_urlNavigator->setLocationUrl(newUrl); + // Temporary disable the 'File'->'Create New...' menu until + // the write permissions can be checked in a fast way at + // DolphinViewContainer::slotDirListerCompleted(). + m_isFolderWritable = false; + if (isActive()) { + emit writeStateChanged(false); + } + } +} + void DolphinViewContainer::showFilterBar(bool show) { Q_ASSERT(m_filterBar != 0); @@ -246,11 +246,6 @@ void DolphinViewContainer::showFilterBar(bool show) } } -bool DolphinViewContainer::isUrlEditable() const -{ - return m_urlNavigator->isUrlEditable(); -} - void DolphinViewContainer::delayedStatusBarUpdate() { // Invoke updateStatusBar() with a small delay. This assures that @@ -274,7 +269,7 @@ void DolphinViewContainer::updateStatusBar() || (m_statusBar->type() == DolphinStatusBar::Information)) && (m_statusBar->progress() == 100); - const QString text(m_view->statusBarText()); + const QString text = m_view->statusBarText(); m_statusBar->setDefaultText(text); if (updateStatusBarMsg) { @@ -314,6 +309,7 @@ void DolphinViewContainer::slotDirListerCompleted() } else { updateStatusBar(); } + QMetaObject::invokeMethod(this, "restoreViewState", Qt::QueuedConnection); // Enable the 'File'->'Create New...' menu only if the directory // supports writing. @@ -327,7 +323,7 @@ void DolphinViewContainer::slotDirListerCompleted() } if (isActive()) { - m_mainWindow->newMenu()->menu()->setEnabled(m_isFolderWritable); + emit writeStateChanged(m_isFolderWritable); } } @@ -375,31 +371,30 @@ void DolphinViewContainer::setNameFilter(const QString& nameFilter) delayedStatusBarUpdate(); } -void DolphinViewContainer::openContextMenu(const KFileItem& item, - const KUrl& url, - const QList& customActions) +void DolphinViewContainer::restoreViewState() { - DolphinContextMenu contextMenu(m_mainWindow, item, url); - contextMenu.setCustomActions(customActions); - contextMenu.open(); + QByteArray locationState = m_urlNavigator->locationState(); + QDataStream stream(&locationState, QIODevice::ReadOnly); + m_view->restoreState(stream); } -void DolphinViewContainer::saveContentsPos(int x, int y) +void DolphinViewContainer::activate() { - // TODO: If DolphinViewContainer uses DolphinView::saveState(...) to save the - // view state in KDE 4.5, this funciton can be removed. - m_urlNavigator->savePosition(x, y); + setActive(true); } -void DolphinViewContainer::activate() +void DolphinViewContainer::saveViewState() { - setActive(true); + QByteArray locationState; + QDataStream stream(&locationState, QIODevice::WriteOnly); + m_view->saveState(stream); + m_urlNavigator->saveLocationState(locationState); } -void DolphinViewContainer::restoreView(const KUrl& url) +void DolphinViewContainer::slotUrlNavigatorLocationChanged(const KUrl& url) { if (KProtocolManager::supportsListing(url)) { - m_view->updateView(url, m_urlNavigator->savedRootUrl()); + m_view->setUrl(url); if (isActive()) { // When an URL has been entered, the view should get the focus. // The focus must be requested asynchronously, as changing the URL might create @@ -437,12 +432,6 @@ void DolphinViewContainer::restoreView(const KUrl& url) } } -void DolphinViewContainer::saveRootUrl(const KUrl& url) -{ - Q_UNUSED(url); - m_urlNavigator->saveRootUrl(m_view->rootUrl()); -} - void DolphinViewContainer::dropUrls(const KUrl& destination, QDropEvent* event) { DragAndDropHelper::instance().dropUrls(KFileItem(), destination, event, this); @@ -453,7 +442,7 @@ void DolphinViewContainer::redirect(const KUrl& oldUrl, const KUrl& newUrl) Q_UNUSED(oldUrl); const bool block = m_urlNavigator->signalsBlocked(); m_urlNavigator->blockSignals(true); - m_urlNavigator->setUrl(newUrl); + m_urlNavigator->setLocationUrl(newUrl); m_urlNavigator->blockSignals(block); } @@ -472,13 +461,11 @@ void DolphinViewContainer::saveUrlCompletionMode(KGlobalSettings::Completion com void DolphinViewContainer::slotHistoryChanged() { const int index = m_urlNavigator->historyIndex(); - if (index > 0) { + if (index > 0) { // The "Go Forward" action is enabled. Try to mark // the previous directory as active item: - const KUrl url = m_urlNavigator->historyUrl(index - 1); + const KUrl url = m_urlNavigator->locationUrl(index - 1); m_view->activateItem(url); - QPoint pos = m_urlNavigator->savedPosition(); - m_view->setRestoredContentsPosition(pos); } }