From c61e3c7f3621528506d47c79ed370f0ab7e0568c Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Wed, 4 Sep 2024 17:50:42 +0200 Subject: [PATCH] CircularProgressBar removed, using QskProgressRing instead --- .../gallery/progressbar/ProgressBarPage.cpp | 1 + examples/iotdashboard/CMakeLists.txt | 2 - examples/iotdashboard/CircularProgressBar.cpp | 19 ------- examples/iotdashboard/CircularProgressBar.h | 21 -------- .../CircularProgressBarSkinlet.cpp | 24 --------- .../iotdashboard/CircularProgressBarSkinlet.h | 23 --------- examples/iotdashboard/EnergyMeter.cpp | 8 +-- examples/iotdashboard/Skin.cpp | 11 ++-- examples/iotdashboard/StorageMeter.cpp | 51 ++++++++++--------- examples/iotdashboard/StorageMeter.h | 18 ++++--- src/controls/QskProgressRing.cpp | 2 + src/controls/QskProgressRingSkinlet.cpp | 17 +------ 12 files changed, 50 insertions(+), 147 deletions(-) delete mode 100644 examples/iotdashboard/CircularProgressBar.cpp delete mode 100644 examples/iotdashboard/CircularProgressBar.h delete mode 100644 examples/iotdashboard/CircularProgressBarSkinlet.cpp delete mode 100644 examples/iotdashboard/CircularProgressBarSkinlet.h diff --git a/examples/gallery/progressbar/ProgressBarPage.cpp b/examples/gallery/progressbar/ProgressBarPage.cpp index fe0e7b07..3517eb91 100644 --- a/examples/gallery/progressbar/ProgressBarPage.cpp +++ b/examples/gallery/progressbar/ProgressBarPage.cpp @@ -159,6 +159,7 @@ void ProgressBarPage::populate() { auto* ring = new QskProgressRing( determinateRingsHBox ); ring->setSize( size ); + ring->setLayoutAlignmentHint( Qt::AlignCenter ); QQuickItem* parentItem; diff --git a/examples/iotdashboard/CMakeLists.txt b/examples/iotdashboard/CMakeLists.txt index 183c0112..8a85943e 100644 --- a/examples/iotdashboard/CMakeLists.txt +++ b/examples/iotdashboard/CMakeLists.txt @@ -6,8 +6,6 @@ set(SOURCES Box.h Box.cpp BoxWithButtons.h BoxWithButtons.cpp - CircularProgressBar.h CircularProgressBar.cpp - CircularProgressBarSkinlet.h CircularProgressBarSkinlet.cpp Diagram.h Diagram.cpp DiagramSkinlet.h DiagramSkinlet.cpp EnergyMeter.h EnergyMeter.cpp diff --git a/examples/iotdashboard/CircularProgressBar.cpp b/examples/iotdashboard/CircularProgressBar.cpp deleted file mode 100644 index 8bb873ab..00000000 --- a/examples/iotdashboard/CircularProgressBar.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2021 Edelhirsch Software GmbH - * SPDX-License-Identifier: BSD-3-Clause - *****************************************************************************/ - -#include "CircularProgressBar.h" - -CircularProgressBar::CircularProgressBar( qreal min, qreal max, QQuickItem* parent ) - : Inherited( min, max, parent ) -{ - initSizePolicy( QskSizePolicy::MinimumExpanding, QskSizePolicy::MinimumExpanding ); -} - -CircularProgressBar::CircularProgressBar( QQuickItem* parent ) - : CircularProgressBar( 0.0, 100.0, parent ) -{ -} - -#include "moc_CircularProgressBar.cpp" diff --git a/examples/iotdashboard/CircularProgressBar.h b/examples/iotdashboard/CircularProgressBar.h deleted file mode 100644 index 810a18e5..00000000 --- a/examples/iotdashboard/CircularProgressBar.h +++ /dev/null @@ -1,21 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2021 Edelhirsch Software GmbH - * SPDX-License-Identifier: BSD-3-Clause - *****************************************************************************/ - -#pragma once - -#include - -class CircularProgressBar : public QskProgressRing -{ - Q_OBJECT - - using Inherited = QskProgressRing; - - public: - CircularProgressBar( qreal min, qreal max, QQuickItem* parent = nullptr ); - CircularProgressBar( QQuickItem* parent = nullptr ); - - ~CircularProgressBar() override = default; -}; diff --git a/examples/iotdashboard/CircularProgressBarSkinlet.cpp b/examples/iotdashboard/CircularProgressBarSkinlet.cpp deleted file mode 100644 index 4f8eafe0..00000000 --- a/examples/iotdashboard/CircularProgressBarSkinlet.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2021 Edelhirsch Software GmbH - * SPDX-License-Identifier: BSD-3-Clause - *****************************************************************************/ - -#include "CircularProgressBarSkinlet.h" -#include - -CircularProgressBarSkinlet::CircularProgressBarSkinlet( QskSkin* skin ) - : Inherited( skin ) -{ -} - -CircularProgressBarSkinlet::~CircularProgressBarSkinlet() -{ -} - -QRectF CircularProgressBarSkinlet::subControlRect( - const QskSkinnable*, const QRectF& contentsRect, QskAspect::Subcontrol ) const -{ - return contentsRect; -} - -#include "moc_CircularProgressBarSkinlet.cpp" diff --git a/examples/iotdashboard/CircularProgressBarSkinlet.h b/examples/iotdashboard/CircularProgressBarSkinlet.h deleted file mode 100644 index 92434b85..00000000 --- a/examples/iotdashboard/CircularProgressBarSkinlet.h +++ /dev/null @@ -1,23 +0,0 @@ -/****************************************************************************** - * Copyright (C) 2021 Edelhirsch Software GmbH - * SPDX-License-Identifier: BSD-3-Clause - *****************************************************************************/ - -#pragma once - -#include - -class CircularProgressBarSkinlet : public QskProgressRingSkinlet -{ - Q_GADGET - - using Inherited = QskProgressRingSkinlet; - - public: - - Q_INVOKABLE CircularProgressBarSkinlet( QskSkin* = nullptr ); - ~CircularProgressBarSkinlet() override; - - QRectF subControlRect( const QskSkinnable*, - const QRectF&, QskAspect::Subcontrol ) const override; -}; diff --git a/examples/iotdashboard/EnergyMeter.cpp b/examples/iotdashboard/EnergyMeter.cpp index dae877ba..9f00a0ad 100644 --- a/examples/iotdashboard/EnergyMeter.cpp +++ b/examples/iotdashboard/EnergyMeter.cpp @@ -4,8 +4,8 @@ *****************************************************************************/ #include "EnergyMeter.h" -#include "CircularProgressBar.h" +#include #include #include @@ -35,8 +35,10 @@ EnergyMeter::EnergyMeter( const QColor& textColor, { setAutoLayoutChildren( true ); - auto valueBar = new CircularProgressBar( this ); - valueBar->setGradientHint( CircularProgressBar::Fill, gradient ); + auto valueBar = new QskProgressRing( this ); + valueBar->setSizePolicy( + QskSizePolicy::MinimumExpanding, QskSizePolicy::Constrained ); + valueBar->setFillGradient( gradient ); valueBar->setValue( value ); auto valueLabel = new ValueLabel( this ); diff --git a/examples/iotdashboard/Skin.cpp b/examples/iotdashboard/Skin.cpp index b6f8cd8f..8f7a23f1 100644 --- a/examples/iotdashboard/Skin.cpp +++ b/examples/iotdashboard/Skin.cpp @@ -7,8 +7,6 @@ #include "Box.h" #include "BoxWithButtons.h" -#include "CircularProgressBar.h" -#include "CircularProgressBarSkinlet.h" #include "DashboardPage.h" #include "Diagram.h" #include "DiagramSkinlet.h" @@ -56,7 +54,6 @@ Skin::Skin( QObject* parent ) { setObjectName( "iot" ); - declareSkinlet< CircularProgressBar, CircularProgressBarSkinlet >(); declareSkinlet< Diagram, DiagramSkinlet >(); declareSkinlet< LightDisplay, LightDisplaySkinlet >(); declareSkinlet< StorageBar, StorageBarSkinlet >(); @@ -127,10 +124,10 @@ void Skin::initHints() ed.setGradient( TopBarItem::Item4, 0xff6776ff, 0xff6100ff ); // the bar gradient is defined through the top bar items above - ed.setArcMetrics( CircularProgressBar::Groove, 90, -360, 8.53 ); + ed.setArcMetrics( QskProgressRing::Groove, 90, -360, 8.53 ); // the span angle will be set in the progress bar, we just give a dummy // value here: - ed.setArcMetrics( CircularProgressBar::Fill, 90, -360, 8.53 ); + ed.setArcMetrics( QskProgressRing::Fill, 90, -360, 8.53 ); ed.setFontRole( TimeTitleLabel::Text, { QskFontRole::Caption, QskFontRole::High } ); @@ -282,8 +279,8 @@ void Skin::initHints() ed.setColor( QskTextLabel::Text, palette.text ); ed.setColor( UsageDiagramBox::DayText, palette.text ); - ed.setMetric( CircularProgressBar::Groove | QskAspect::Border, 2 ); - ed.setColor( CircularProgressBar::Groove | QskAspect::Border, + ed.setMetric( QskProgressRing::Groove | QskAspect::Border, 2 ); + ed.setColor( QskProgressRing::Groove | QskAspect::Border, palette.circularProgressBarGroove ); // storage bar diff --git a/examples/iotdashboard/StorageMeter.cpp b/examples/iotdashboard/StorageMeter.cpp index 38b9c3fd..38233cb7 100644 --- a/examples/iotdashboard/StorageMeter.cpp +++ b/examples/iotdashboard/StorageMeter.cpp @@ -4,44 +4,47 @@ *****************************************************************************/ #include "StorageMeter.h" -#include "CircularProgressBar.h" + #include #include QSK_SUBCONTROL( StorageMeter, Status ) -namespace -{ - inline QString make_text( const QLocale& locale, const qreal value ) - { - return locale.toString( static_cast< int >( value ) ) + " " + locale.percent(); - } -} - StorageMeter::StorageMeter( QQuickItem* parent ) noexcept - : CircularProgressBar( parent ) - , label( new QskTextLabel( this ) ) + : QskProgressRing( parent ) { setAutoLayoutChildren( true ); - setSizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Constrained ); + initSizePolicy( QskSizePolicy::MinimumExpanding, QskSizePolicy::Constrained ); - label->setText( make_text( locale(), value() ) ); - label->setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); - label->setLayoutAlignmentHint( Qt::AlignCenter ); - label->setFontRole( QskFontRole::Caption ); + m_label = new QskTextLabel( this ); + m_label->setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); + m_label->setLayoutAlignmentHint( Qt::AlignCenter ); + m_label->setFontRole( QskFontRole::Caption ); + + connect( this, &QskProgressRing::valueChanged, + this, &StorageMeter::updateMeter ); + + updateMeter( value() ); } -void StorageMeter::setValue( const qreal value ) +void StorageMeter::updateMeter( const qreal value ) { - const auto gradient = gradientHint( StorageMeter::Status ); - const auto color = gradient.extracted( value / 100.0, value / 100.0 ).startColor(); - setGradientHint( StorageMeter::Fill, { color, color.lighter() } ); - CircularProgressBar::setValue( value ); - label->setTextColor( color ); - label->setText( make_text( locale(), value ) ); + const auto color = qskInterpolatedColorAt( + gradientHint( Status ).stops(), value / 100.0 ); + + setFillGradient( { color, color.lighter() } ); + + m_label->setTextColor( color ); + + const auto locale = this->locale(); + const auto text = locale.toString( static_cast< int >( value ) ) + + " " + locale.percent(); + + m_label->setText( text ); } -QSizeF StorageMeter::contentsSizeHint( Qt::SizeHint which, const QSizeF& constraint ) const +QSizeF StorageMeter::contentsSizeHint( + Qt::SizeHint which, const QSizeF& constraint ) const { if ( which != Qt::PreferredSize ) return QSizeF(); diff --git a/examples/iotdashboard/StorageMeter.h b/examples/iotdashboard/StorageMeter.h index 16a8f454..c6a6af42 100644 --- a/examples/iotdashboard/StorageMeter.h +++ b/examples/iotdashboard/StorageMeter.h @@ -5,18 +5,20 @@ #pragma once -#include "CircularProgressBar.h" -#include +#include -class StorageMeter final : public CircularProgressBar +class QskTextLabel; + +class StorageMeter final : public QskProgressRing { public: QSK_SUBCONTROLS( Status ) - explicit StorageMeter( QQuickItem* parent = nullptr ) noexcept; - public Q_SLOTS: - void setValue( qreal value ); + + StorageMeter( QQuickItem* parent = nullptr ) noexcept; private: - QSizeF contentsSizeHint( Qt::SizeHint which, const QSizeF& constraint ) const override; - class QskTextLabel* label = nullptr; + void updateMeter( qreal value ); + QSizeF contentsSizeHint( Qt::SizeHint, const QSizeF& ) const override; + + QskTextLabel* m_label = nullptr; }; diff --git a/src/controls/QskProgressRing.cpp b/src/controls/QskProgressRing.cpp index dcc1d8d6..a87cb707 100644 --- a/src/controls/QskProgressRing.cpp +++ b/src/controls/QskProgressRing.cpp @@ -20,6 +20,8 @@ QskProgressRing::QskProgressRing( qreal min, qreal max, QQuickItem* parent ) : Inherited( min, max, parent ) , m_data( new PrivateData ) { + initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); + m_data->size = NormalSize; setSubcontrolProxy( Inherited::Groove, Groove ); diff --git a/src/controls/QskProgressRingSkinlet.cpp b/src/controls/QskProgressRingSkinlet.cpp index ce611eef..04f8e427 100644 --- a/src/controls/QskProgressRingSkinlet.cpp +++ b/src/controls/QskProgressRingSkinlet.cpp @@ -24,22 +24,7 @@ QRectF QskProgressRingSkinlet::subControlRect( QskAspect::Subcontrol subControl ) const { if( subControl == Q::Groove || subControl == Q::Fill ) - { - const auto ring = static_cast< const Q* >( skinnable ); - - const auto size = ring->strutSizeHint( Q::Fill ); - - auto rect = contentsRect; - if( ring->layoutMirroring() ) - rect.setLeft( rect.right() - size.width() ); - else - rect.setWidth( size.width() ); - - rect.setTop( rect.top() + 0.5 * ( rect.height() - size.height() ) ); - rect.setHeight( size.height() ); - - return rect; - } + return contentsRect; return Inherited::subControlRect( skinnable, contentsRect, subControl ); }