// Copyright (C) 2023 Tasuku Suzuki // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "utils_global.h" #include "fancylineedit.h" #include "layoutbuilder.h" #include "stylehelper.h" #include "theme/theme.h" #include #include #include namespace Utils { class QTCREATOR_UTILS_EXPORT TextFormat { public: QColor color() const; QFont font(bool underlined = false) const; int lineHeight() const; const Theme::Color themeColor; const StyleHelper::UiElement uiElement; const int drawTextFlags = Qt::AlignLeft | Qt::AlignBottom | Qt::TextDontClip | Qt::TextShowMnemonic; }; QTCREATOR_UTILS_EXPORT void applyTf(QLabel *label, const TextFormat &tf, bool singleLine = true); class QTCREATOR_UTILS_EXPORT QtcButton : public QAbstractButton { Q_OBJECT // Needed for the Q_ENUM(Role) to work public: enum Role { LargePrimary, LargeSecondary, LargeTertiary, SmallPrimary, SmallSecondary, SmallTertiary, SmallList, SmallLink, Tag, }; Q_ENUM(Role) explicit QtcButton(const QString &text, Role role, QWidget *parent = nullptr); QSize minimumSizeHint() const override; void setPixmap(const QPixmap &newPixmap); void setRole(Role role); protected: void paintEvent(QPaintEvent *event) override; private: void updateMargins(); Role m_role = LargePrimary; QPixmap m_pixmap; }; class QTCREATOR_UTILS_EXPORT QtcLabel : public QLabel { Q_OBJECT // Needed for the Q_ENUM(Role) to work public: enum Role { Primary, Secondary, }; Q_ENUM(Role) explicit QtcLabel(const QString &text, Role role, QWidget *parent = nullptr); void setRole(Role role); }; class QTCREATOR_UTILS_EXPORT QtcSearchBox : public Utils::FancyLineEdit { public: explicit QtcSearchBox(QWidget *parent = nullptr); QSize minimumSizeHint() const override; protected: void paintEvent(QPaintEvent *event) override; void enterEvent(QEnterEvent *event) override; void leaveEvent(QEvent *event) override; }; class QTCREATOR_UTILS_EXPORT QtcComboBox : public QComboBox { public: explicit QtcComboBox(QWidget *parent = nullptr); QSize sizeHint() const override; protected: void paintEvent(QPaintEvent *event) override; protected: void enterEvent(QEnterEvent *event) override; void leaveEvent(QEvent *event) override; }; class QTCREATOR_UTILS_EXPORT QtcSwitch : public QAbstractButton { public: explicit QtcSwitch(const QString &text, QWidget *parent = nullptr); QSize sizeHint() const override; QSize minimumSizeHint() const override; protected: void paintEvent(QPaintEvent *event) override; }; class QTCREATOR_UTILS_EXPORT QtcIconButton : public QAbstractButton { public: QtcIconButton(QWidget *parent = nullptr); void paintEvent(QPaintEvent *e) override; void enterEvent(QEnterEvent *e) override; void leaveEvent(QEvent *e) override; QSize sizeHint() const override; private: bool m_containsMouse{false}; }; class QTCREATOR_UTILS_EXPORT QtcRectangleWidget : public QWidget { public: QtcRectangleWidget(QWidget *parent = nullptr); QSize sizeHint() const override; int radius() const; void setRadius(int radius); QBrush fillBrush() const; void setFillBrush(const QBrush &brush); void setStrokePen(QPen pen); QPen strokePen() const; protected: void paintEvent(QPaintEvent *event) override; private: int m_radius{10}; QBrush m_fillBrush{Qt::black}; QPen m_strokePen{Qt::NoPen}; }; class CachedImage; class QTCREATOR_UTILS_EXPORT QtcImage : public QWidget { public: QtcImage(QWidget *parent = nullptr); void setUrl(const QString &url); void setRadius(int radius); int radius() const; void paintEvent(QPaintEvent *event) override; QSize sizeForWidth(int width) const; QSize sizeHint() const override; int heightForWidth(int width) const override; private: void setPixmap(const QPixmap &px); private: CachedImage *m_cachedImage = nullptr; QPixmap m_pixmap; int m_radius = 0; }; class QTCREATOR_UTILS_EXPORT QtcTabBar : public QTabBar { public: QtcTabBar(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; bool event(QEvent *event) override; QSize minimumTabSizeHint(int index) const override; }; namespace QtcWidgets { class QTCREATOR_UTILS_EXPORT Label : public Layouting::Widget { public: using Implementation = QtcLabel; using I = Building::BuilderItem