From 6a92e7601e210861a6a90bd24480f2e9669843ca Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 28 Jun 2023 21:44:47 -0500 Subject: [PATCH] Update collapsible icon styling to use native buttons for the header/title --- .../source/scwx/qt/ui/collapsible_group.cpp | 30 ++++++++---- .../source/scwx/qt/ui/collapsible_group.ui | 47 ++++--------------- 2 files changed, 30 insertions(+), 47 deletions(-) diff --git a/scwx-qt/source/scwx/qt/ui/collapsible_group.cpp b/scwx-qt/source/scwx/qt/ui/collapsible_group.cpp index 5bf3c12e..6207d4c5 100644 --- a/scwx-qt/source/scwx/qt/ui/collapsible_group.cpp +++ b/scwx-qt/source/scwx/qt/ui/collapsible_group.cpp @@ -17,7 +17,17 @@ public: void Initialize(); void SetExpanded(bool expanded); + const QIcon kCollapsedIcon_ { + ":/res/icons/font-awesome-6/square-caret-right-regular.svg"}; + const QIcon kExpandedIcon_ { + ":/res/icons/font-awesome-6/square-caret-down-regular.svg"}; + + const std::map kIcon_ {{false, kCollapsedIcon_}, + {true, kExpandedIcon_}}; + CollapsibleGroup* self_; + + bool expanded_ {true}; }; CollapsibleGroup::CollapsibleGroup(QWidget* parent) : @@ -48,9 +58,9 @@ void CollapsibleGroupImpl::Initialize() { QObject::connect( self_->ui->titleButton, - &QAbstractButton::toggled, + &QAbstractButton::clicked, self_, - [this](bool checked) { SetExpanded(checked); }, + [this]() { SetExpanded(!expanded_); }, Qt::DirectConnection); self_->Expand(); @@ -74,25 +84,25 @@ void CollapsibleGroup::SetTitle(const QString& title) void CollapsibleGroup::Collapse() { // Update the title frame - if (ui->titleButton->isChecked()) - { - ui->titleButton->setChecked(false); - } + p->SetExpanded(false); } void CollapsibleGroup::Expand() { // Update the title frame - if (!ui->titleButton->isChecked()) - { - ui->titleButton->setChecked(true); - } + p->SetExpanded(true); } void CollapsibleGroupImpl::SetExpanded(bool expanded) { + // Update icon + self_->ui->titleButton->setIcon(kIcon_.at(expanded)); + // Update contents visibility self_->ui->contentsFrame->setVisible(expanded); + + // Update internal state + expanded_ = expanded; } } // namespace ui diff --git a/scwx-qt/source/scwx/qt/ui/collapsible_group.ui b/scwx-qt/source/scwx/qt/ui/collapsible_group.ui index f36af2e3..1c7f670e 100644 --- a/scwx-qt/source/scwx/qt/ui/collapsible_group.ui +++ b/scwx-qt/source/scwx/qt/ui/collapsible_group.ui @@ -30,45 +30,18 @@ 0 - - - QFrame::Box + + + text-align: left; - - QFrame::Sunken + + Title + + + + :/res/icons/font-awesome-6/square-caret-right-regular.svg + :/res/icons/font-awesome-6/square-caret-down-regular.svg:/res/icons/font-awesome-6/square-caret-right-regular.svg - - - 1 - - - 1 - - - 1 - - - 1 - - - - - background: transparent; border: none; color: palette(window-text); text-align: left; - - - Title - - - - :/res/icons/font-awesome-6/square-caret-right-regular.svg - :/res/icons/font-awesome-6/square-caret-down-regular.svg:/res/icons/font-awesome-6/square-caret-right-regular.svg - - - true - - - -