diff --git a/Modules/QtWidgets/include/QmitkMemoryUsageIndicatorView.h b/Modules/QtWidgets/include/QmitkMemoryUsageIndicatorView.h index b049ca84b1..9eb9a0514c 100644 --- a/Modules/QtWidgets/include/QmitkMemoryUsageIndicatorView.h +++ b/Modules/QtWidgets/include/QmitkMemoryUsageIndicatorView.h @@ -1,48 +1,49 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ -#ifndef QMITKMEMORYUSAGEINDICATORVIEW_WIDGET -#define QMITKMEMORYUSAGEINDICATORVIEW_WIDGET +#ifndef QmitkMemoryUsageIndicatorView_h +#define QmitkMemoryUsageIndicatorView_h #include -#include "ui_QmitkMemoryUsageIndicator.h" #include -#include + +#include +#include + +namespace Ui +{ + class QmitkMemoryUsageIndicator; +} /// \ingroup QmitkModule -class MITKQTWIDGETS_EXPORT QmitkMemoryUsageIndicatorView : public QWidget, public Ui::QmitkMemoryUsageIndicator +class MITKQTWIDGETS_EXPORT QmitkMemoryUsageIndicatorView : public QWidget { Q_OBJECT public: - /// constructor - QmitkMemoryUsageIndicatorView(QWidget *parent = nullptr, Qt::WindowFlags f = nullptr); - - /// destructor + QmitkMemoryUsageIndicatorView(QWidget* parent = nullptr); ~QmitkMemoryUsageIndicatorView() override; -protected slots: +private: void UpdateMemoryUsage(); - -protected: std::string FormatMemorySize(size_t size); std::string FormatPercentage(double val); std::string GetMemoryDescription(size_t processSize, float percentage); - QPixmap m_LEDGreen; - QPixmap m_LEDYellow; - QPixmap m_LEDOrange; - QPixmap m_LEDRed; - char m_PreviousState; + static std::array, 4> s_States; + + Ui::QmitkMemoryUsageIndicator* m_Ui; + size_t m_PreviousState; }; -#endif // QMITKMEMORYUSAGEINDICATORVIEW_WIDGET + +#endif diff --git a/Modules/QtWidgets/src/QmitkMemoryUsageIndicator.ui b/Modules/QtWidgets/src/QmitkMemoryUsageIndicator.ui index 8af3c1c083..1c34f9572c 100644 --- a/Modules/QtWidgets/src/QmitkMemoryUsageIndicator.ui +++ b/Modules/QtWidgets/src/QmitkMemoryUsageIndicator.ui @@ -1,93 +1,90 @@ MITKQTWIDGETS_EXPORT QmitkMemoryUsageIndicator 0 0 124 22 0 0 32000 32000 Form1 Memory usage in % of physical memory 0 - + + 0 + + + 0 + + + 0 + + 0 - + 0 0 000,00 % - - Qt::AutoText - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true - + 20 20 - - 0 - - - QmitkApplicationBase/image0 - true - - false - mitkCommon.h string qpixmap.h diff --git a/Modules/QtWidgets/src/QmitkMemoryUsageIndicatorView.cpp b/Modules/QtWidgets/src/QmitkMemoryUsageIndicatorView.cpp index e5f61ab68d..8f58e4fc00 100644 --- a/Modules/QtWidgets/src/QmitkMemoryUsageIndicatorView.cpp +++ b/Modules/QtWidgets/src/QmitkMemoryUsageIndicatorView.cpp @@ -1,146 +1,131 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ /**************************************************************************** ** ui.h extension file, included from the uic-generated form implementation. ** ** If you want to add, delete, or rename functions or slots, use ** Qt Designer to update this file, preserving your code. ** ** You should not define a constructor or destructor in this file. ** Instead, write your code in functions called init() and destroy(). ** These will automatically be called by the form's constructor and ** destructor. *****************************************************************************/ -#include "QmitkMemoryUsageIndicatorView.h" -#include +#include -#include -#include -#include -#include -#include +#include #include -#include -#include -#include "QmitkMemoryUsageIndicatorImagesGreen.xpm" -#include "QmitkMemoryUsageIndicatorImagesOrange.xpm" -#include "QmitkMemoryUsageIndicatorImagesRed.xpm" -#include "QmitkMemoryUsageIndicatorImagesYellow.xpm" +#include + +#include +#include +#include +#include + +#include -QmitkMemoryUsageIndicatorView::QmitkMemoryUsageIndicatorView(QWidget * /*parent*/, Qt::WindowFlags /*f*/) +std::array, 4> QmitkMemoryUsageIndicatorView::s_States = { + std::make_pair(0.0f, QPixmap(QmitkMemoryUsageIndicatorImagesGreen_xpm)), + std::make_pair(50.0f, QPixmap(QmitkMemoryUsageIndicatorImagesYellow_xpm)), + std::make_pair(65.0f, QPixmap(QmitkMemoryUsageIndicatorImagesOrange_xpm)), + std::make_pair(85.0f, QPixmap(QmitkMemoryUsageIndicatorImagesRed_xpm)) +}; + +QmitkMemoryUsageIndicatorView::QmitkMemoryUsageIndicatorView(QWidget*) + : m_Ui(new Ui::QmitkMemoryUsageIndicator), + m_PreviousState(0) { - this->setupUi(this); + m_Ui->setupUi(this); + m_Ui->led->setPixmap(s_States[0].second); auto timer = new QTimer(this); - QObject::connect(timer, SIGNAL(timeout()), this, SLOT(UpdateMemoryUsage())); + connect(timer, &QTimer::timeout, this, &QmitkMemoryUsageIndicatorView::UpdateMemoryUsage); timer->start(1000); - m_LEDGreen = QPixmap(QmitkMemoryUsageIndicatorImagesGreen_xpm); - m_LEDYellow = QPixmap(QmitkMemoryUsageIndicatorImagesYellow_xpm); - m_LEDOrange = QPixmap(QmitkMemoryUsageIndicatorImagesOrange_xpm); - m_LEDRed = QPixmap(QmitkMemoryUsageIndicatorImagesRed_xpm); - m_LED->setPixmap(m_LEDGreen); - m_PreviousState = 0; } QmitkMemoryUsageIndicatorView::~QmitkMemoryUsageIndicatorView() { } void QmitkMemoryUsageIndicatorView::UpdateMemoryUsage() { size_t processSize = mitk::MemoryUtilities::GetProcessMemoryUsage(); size_t totalSize = mitk::MemoryUtilities::GetTotalSizeOfPhysicalRam(); - float percentage = ((float)processSize / (float)totalSize) * 100.0; - m_Label->setText(GetMemoryDescription(processSize, percentage).c_str()); - if (percentage < 50.0) - { - if (m_PreviousState != 0) - { - m_LED->setPixmap(m_LEDGreen); - m_PreviousState = 0; - m_LED->update(); - } - } - else if (percentage < 65.0) - { - if (m_PreviousState != 1) - { - m_LED->setPixmap(m_LEDYellow); - m_PreviousState = 1; - m_LED->update(); - } - } - else if (percentage < 80.0) - { - if (m_PreviousState != 2) - { - m_LED->setPixmap(m_LEDOrange); - m_PreviousState = 2; - m_LED->update(); - } - } - else + float percentage = static_cast(processSize) / totalSize * 100.0f; + + m_Ui->label->setText(QString::fromStdString(this->GetMemoryDescription(processSize, percentage))); + + for (size_t i = s_States.size() - 1; i >= 0; --i) { - if (m_PreviousState != 3) + if (percentage >= s_States[i].first) { - m_LED->setPixmap(m_LEDRed); - m_PreviousState = 3; - m_LED->update(); + if (m_PreviousState != i) + { + m_Ui->led->setPixmap(s_States[i].second); + m_PreviousState = i; + } + + break; } } } std::string QmitkMemoryUsageIndicatorView::FormatMemorySize(size_t size) { double val = size; - std::string descriptor("B"); - if (val >= 1000.0) + std::string unit; + + if (val >= 1024.0) { val /= 1024.0; - descriptor = "KB"; + unit = "K"; } - if (val >= 1000.0) + + if (val >= 1024.0) { val /= 1024.0; - descriptor = "MB"; + unit = "M"; } - if (val >= 1000.0) + + if (val >= 1024.0) { val /= 1024.0; - descriptor = "GB"; + unit = "G"; } + + unit += "B"; + std::ostringstream str; str.imbue(std::locale::classic()); - str << std::fixed << std::setprecision(2) << val << " " << descriptor; + str << std::fixed << std::setprecision(2) << val << " " << unit; return str.str(); } std::string QmitkMemoryUsageIndicatorView::FormatPercentage(double val) { std::ostringstream str; str.imbue(std::locale::classic()); - str << std::fixed << std::setprecision(2) << val << " " - << "%"; + str << std::fixed << std::setprecision(2) << val << " " << "%"; return str.str(); } std::string QmitkMemoryUsageIndicatorView::GetMemoryDescription(size_t processSize, float percentage) { std::ostringstream str; str.imbue(std::locale::classic()); str << FormatMemorySize(processSize) << " (" << FormatPercentage(percentage) << ")"; return str.str(); }