/* * Strawberry Music Player * This file was part of Clementine. * Copyright 2018, Vikram Ambrose * Copyright 2018, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Strawberry is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Strawberry. If not, see . * */ #ifndef FANCYTABWIDGET_H #define FANCYTABWIDGET_H #include #include #include #include #include #include #include #include class QMenu; class QActionGroup; class QContextMenuEvent; class QPaintEvent; class QProxyStyle; class TabData; class FancyTabWidget : public QTabWidget { Q_OBJECT public: explicit FancyTabWidget(QWidget *parent = nullptr); ~FancyTabWidget() override; void AddTab(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label); bool EnableTab(QWidget *widget_view); bool DisableTab(QWidget *widget_view); int insertTab(const int idx, QWidget *page, const QIcon &icon, const QString &label); void addBottomWidget(QWidget *widget_view); int IndexOfTab(QWidget *widget); void setBackgroundPixmap(const QPixmap &pixmap); void addSpacer(); void Load(const QString &kSettingsGroup); void SaveSettings(const QString &kSettingsGroup); void ReloadSettings(); // Values are persisted - only add to the end enum class Mode { None = 0, LargeSidebar, SmallSidebar, Tabs, IconOnlyTabs, PlainSidebar }; static const int TabSize_LargeSidebarMinWidth; static const int IconSize_LargeSidebar; static const int IconSize_SmallSidebar; Mode mode() const { return mode_; } int iconsize_smallsidebar() const { return iconsize_smallsidebar_; } int iconsize_largesidebar() const { return iconsize_largesidebar_; } signals: void ModeChanged(FancyTabWidget::Mode mode); void CurrentChanged(int); public slots: void setCurrentIndex(int idx); void SetMode(FancyTabWidget::Mode mode); // Mapper mapped signal needs this convenience function void SetMode(int mode) { SetMode(Mode(mode)); } private slots: void tabBarUpdateGeometry(); void currentTabChanged(int); protected: void paintEvent(QPaintEvent*) override; void contextMenuEvent(QContextMenuEvent *e) override; private: void addMenuItem(QActionGroup *group, const QString &text, Mode mode); QProxyStyle *style_; QPixmap background_pixmap_; QMenu *menu_; Mode mode_; QWidget *bottom_widget_; QHash tabs_; bool bg_color_system_; bool bg_gradient_; QColor bg_color_; int iconsize_smallsidebar_; int iconsize_largesidebar_; }; #endif // FANCYTABWIDGET_H