]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabpage.cpp
Fix includes
[dolphin.git] / src / dolphintabpage.cpp
index c8e42633594d37671a237faef0c6928dccdeb936..6d55ebeb2a6ed997dbeb5fcf8e470fe6343751a7 100644 (file)
@@ -23,8 +23,9 @@
 #include "dolphin_generalsettings.h"
 
 #include <QSplitter>
+#include <QVBoxLayout>
 
-DolphinTabPage::DolphinTabPage(const KUrl& primaryUrl, const KUrl& secondaryUrl, QWidget* parent) :
+DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget* parent) :
     QWidget(parent),
     m_primaryViewActive(true),
     m_splitViewEnabled(false)
@@ -39,8 +40,10 @@ DolphinTabPage::DolphinTabPage(const KUrl& primaryUrl, const KUrl& secondaryUrl,
 
     // Create a new primary view
     m_primaryViewContainer = createViewContainer(primaryUrl);
-    connect(m_primaryViewContainer->view(), SIGNAL(urlChanged(KUrl)),
-            this, SIGNAL(activeViewUrlChanged(KUrl)));
+    connect(m_primaryViewContainer->view(), SIGNAL(urlChanged(QUrl)),
+            this, SIGNAL(activeViewUrlChanged(QUrl)));
+    connect(m_primaryViewContainer->view(), SIGNAL(redirection(QUrl,QUrl)),
+            this, SLOT(slotViewUrlRedirection(QUrl,QUrl)));
 
     m_splitter->addWidget(m_primaryViewContainer);
     m_primaryViewContainer->show();
@@ -49,7 +52,7 @@ DolphinTabPage::DolphinTabPage(const KUrl& primaryUrl, const KUrl& secondaryUrl,
         // Provide a secondary view, if the given secondary url is valid or if the
         // startup settings are set this way (use the url of the primary view).
         m_splitViewEnabled = true;
-        const KUrl& url = secondaryUrl.isValid() ? secondaryUrl : primaryUrl;
+        const QUrl& url = secondaryUrl.isValid() ? secondaryUrl : primaryUrl;
         m_secondaryViewContainer = createViewContainer(url);
         m_splitter->addWidget(m_secondaryViewContainer);
         m_secondaryViewContainer->show();
@@ -74,8 +77,12 @@ void DolphinTabPage::setSplitViewEnabled(bool enabled)
         m_splitViewEnabled = enabled;
 
         if (enabled) {
-            const KUrl& url = m_primaryViewContainer->url();
+            const QUrl& url = m_primaryViewContainer->url();
             m_secondaryViewContainer = createViewContainer(url);
+
+            const bool placesSelectorVisible = m_primaryViewContainer->urlNavigator()->isPlacesSelectorVisible();
+            m_secondaryViewContainer->urlNavigator()->setPlacesSelectorVisible(placesSelectorVisible);
+
             m_splitter->addWidget(m_secondaryViewContainer);
             m_secondaryViewContainer->show();
             m_secondaryViewContainer->setActive(true);
@@ -128,7 +135,7 @@ int DolphinTabPage::selectedItemsCount() const
     return selectedItemsCount;
 }
 
-void DolphinTabPage::markUrlsAsSelected(const QList<KUrl>& urls)
+void DolphinTabPage::markUrlsAsSelected(const QList<QUrl>& urls)
 {
     m_primaryViewContainer->view()->markUrlsAsSelected(urls);
     if (m_splitViewEnabled) {
@@ -136,7 +143,7 @@ void DolphinTabPage::markUrlsAsSelected(const QList<KUrl>& urls)
     }
 }
 
-void DolphinTabPage::markUrlAsCurrent(const KUrl& url)
+void DolphinTabPage::markUrlAsCurrent(const QUrl& url)
 {
     m_primaryViewContainer->view()->markUrlAsCurrent(url);
     if (m_splitViewEnabled) {
@@ -165,14 +172,18 @@ QByteArray DolphinTabPage::saveState() const
     QByteArray state;
     QDataStream stream(&state, QIODevice::WriteOnly);
 
+    stream << quint32(2); // Tab state version
+
     stream << m_splitViewEnabled;
 
     stream << m_primaryViewContainer->url();
     stream << m_primaryViewContainer->urlNavigator()->isUrlEditable();
+    m_primaryViewContainer->view()->saveState(stream);
 
     if (m_splitViewEnabled) {
         stream << m_secondaryViewContainer->url();
         stream << m_secondaryViewContainer->urlNavigator()->isUrlEditable();
+        m_secondaryViewContainer->view()->saveState(stream);
     }
 
     stream << m_primaryViewActive;
@@ -183,6 +194,62 @@ QByteArray DolphinTabPage::saveState() const
 
 void DolphinTabPage::restoreState(const QByteArray& state)
 {
+    if (state.isEmpty()) {
+        return;
+    }
+
+    QByteArray sd = state;
+    QDataStream stream(&sd, QIODevice::ReadOnly);
+
+    // Read the version number of the tab state and check if the version is supported.
+    quint32 version = 0;
+    stream >> version;
+    if (version != 2) {
+        // The version of the tab state isn't supported, we can't restore it.
+        return;
+    }
+
+    bool isSplitViewEnabled = false;
+    stream >> isSplitViewEnabled;
+    setSplitViewEnabled(isSplitViewEnabled);
+
+    QUrl primaryUrl;
+    stream >> primaryUrl;
+    m_primaryViewContainer->setUrl(primaryUrl);
+    bool primaryUrlEditable;
+    stream >> primaryUrlEditable;
+    m_primaryViewContainer->urlNavigator()->setUrlEditable(primaryUrlEditable);
+    m_primaryViewContainer->view()->restoreState(stream);
+
+    if (isSplitViewEnabled) {
+        QUrl secondaryUrl;
+        stream >> secondaryUrl;
+        m_secondaryViewContainer->setUrl(secondaryUrl);
+        bool secondaryUrlEditable;
+        stream >> secondaryUrlEditable;
+        m_secondaryViewContainer->urlNavigator()->setUrlEditable(secondaryUrlEditable);
+        m_secondaryViewContainer->view()->restoreState(stream);
+    }
+
+    stream >> m_primaryViewActive;
+    if (m_primaryViewActive) {
+        m_primaryViewContainer->setActive(true);
+    } else {
+        Q_ASSERT(m_splitViewEnabled);
+        m_secondaryViewContainer->setActive(true);
+    }
+
+    QByteArray splitterState;
+    stream >> splitterState;
+    m_splitter->restoreState(splitterState);
+}
+
+void DolphinTabPage::restoreStateV1(const QByteArray& state)
+{
+    if (state.isEmpty()) {
+        return;
+    }
+
     QByteArray sd = state;
     QDataStream stream(&sd, QIODevice::ReadOnly);
 
@@ -190,7 +257,7 @@ void DolphinTabPage::restoreState(const QByteArray& state)
     stream >> isSplitViewEnabled;
     setSplitViewEnabled(isSplitViewEnabled);
 
-    KUrl primaryUrl;
+    QUrl primaryUrl;
     stream >> primaryUrl;
     m_primaryViewContainer->setUrl(primaryUrl);
     bool primaryUrlEditable;
@@ -198,7 +265,7 @@ void DolphinTabPage::restoreState(const QByteArray& state)
     m_primaryViewContainer->urlNavigator()->setUrlEditable(primaryUrlEditable);
 
     if (isSplitViewEnabled) {
-        KUrl secondaryUrl;
+        QUrl secondaryUrl;
         stream >> secondaryUrl;
         m_secondaryViewContainer->setUrl(secondaryUrl);
         bool secondaryUrlEditable;
@@ -235,17 +302,28 @@ void DolphinTabPage::slotViewActivated()
     const DolphinView* newActiveView = activeViewContainer()->view();
 
     if (newActiveView != oldActiveView) {
-        disconnect(oldActiveView, SIGNAL(urlChanged(KUrl)),
-                   this, SIGNAL(activeViewUrlChanged(KUrl)));
-        connect(newActiveView, SIGNAL(urlChanged(KUrl)),
-                this, SIGNAL(activeViewUrlChanged(KUrl)));
+        disconnect(oldActiveView, SIGNAL(urlChanged(QUrl)),
+                   this, SIGNAL(activeViewUrlChanged(QUrl)));
+        disconnect(oldActiveView, SIGNAL(redirection(QUrl,QUrl)),
+                   this, SLOT(slotViewUrlRedirection(QUrl,QUrl)));
+        connect(newActiveView, SIGNAL(urlChanged(QUrl)),
+                this, SIGNAL(activeViewUrlChanged(QUrl)));
+        connect(newActiveView, SIGNAL(redirection(QUrl,QUrl)),
+                this, SLOT(slotViewUrlRedirection(QUrl,QUrl)));
     }
 
     emit activeViewUrlChanged(activeViewContainer()->url());
-    emit activeViewChanged();
+    emit activeViewChanged(activeViewContainer());
+}
+
+void DolphinTabPage::slotViewUrlRedirection(const QUrl& oldUrl, const QUrl& newUrl)
+{
+    Q_UNUSED(oldUrl);
+
+    emit activeViewUrlChanged(newUrl);
 }
 
-DolphinViewContainer* DolphinTabPage::createViewContainer(const KUrl& url) const
+DolphinViewContainer* DolphinTabPage::createViewContainer(const QUrl& url) const
 {
     DolphinViewContainer* container = new DolphinViewContainer(url, m_splitter);
     container->setActive(false);