diff options
| -rw-r--r-- | src/dolphintabbar.cpp | 42 | ||||
| -rw-r--r-- | src/dolphintabbar.h | 3 | ||||
| -rw-r--r-- | src/settings/dolphin_generalsettings.kcfg | 9 | ||||
| -rw-r--r-- | src/settings/interface/folderstabssettingspage.cpp | 18 | ||||
| -rw-r--r-- | src/settings/interface/folderstabssettingspage.h | 3 |
5 files changed, 74 insertions, 1 deletions
diff --git a/src/dolphintabbar.cpp b/src/dolphintabbar.cpp index 4df25263f..b2a305a27 100644 --- a/src/dolphintabbar.cpp +++ b/src/dolphintabbar.cpp @@ -5,7 +5,7 @@ */ #include "dolphintabbar.h" - +#include "dolphin_generalsettings.h" #include <KLocalizedString> #include <QDragEnterEvent> @@ -53,6 +53,34 @@ DolphinTabBar::DolphinTabBar(QWidget *parent) m_autoActivationTimer->setSingleShot(true); m_autoActivationTimer->setInterval(800); connect(m_autoActivationTimer, &QTimer::timeout, this, &DolphinTabBar::slotAutoActivationTimeout); + connect(GeneralSettings::self(), &GeneralSettings::tabBarChanged, this, &DolphinTabBar::slotTabBarChanged); + + QTimer::singleShot(0, this, &DolphinTabBar::slotTabBarChanged); +} + +QSize DolphinTabBar::tabSizeHint(int index) const +{ + if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize) { + QSize defaultSize = QTabBar::tabSizeHint(index); + defaultSize.setWidth(225); + return defaultSize; + } else if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FullWidth && count() > 0) { + QSize defaultSize = QTabBar::tabSizeHint(index); + defaultSize.setWidth(qMax(25, width() / count())); + return defaultSize; + } + return QTabBar::tabSizeHint(index); +} + +QSize DolphinTabBar::minimumSizeHint() const +{ + QSize s = QTabBar::minimumSizeHint(); + + if (GeneralSettings::tabStyle() != GeneralSettings::EnumTabStyle::FixedSize) { + s.setWidth(0); // allow shrinking + } + + return s; } void DolphinTabBar::dragEnterEvent(QDragEnterEvent *event) @@ -190,6 +218,18 @@ void DolphinTabBar::contextMenuEvent(QContextMenuEvent *event) QTabBar::contextMenuEvent(event); } +void DolphinTabBar::slotTabBarChanged() +{ + if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize) { + setExpanding(false); + setUsesScrollButtons(true); + } else if (GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FullWidth) { + setExpanding(true); + setUsesScrollButtons(false); + } + updateGeometry(); +} + void DolphinTabBar::slotAutoActivationTimeout() { if (m_autoActivationIndex >= 0) { diff --git a/src/dolphintabbar.h b/src/dolphintabbar.h index 1210b974e..54eeea774 100644 --- a/src/dolphintabbar.h +++ b/src/dolphintabbar.h @@ -24,6 +24,8 @@ Q_SIGNALS: void tabRenamed(int index, const QString &label); protected: + QSize tabSizeHint(int index) const override; + QSize minimumSizeHint() const override; void dragEnterEvent(QDragEnterEvent *event) override; void dragLeaveEvent(QDragLeaveEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; @@ -39,6 +41,7 @@ protected: private Q_SLOTS: void slotAutoActivationTimeout(); + void slotTabBarChanged(); private: /** diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg index d515a573d..bb09cbaef 100644 --- a/src/settings/dolphin_generalsettings.kcfg +++ b/src/settings/dolphin_generalsettings.kcfg @@ -52,6 +52,15 @@ <default>true</default> <emit signal="tabBarChanged" /> </entry> + <entry name="TabStyle" type="Enum"> + <label>Tab style</label> + <choices> + <choice name="FullWidth" /> + <choice name="FixedSize" /> + </choices> + <default>0</default> <!--FullWidth --> + <emit signal="tabBarChanged" /> + </entry> <entry name="Version" type="Int"> <label>Internal config version of Dolphin, mainly Used to determine whether an updated version of Dolphin is running, so as to migrate config entries that were removed/renamed ...etc</label> <default>0</default> diff --git a/src/settings/interface/folderstabssettingspage.cpp b/src/settings/interface/folderstabssettingspage.cpp index 5f7cbe76a..547241d0d 100644 --- a/src/settings/interface/folderstabssettingspage.cpp +++ b/src/settings/interface/folderstabssettingspage.cpp @@ -38,6 +38,8 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) , m_rememberOpenedTabsRadioButton(nullptr) , m_alwaysShowTabBar(nullptr) , m_showCloseButtonOnTabs(nullptr) + , m_tabStyleFullWidth(nullptr) + , m_tabStyleFixed(nullptr) , m_openNewTabAfterLastTab(nullptr) , m_openNewTabAfterCurrentTab(nullptr) , m_splitView(nullptr) @@ -124,6 +126,14 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) m_showCloseButtonOnTabs = new QCheckBox(i18nc("@option:check", "Show close button on tabs")); topLayout->addRow(QString(), m_showCloseButtonOnTabs); + m_tabStyleFullWidth = new QRadioButton(i18nc("@option:radio width as in tab width", "Tabs span the available width")); + m_tabStyleFixed = new QRadioButton(i18nc("@option:radio size as in tab size", "Tabs have all the same fixed size")); + QButtonGroup *tabStyleGroup = new QButtonGroup(this); + tabStyleGroup->addButton(m_tabStyleFullWidth); + tabStyleGroup->addButton(m_tabStyleFixed); + topLayout->addRow(i18nc("@title:group", "Tab style: "), m_tabStyleFullWidth); + topLayout->addRow(QString(), m_tabStyleFixed); + m_openNewTabAfterCurrentTab = new QRadioButton(i18nc("option:radio", "After current tab")); m_openNewTabAfterLastTab = new QRadioButton(i18nc("option:radio", "At end of tab bar")); QButtonGroup *tabsBehaviorGroup = new QButtonGroup(this); @@ -177,6 +187,9 @@ FoldersTabsSettingsPage::FoldersTabsSettingsPage(QWidget *parent) connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::changed); + + connect(m_tabStyleFixed, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); + connect(m_tabStyleFullWidth, &QRadioButton::toggled, this, &FoldersTabsSettingsPage::slotSettingsChanged); } FoldersTabsSettingsPage::~FoldersTabsSettingsPage() = default; @@ -222,6 +235,8 @@ void FoldersTabsSettingsPage::applySettings() settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked()); + settings->setTabStyle(m_tabStyleFullWidth->isChecked() ? GeneralSettings::EnumTabStyle::FullWidth : GeneralSettings::EnumTabStyle::FixedSize); + settings->save(); } @@ -305,6 +320,9 @@ void FoldersTabsSettingsPage::loadSettings() m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab()); m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked()); + + m_tabStyleFixed->setChecked(GeneralSettings::tabStyle() == GeneralSettings::EnumTabStyle::FixedSize); + m_tabStyleFullWidth->setChecked(!m_tabStyleFixed->isChecked()); } void FoldersTabsSettingsPage::showSetDefaultDirectoryError() diff --git a/src/settings/interface/folderstabssettingspage.h b/src/settings/interface/folderstabssettingspage.h index 894d69898..54cdceda6 100644 --- a/src/settings/interface/folderstabssettingspage.h +++ b/src/settings/interface/folderstabssettingspage.h @@ -59,6 +59,9 @@ private: QCheckBox* m_alwaysShowTabBar; QCheckBox* m_showCloseButtonOnTabs; + QRadioButton *m_tabStyleFullWidth; + QRadioButton *m_tabStyleFixed; + QRadioButton *m_openNewTabAfterLastTab; QRadioButton *m_openNewTabAfterCurrentTab; |
