/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote * * SPDX-License-Identifier: GPL-3.0 */ #ifndef SMOLBOTE_MAINWINDOW_H #define SMOLBOTE_MAINWINDOW_H #include "session.hpp" #include "subwindow/subwindow.h" #include #include #include #include class Browser; class AddressBar; class SearchForm; class WebView; class NavigationBar; class WebProfile; class MenuBar; class MainWindow final : public QMainWindow { friend class Browser; Q_OBJECT public: enum ActionLocation { ToolsMenu }; explicit MainWindow(const Session::MainWindow &data, QWidget *parent = nullptr); MainWindow(const MainWindow &) = delete; ~MainWindow() = default; [[nodiscard]] Session::MainWindow serialize() const { QVector subwindows(m_subwindows.size()); for(int i = 0; i < m_subwindows.size(); ++i) { subwindows[i] = m_subwindows.at(i)->serialize(); } return { subwindows }; } void addDockWidget(Qt::DockWidgetArea area, QWidget *widget); void removeDockWidget(QWidget *widget); [[nodiscard]] const QVector subWindows() const { return m_subwindows; } [[nodiscard]] SubWindow *currentSubWindow() const { return qobject_cast(centralWidget()); } [[nodiscard]] WebView *currentView() const { return currentSubWindow()->currentView(); } public slots: void createTab(const QUrl &url); void createTab(const Session::WebView &data); SubWindow *createSubWindow(const Session::SubWindow &data); void setCurrentSubWindow(SubWindow *subwindow); private slots: void setView(WebView *view); protected: void closeEvent(QCloseEvent *event) override; private: QString defaultWindowTitle; MenuBar *m_menuBar = nullptr; QMenu *toolsMenu = nullptr; QMenu *pageLoadProfileMenu = nullptr; NavigationBar *navigationToolBar = nullptr; AddressBar *addressBar = nullptr; SearchForm *searchBox = nullptr; QVector m_subwindows; QMetaObject::Connection viewChangedConnection; QMetaObject::Connection statusBarConnection; }; #endif // SMOLBOTE_MAINWINDOW_H