diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c403fb43..8cada0b14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,6 +144,7 @@ find_package(Qt${MAJOR_QT_VERSION} REQUIRED Gui Network Svg + SvgWidgets Concurrent ) if(CHATTERINO_ALLOW_PRIVATE_QT_API) diff --git a/resources/settings/hint.svg b/resources/settings/hint.svg new file mode 100644 index 000000000..46c717242 --- /dev/null +++ b/resources/settings/hint.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fcf4de534..13bf798f4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -935,6 +935,7 @@ target_link_libraries(${LIBRARY_PROJECT} Qt${MAJOR_QT_VERSION}::Gui Qt${MAJOR_QT_VERSION}::Network Qt${MAJOR_QT_VERSION}::Svg + Qt${MAJOR_QT_VERSION}::SvgWidgets Qt${MAJOR_QT_VERSION}::Concurrent LibCommuni::LibCommuni diff --git a/src/widgets/settingspages/SettingWidget.cpp b/src/widgets/settingspages/SettingWidget.cpp index feeba6786..0fb9409af 100644 --- a/src/widgets/settingspages/SettingWidget.cpp +++ b/src/widgets/settingspages/SettingWidget.cpp @@ -19,6 +19,12 @@ #include #include #include +#include +#include +#include +#include + +#include namespace { @@ -33,7 +39,8 @@ const QRegularExpression MAX_TOOLTIP_LINE_LENGTH_REGEX( namespace chatterino { SettingWidget::SettingWidget(const QString &mainKeyword) - : vLayout(new QVBoxLayout(this)) + : tooltipIcon(new QSvgWidget(this)) + , vLayout(new QVBoxLayout(this)) , hLayout(new QHBoxLayout) { this->vLayout->setContentsMargins(0, 0, 0, 0); @@ -42,6 +49,7 @@ SettingWidget::SettingWidget(const QString &mainKeyword) this->vLayout->addLayout(this->hLayout); this->keywords.append(mainKeyword); + this->tooltipIcon->setVisible(false); } SettingWidget *SettingWidget::checkbox(const QString &label, @@ -52,6 +60,8 @@ SettingWidget *SettingWidget::checkbox(const QString &label, auto *check = new SCheckBox(label); widget->hLayout->addWidget(check); + widget->hLayout->addWidget(widget->tooltipIcon); + widget->hLayout->addStretch(1); // update when setting changes setting.connect( @@ -80,6 +90,8 @@ SettingWidget *SettingWidget::inverseCheckbox(const QString &label, auto *check = new SCheckBox(label); widget->hLayout->addWidget(check); + widget->hLayout->addWidget(widget->tooltipIcon); + widget->hLayout->addStretch(1); // update when setting changes setting.connect( @@ -109,6 +121,8 @@ SettingWidget *SettingWidget::customCheckbox( auto *check = new SCheckBox(label); widget->hLayout->addWidget(check); + widget->hLayout->addWidget(widget->tooltipIcon); + widget->hLayout->addStretch(1); check->setChecked(initialValue); @@ -147,6 +161,7 @@ SettingWidget *SettingWidget::intInput(const QString &label, } widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(input); @@ -192,6 +207,7 @@ SettingWidget *SettingWidget::dropdown(const QString &label, widget->label = lbl; widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(combo); @@ -265,6 +281,7 @@ SettingWidget *SettingWidget::dropdown(const QString &label, widget->label = lbl; widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(combo); @@ -343,6 +360,7 @@ SettingWidget *SettingWidget::dropdown( widget->label = lbl; widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(combo); @@ -395,6 +413,7 @@ SettingWidget *SettingWidget::colorButton(const QString &label, auto *colorButton = new ColorButton(color); widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(colorButton); @@ -442,6 +461,7 @@ SettingWidget *SettingWidget::lineEdit(const QString &label, } widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addWidget(edit); // Update the setting when the widget changes. @@ -480,6 +500,7 @@ SettingWidget *SettingWidget::fontButton(const QString &label, auto *button = new SPushButton(currentFont().family()); widget->hLayout->addWidget(lbl); + widget->hLayout->addWidget(widget->tooltipIcon); widget->hLayout->addStretch(1); widget->hLayout->addWidget(button); @@ -519,16 +540,28 @@ SettingWidget *SettingWidget::setTooltip(QString tooltip) tooltip.replace(MAX_TOOLTIP_LINE_LENGTH_REGEX, "\n"); } + int sz = 0; if (this->label != nullptr) { this->label->setToolTip(tooltip); + sz = this->label->sizeHint().height(); } if (this->actionWidget != nullptr) { this->actionWidget->setToolTip(tooltip); + sz = std::max(sz, this->actionWidget->sizeHint().height()); } + this->tooltipIcon->setVisible(true); + this->tooltipIcon->load(u":/settings/hint.svg"_qs); + this->tooltipIcon->setToolTip(tooltip); + auto *r = this->tooltipIcon->renderer(); + auto vb = r->viewBox(); + this->tooltipIcon->setFixedHeight(sz); + this->tooltipIcon->setFixedWidth( + int(double(sz) / double(vb.height()) * double(vb.width()))); + this->keywords.append(tooltip); return this; diff --git a/src/widgets/settingspages/SettingWidget.hpp b/src/widgets/settingspages/SettingWidget.hpp index 0ed1d2ab3..3957ac5a2 100644 --- a/src/widgets/settingspages/SettingWidget.hpp +++ b/src/widgets/settingspages/SettingWidget.hpp @@ -25,6 +25,7 @@ class QFormLayout; class QLayout; +class QSvgWidget; namespace chatterino { @@ -135,6 +136,7 @@ private: QWidget *label = nullptr; QWidget *actionWidget = nullptr; + QSvgWidget *tooltipIcon; QVBoxLayout *vLayout; QHBoxLayout *hLayout;