diff --git a/src/plugins/VerticalTabs/data/themes/default.css b/src/plugins/VerticalTabs/data/themes/default.css
new file mode 100644
index 000000000..aafa233e1
--- /dev/null
+++ b/src/plugins/VerticalTabs/data/themes/default.css
@@ -0,0 +1,16 @@
+/* Vertical Tabs Default theme */
+
+TabTreeCloseButton
+{
+ qproperty-showOnNormal: 0;
+ qproperty-showOnHovered: 1;
+ qproperty-showOnSelected: 1;
+}
+
+TabTreeView
+{
+ color: 0;
+ qproperty-hoverColor: 0;
+ qproperty-selectedColor: 0;
+ qproperty-backgroundIndentation: 0;
+}
diff --git a/src/plugins/VerticalTabs/verticaltabs.qrc b/src/plugins/VerticalTabs/verticaltabs.qrc
index f67ad23c5..243f9d985 100644
--- a/src/plugins/VerticalTabs/verticaltabs.qrc
+++ b/src/plugins/VerticalTabs/verticaltabs.qrc
@@ -1,5 +1,6 @@
data/icon.svg
+ data/themes/default.css
diff --git a/src/plugins/VerticalTabs/verticaltabscontroller.cpp b/src/plugins/VerticalTabs/verticaltabscontroller.cpp
index da3b1e24b..627818a21 100644
--- a/src/plugins/VerticalTabs/verticaltabscontroller.cpp
+++ b/src/plugins/VerticalTabs/verticaltabscontroller.cpp
@@ -42,8 +42,10 @@ QAction *VerticalTabsController::createMenuAction()
QWidget *VerticalTabsController::createSideBarWidget(BrowserWindow *window)
{
VerticalTabsWidget *widget = new VerticalTabsWidget(window);
- connect(m_plugin, &VerticalTabsPlugin::viewTypeChanged, widget, &VerticalTabsWidget::setViewType);
widget->setViewType(m_plugin->viewType());
+ widget->setStyleSheet(m_plugin->styleSheet());
+ connect(m_plugin, &VerticalTabsPlugin::viewTypeChanged, widget, &VerticalTabsWidget::setViewType);
+ connect(m_plugin, &VerticalTabsPlugin::styleSheetChanged, widget, &VerticalTabsWidget::setStyleSheet);
return widget;
}
diff --git a/src/plugins/VerticalTabs/verticaltabsplugin.cpp b/src/plugins/VerticalTabs/verticaltabsplugin.cpp
index 9bacfc9b0..74051ea37 100644
--- a/src/plugins/VerticalTabs/verticaltabsplugin.cpp
+++ b/src/plugins/VerticalTabs/verticaltabsplugin.cpp
@@ -57,12 +57,14 @@ void VerticalTabsPlugin::init(InitState state, const QString &settingsPath)
m_viewType = static_cast(settings.value(QSL("ViewType"), TabListView).toInt());
m_replaceTabBar = settings.value(QSL("ReplaceTabBar"), false).toBool();
m_addChildBehavior = static_cast(settings.value(QSL("AddChildBehavior"), AppendChild).toInt());
+ m_theme = settings.value(QSL("Theme"), QSL(":verticaltabs/data/themes/default.css")).toString();
settings.endGroup();
m_controller = new VerticalTabsController(this);
SideBarManager::addSidebar(QSL("VerticalTabs"), m_controller);
setWebTabBehavior(m_addChildBehavior);
+ loadStyleSheet(m_theme);
connect(mApp->plugins(), &PluginProxy::mainWindowCreated, this, &VerticalTabsPlugin::mainWindowCreated);
@@ -156,6 +158,31 @@ void VerticalTabsPlugin::setAddChildBehavior(AddChildBehavior behavior)
settings.setValue(QSL("VerticalTabs/AddChildBehavior"), m_addChildBehavior);
}
+QString VerticalTabsPlugin::theme() const
+{
+ return m_theme;
+}
+
+void VerticalTabsPlugin::setTheme(const QString &theme)
+{
+ if (theme.isEmpty()) {
+ return;
+ }
+
+ // Don't check if same to allow live reloading stylesheet
+
+ m_theme = theme;
+ loadStyleSheet(m_theme);
+
+ QSettings settings(m_settingsPath, QSettings::IniFormat);
+ settings.setValue(QSL("VerticalTabs/Theme"), m_theme);
+}
+
+QString VerticalTabsPlugin::styleSheet() const
+{
+ return m_styleSheet;
+}
+
void VerticalTabsPlugin::mainWindowCreated(BrowserWindow *window)
{
if (window->sideBarManager()->activeSideBar().isEmpty()) {
@@ -176,3 +203,16 @@ void VerticalTabsPlugin::setWebTabBehavior(AddChildBehavior behavior)
{
WebTab::setAddChildBehavior(behavior == AppendChild ? WebTab::AppendChild : WebTab::PrependChild);
}
+
+void VerticalTabsPlugin::loadStyleSheet(const QString &theme)
+{
+ QFile file(theme);
+ if (!file.open(QFile::ReadOnly)) {
+ qWarning() << "Failed to open stylesheet file" << theme;
+ file.setFileName(QSL(":verticaltabs/data/themes/default.css"));
+ file.open(QFile::ReadOnly);
+ }
+
+ m_styleSheet = QString::fromUtf8(file.readAll());
+ emit styleSheetChanged(m_styleSheet);
+}
diff --git a/src/plugins/VerticalTabs/verticaltabsplugin.h b/src/plugins/VerticalTabs/verticaltabsplugin.h
index e72504513..fda6d2590 100644
--- a/src/plugins/VerticalTabs/verticaltabsplugin.h
+++ b/src/plugins/VerticalTabs/verticaltabsplugin.h
@@ -58,17 +58,26 @@ public:
AddChildBehavior addChildBehavior() const;
void setAddChildBehavior(AddChildBehavior behavior);
+ QString theme() const;
+ void setTheme(const QString &theme);
+
+ QString styleSheet() const;
+
signals:
void viewTypeChanged(ViewType type);
+ void styleSheetChanged(const QString &styleSheet);
private:
void mainWindowCreated(BrowserWindow *window);
void setTabBarVisible(bool visible);
void setWebTabBehavior(AddChildBehavior behavior);
+ void loadStyleSheet(const QString &theme);
QString m_settingsPath;
VerticalTabsController *m_controller = nullptr;
ViewType m_viewType = TabListView;
bool m_replaceTabBar = false;
AddChildBehavior m_addChildBehavior = AppendChild;
+ QString m_theme;
+ QString m_styleSheet;
};
diff --git a/src/plugins/VerticalTabs/verticaltabssettings.cpp b/src/plugins/VerticalTabs/verticaltabssettings.cpp
index 653d0ce82..7dacb6ac2 100644
--- a/src/plugins/VerticalTabs/verticaltabssettings.cpp
+++ b/src/plugins/VerticalTabs/verticaltabssettings.cpp
@@ -19,6 +19,9 @@
#include "ui_verticaltabssettings.h"
#include "verticaltabsplugin.h"
+#include
+#include
+
VerticalTabsSettings::VerticalTabsSettings(VerticalTabsPlugin *plugin, QWidget *parent)
: QDialog(parent)
, ui(new Ui::VerticalTabsSettings)
@@ -33,11 +36,15 @@ VerticalTabsSettings::VerticalTabsSettings(VerticalTabsPlugin *plugin, QWidget *
ui->prependChild->setChecked(m_plugin->addChildBehavior() == VerticalTabsPlugin::PrependChild);
ui->replaceTabBar->setChecked(m_plugin->replaceTabBar());
+ loadThemes();
+
+ connect(ui->theme, SIGNAL(activated(int)), this, SLOT(themeValueChanged(int)));
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, [this]() {
m_plugin->setViewType(ui->tabListView->isChecked() ? VerticalTabsPlugin::TabListView : VerticalTabsPlugin::TabTreeView);
m_plugin->setAddChildBehavior(ui->appendChild->isChecked() ? VerticalTabsPlugin::AppendChild : VerticalTabsPlugin::PrependChild);
m_plugin->setReplaceTabBar(ui->replaceTabBar->isChecked());
+ m_plugin->setTheme(ui->theme->currentData().toString());
accept();
});
}
@@ -46,3 +53,38 @@ VerticalTabsSettings::~VerticalTabsSettings()
{
delete ui;
}
+
+void VerticalTabsSettings::themeValueChanged(int index)
+{
+ const int customIndex = ui->theme->count() - 1;
+ if (index == customIndex) {
+ const QString path = QFileDialog::getOpenFileName(this, tr("Theme file"), QDir::homePath(), {QSL("*.css")});
+ if (path.isEmpty()) {
+ loadThemes();
+ } else {
+ ui->theme->setToolTip(path);
+ ui->theme->setItemData(customIndex, path);
+ }
+ } else {
+ ui->theme->setToolTip(QString());
+ }
+}
+
+void VerticalTabsSettings::loadThemes()
+{
+ ui->theme->clear();
+ bool found = false;
+ const auto files = QDir(QSL(":verticaltabs/data/themes")).entryInfoList({QSL("*.css")});
+ for (const QFileInfo &file : files) {
+ ui->theme->addItem(file.baseName(), file.absoluteFilePath());
+ if (file.absoluteFilePath() == m_plugin->theme()) {
+ ui->theme->setCurrentIndex(ui->theme->count() - 1);
+ found = true;
+ }
+ }
+ ui->theme->setToolTip(m_plugin->theme());
+ ui->theme->addItem(tr("Custom..."), found ? QString() : m_plugin->theme());
+ if (!found) {
+ ui->theme->setCurrentIndex(ui->theme->count() - 1);
+ }
+}
diff --git a/src/plugins/VerticalTabs/verticaltabssettings.h b/src/plugins/VerticalTabs/verticaltabssettings.h
index f7d01411c..88a844847 100644
--- a/src/plugins/VerticalTabs/verticaltabssettings.h
+++ b/src/plugins/VerticalTabs/verticaltabssettings.h
@@ -32,7 +32,12 @@ public:
explicit VerticalTabsSettings(VerticalTabsPlugin *plugin, QWidget *parent = nullptr);
~VerticalTabsSettings();
+private slots:
+ void themeValueChanged(int index);
+
private:
+ void loadThemes();
+
Ui::VerticalTabsSettings *ui;
VerticalTabsPlugin *m_plugin;
};
diff --git a/src/plugins/VerticalTabs/verticaltabssettings.ui b/src/plugins/VerticalTabs/verticaltabssettings.ui
index e31076c62..cddb167a6 100644
--- a/src/plugins/VerticalTabs/verticaltabssettings.ui
+++ b/src/plugins/VerticalTabs/verticaltabssettings.ui
@@ -7,7 +7,7 @@
0
0
460
- 317
+ 344
@@ -57,13 +57,23 @@
+ -
+
+
+ Theme:
+
+
+
+ -
+
+
-
- Use as replacement for main TabBar.
+ Use as replacement for main tab bar