From 22880d511b734b6c1b7bc3491f8a7710b4b3ccba Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Fri, 5 Apr 2019 19:10:46 +0200 Subject: [PATCH] #4280 Improve animation progress bar --- ApplicationCode/UserInterface/RiuViewer.cpp | 12 ++- ApplicationCode/UserInterface/RiuViewer.h | 4 +- Fwk/AppFwk/cafUserInterface/CMakeLists.txt | 3 + .../cafQStyledProgressBar.cpp | 81 +++++++++++++++++++ .../cafUserInterface/cafQStyledProgressBar.h | 16 +++- 5 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.cpp diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index b2dfe07f14..7f78135983 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -52,6 +52,7 @@ #include "cafOverlayScalarMapperLegend.h" #include "cafOverlayScaleLegend.h" #include "cafTitledOverlayFrame.h" +#include "cafQStyledProgressBar.h" #include "cvfCamera.h" #include "cvfFont.h" @@ -69,7 +70,6 @@ #endif #include #include -#include #include @@ -107,8 +107,9 @@ RiuViewer::RiuViewer(const QGLFormat& format, QWidget* parent) // Info Text m_infoLabel = new QLabel(); + m_infoLabel->setObjectName("InfoLabel"); m_infoLabel->setFrameShape(QFrame::Box); - m_infoLabel->setFrameShadow(QFrame::Raised); + m_infoLabel->setFrameShadow(QFrame::Plain); m_infoLabel->setMinimumWidth(275); m_showInfoText = true; @@ -128,10 +129,11 @@ RiuViewer::RiuViewer(const QGLFormat& format, QWidget* parent) m_hideZScaleCheckbox = false; // Animation progress bar - m_animationProgress = new QProgressBar(); + m_animationProgress = new caf::QStyledProgressBar("AnimationProgress"); m_animationProgress->setFormat("Time Step: %v/%m"); m_animationProgress->setTextVisible(true); m_animationProgress->setAlignment(Qt::AlignCenter); + m_animationProgress->setObjectName("AnimationProgress"); #if QT_VERSION < 0x050000 m_progressBarStyle = new QCDEStyle(); @@ -1149,10 +1151,12 @@ void RiuViewer::updateOverlayItemsPalette() p.setColor(QPalette::Mid, backgroundFrameColor); m_infoLabel->setPalette(p); - m_animationProgress->setPalette(p); m_histogramWidget->setPalette(p); m_versionInfoLabel->setPalette(p); m_zScaleLabel->setPalette(p); + + QColor progressColor(Qt::green); progressColor.setAlphaF(0.8f); + m_animationProgress->setTextBackgroundAndProgressColor(contrastColor, backgroundColor, backgroundFrameColor, progressColor); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuViewer.h b/ApplicationCode/UserInterface/RiuViewer.h index 37e08fa2c7..91210746a2 100644 --- a/ApplicationCode/UserInterface/RiuViewer.h +++ b/ApplicationCode/UserInterface/RiuViewer.h @@ -42,13 +42,13 @@ class RivWindowEdgeAxesOverlayItem; class QCDEStyle; class QLabel; -class QProgressBar; namespace caf { class OverlayScaleLegend; class TitledOverlayFrame; class PdmUiSelection3dEditorVisualizer; + class QStyledProgressBar; } namespace cvf @@ -170,7 +170,7 @@ private: bool m_showZScaleLabel; bool m_hideZScaleCheckbox; - QProgressBar* m_animationProgress; + caf::QStyledProgressBar* m_animationProgress; bool m_showAnimProgress; RiuSimpleHistogramWidget* m_histogramWidget; bool m_showHistogram; diff --git a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt index 58a6ad9cf0..9fcee4e641 100644 --- a/Fwk/AppFwk/cafUserInterface/CMakeLists.txt +++ b/Fwk/AppFwk/cafUserInterface/CMakeLists.txt @@ -45,6 +45,7 @@ set (MOC_HEADER_FILES cafUiProcess.h QMinimizePanel.h cafShortenedQLabel.h + cafQStyledProgressBar.h cafPdmUiTreeSelectionEditor.h cafPdmUiTreeSelectionQModel.h cafPdmUiFormLayoutObjectEditor.h @@ -152,6 +153,8 @@ set( PROJECT_FILES QMinimizePanel.h cafShortenedQLabel.cpp cafShortenedQLabel.h + cafQStyledProgressBar.cpp + cafQStyledProgressBar.h cafQTreeViewStateSerializer.h cafQTreeViewStateSerializer.cpp cafMemoryInspector.h diff --git a/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.cpp b/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.cpp new file mode 100644 index 0000000000..6ffd40164f --- /dev/null +++ b/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.cpp @@ -0,0 +1,81 @@ +//################################################################################################## +// +// Custom Visualization Core library +// Copyright (C) 2019- Ceetron Solutions AS +// +// This library may be used under the terms of either the GNU General Public License or +// the GNU Lesser General Public License as follows: +// +// GNU General Public License Usage +// This library 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. +// +// This library 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 at <> +// for more details. +// +// GNU Lesser General Public License Usage +// This library is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library 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 Lesser General Public License at <> +// for more details. +// +//################################################################################################## +#include "cafQStyledProgressBar.h" + + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::QStyledProgressBar::QStyledProgressBar(QString objectName, QWidget* parent /*= nullptr*/) + : QProgressBar(parent) +{ + setObjectName(objectName); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void caf::QStyledProgressBar::setTextBackgroundAndProgressColor(QColor textColor, QColor backgroundColor, QColor backgroundFrameColor, QColor progressColor) +{ + QString styleSheetTemplate = + "QProgressBar#%1" + "{" + "color: %2;" + "background-color: %3;" + "border: 1px solid %4;" + "}" + "QProgressBar#%1::chunk" + "{" + "background-color: %5;" + "}"; + QString textColString = colorStringWithAlpha(textColor); + QString bgColString = colorStringWithAlpha(backgroundColor); + QString bgFrameColString = colorStringWithAlpha(backgroundFrameColor); + QString progressColString = colorStringWithAlpha(progressColor); + + QString fullStyleSheet = styleSheetTemplate.arg(objectName()).arg(textColString).arg(bgColString).arg(bgFrameColString).arg(progressColString); + setStyleSheet(fullStyleSheet); + setAttribute(Qt::WA_TranslucentBackground); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString caf::QStyledProgressBar::colorStringWithAlpha(QColor color) +{ + return QString("rgba(%1, %2, %3, %4)").arg(color.red()).arg(color.green()).arg(color.blue()).arg(color.alpha()); +} diff --git a/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.h b/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.h index 2d79d1e2b4..a64b417d5d 100644 --- a/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.h +++ b/Fwk/AppFwk/cafUserInterface/cafQStyledProgressBar.h @@ -35,6 +35,20 @@ //################################################################################################## #pragma once +#include + namespace caf { -class \ No newline at end of file +class QStyledProgressBar : public QProgressBar +{ + Q_OBJECT + +public: + QStyledProgressBar(QString objectName, QWidget* parent = nullptr); + + void setTextBackgroundAndProgressColor(QColor textColor, QColor backgroundColor, QColor backgroundFrameColor, QColor progressColor); + +private: + static QString colorStringWithAlpha(QColor color); +}; +} \ No newline at end of file