aboutsummaryrefslogtreecommitdiff
path: root/src/subwindow
diff options
context:
space:
mode:
Diffstat (limited to 'src/subwindow')
-rw-r--r--src/subwindow/subwindow.cpp37
-rw-r--r--src/subwindow/subwindow.h4
2 files changed, 41 insertions, 0 deletions
diff --git a/src/subwindow/subwindow.cpp b/src/subwindow/subwindow.cpp
index 58acee6..8c2e3e7 100644
--- a/src/subwindow/subwindow.cpp
+++ b/src/subwindow/subwindow.cpp
@@ -10,10 +10,12 @@
#include "browser.h"
#include "configuration.h"
#include "webengine/webprofile.h"
+#include "webengine/webprofilemanager.h"
#include "webengine/webview.h"
#include <QAction>
#include <QCloseEvent>
#include <QHideEvent>
+#include <QJsonArray>
#include <QMenu>
#include <QShortcut>
#include <QShowEvent>
@@ -76,6 +78,35 @@ SubWindow::SubWindow(QWidget *parent, Qt::WindowFlags flags)
});
}
+SubWindow::SubWindow(const Session::SubWindow &data, QWidget *parent, Qt::WindowFlags flags)
+ : SubWindow(parent, flags)
+{
+ const auto *profileManager = WebProfileManager::instance();
+ Q_CHECK_PTR(profileManager);
+
+ auto *profile = profileManager->profile(data.profile);
+ if(profile != nullptr) {
+ setProfile(profile);
+ }
+
+ for(const auto &data : data.tabs) {
+ addTab(data);
+ }
+}
+
+Session::SubWindow SubWindow::serialize() const
+{
+ const auto *profileManager = WebProfileManager::instance();
+ Q_CHECK_PTR(profileManager);
+
+ QVector<Session::WebView> tabs(tabCount());
+ for(int i = 0; i < tabCount(); ++i) {
+ tabs[i] = view(i)->serialize();
+ }
+
+ return { profileManager->id(profile()), tabs };
+}
+
void SubWindow::setProfile(WebProfile *profile)
{
if(profile == nullptr) {
@@ -115,6 +146,12 @@ int SubWindow::addTab(const QUrl &url, WebProfile *profile)
return tabWidget->addTab(view);
}
+int SubWindow::addTab(const Session::WebView &data)
+{
+ auto *view = new WebView(data, this);
+ return tabWidget->addTab(view);
+}
+
void SubWindow::moveTab(int from, int to)
{
tabWidget->tabBar()->moveTab(from, to);
diff --git a/src/subwindow/subwindow.h b/src/subwindow/subwindow.h
index 8343a9b..02f50d0 100644
--- a/src/subwindow/subwindow.h
+++ b/src/subwindow/subwindow.h
@@ -9,6 +9,7 @@
#ifndef SMOLBOTE_SUBWINDOW_H
#define SMOLBOTE_SUBWINDOW_H
+#include "session.hpp"
#include "tabwidget.h"
#include "webengine/webview.h"
#include <QMenu>
@@ -27,7 +28,9 @@ public:
};
explicit SubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
+ explicit SubWindow(const Session::SubWindow &data, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~SubWindow() = default;
+ [[nodiscard]] Session::SubWindow serialize() const;
[[nodiscard]] int currentTabIndex() const
{
@@ -66,6 +69,7 @@ signals:
public slots:
int addTab(const QUrl &url = QUrl(), WebProfile *profile = nullptr);
+ int addTab(const Session::WebView &data);
void closeTab(int index)
{
tabWidget->removeTab(index);