diff --git a/Modules/QtWidgets/src/QmitkColoredNodeDescriptor.cpp b/Modules/QtWidgets/src/QmitkColoredNodeDescriptor.cpp index 9fe3b991c4..cd50050370 100644 --- a/Modules/QtWidgets/src/QmitkColoredNodeDescriptor.cpp +++ b/Modules/QtWidgets/src/QmitkColoredNodeDescriptor.cpp @@ -1,72 +1,73 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include #include +#include static QString ConvertRGBTripletToHexColorCode(float rgbTriplet[3]) { return QString("#%1%2%3") .arg(std::max(0, std::min(255, static_cast(rgbTriplet[0] * 255))), 2, 16, QLatin1Char('0')) .arg(std::max(0, std::min(255, static_cast(rgbTriplet[1] * 255))), 2, 16, QLatin1Char('0')) .arg(std::max(0, std::min(255, static_cast(rgbTriplet[2] * 255))), 2, 16, QLatin1Char('0')); } struct QmitkColoredNodeDescriptor::Impl { void CreateCachedIcon(const QString &hexColorCode); QHash IconCache; QString IconTemplate; }; void QmitkColoredNodeDescriptor::Impl::CreateCachedIcon(const QString &hexColorCode) { auto icon = this->IconTemplate; icon.replace(QStringLiteral("#00ff00"), hexColorCode, Qt::CaseInsensitive); this->IconCache[hexColorCode] = QPixmap::fromImage(QImage::fromData(icon.toLatin1())); } QmitkColoredNodeDescriptor::QmitkColoredNodeDescriptor(const QString &className, const QString &pathToIcon, mitk::NodePredicateBase *predicate, QObject *parent) : QmitkNodeDescriptor(className, QStringLiteral(""), predicate, parent), m_Impl(new Impl) { QFile iconTemplateFile(pathToIcon); if (iconTemplateFile.open(QIODevice::ReadOnly)) m_Impl->IconTemplate = iconTemplateFile.readAll(); } QmitkColoredNodeDescriptor::~QmitkColoredNodeDescriptor() { delete m_Impl; } QIcon QmitkColoredNodeDescriptor::GetIcon(const mitk::DataNode *node) const { if (nullptr == node) return QIcon(); float rgbTriplet[] = { 1.0f, 1.0f, 1.0f }; node->GetColor(rgbTriplet); auto hexColorCode = ConvertRGBTripletToHexColorCode(rgbTriplet); if (!m_Impl->IconCache.contains(hexColorCode)) m_Impl->CreateCachedIcon(hexColorCode); return m_Impl->IconCache[hexColorCode]; }