File indexing completed on 2024-05-19 04:59:22

0001 /* ============================================================
0002 * VerticalTabs plugin for Falkon
0003 * Copyright (C) 2018 David Rosca <nowrep@gmail.com>
0004 *
0005 * This program is free software: you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation, either version 3 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License
0016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0017 * ============================================================ */
0018 #pragma once
0019 
0020 #include "plugininterface.h"
0021 
0022 class BrowserWindow;
0023 
0024 class VerticalTabsController;
0025 class VerticalTabsSchemeHandler;
0026 
0027 class VerticalTabsPlugin : public QObject, public PluginInterface
0028 {
0029     Q_OBJECT
0030     Q_INTERFACES(PluginInterface)
0031     Q_PLUGIN_METADATA(IID "Falkon.Browser.plugin.VerticalTabs" FILE "verticaltabs.json")
0032 
0033 public:
0034     explicit VerticalTabsPlugin();
0035 
0036     void init(InitState state, const QString &settingsPath) override;
0037     void unload() override;
0038     bool testPlugin() override;
0039     void showSettings(QWidget *parent = nullptr) override;
0040     bool keyPress(Qz::ObjectName type, QObject *obj, QKeyEvent *event) override;
0041 
0042     enum ViewType {
0043         TabListView,
0044         TabTreeView
0045     };
0046 
0047     ViewType viewType() const;
0048     void setViewType(ViewType type);
0049 
0050     bool replaceTabBar() const;
0051     void setReplaceTabBar(bool replace);
0052 
0053     enum AddChildBehavior {
0054         AppendChild,
0055         PrependChild
0056     };
0057 
0058     AddChildBehavior addChildBehavior() const;
0059     void setAddChildBehavior(AddChildBehavior behavior);
0060 
0061     QString theme() const;
0062     void setTheme(const QString &theme);
0063 
0064     QString styleSheet() const;
0065 
0066 Q_SIGNALS:
0067     void viewTypeChanged(VerticalTabsPlugin::ViewType type);
0068     void styleSheetChanged(const QString &styleSheet);
0069 
0070 private:
0071     void mainWindowCreated(BrowserWindow *window);
0072     void setTabBarVisible(bool visible);
0073     void setWebTabBehavior(AddChildBehavior behavior);
0074     void loadStyleSheet(const QString &theme);
0075 
0076     QString m_settingsPath;
0077     VerticalTabsController *m_controller = nullptr;
0078     VerticalTabsSchemeHandler *m_schemeHandler = nullptr;
0079     ViewType m_viewType = TabListView;
0080     bool m_replaceTabBar = false;
0081     AddChildBehavior m_addChildBehavior = AppendChild;
0082     QString m_theme;
0083     QString m_styleSheet;
0084 };