Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkDataNodeColorAction.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 
15 // mitk core
16 #include <mitkRenderingManager.h>
17 
18 // qt
19 #include <QColorDialog>
20 #include <QHBoxLayout>
21 #include <QLabel>
22 
24  : QWidgetAction(parent)
25  , QmitkAbstractDataNodeAction(workbenchPartSite)
26 {
28 }
29 
31  : QWidgetAction(parent)
32  , QmitkAbstractDataNodeAction(berry::IWorkbenchPartSite::Pointer(workbenchPartSite))
33 {
35 }
36 
38 {
39  m_ColorButton = new QPushButton;
40  m_ColorButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
41  connect(m_ColorButton, &QPushButton::clicked, this, &QmitkDataNodeColorAction::OnColorChanged);
42 
43  QLabel* colorLabel = new QLabel(tr("Color: "));
44  colorLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
45  QHBoxLayout* colorWidgetLayout = new QHBoxLayout;
46  colorWidgetLayout->setContentsMargins(4, 4, 4, 4);
47  colorWidgetLayout->addWidget(colorLabel);
48  colorWidgetLayout->addWidget(m_ColorButton);
49 
50  QWidget* colorWidget = new QWidget;
51  colorWidget->setLayout(colorWidgetLayout);
52 
53  setDefaultWidget(colorWidget);
54 
55  connect(this, &QmitkDataNodeColorAction::changed, this, &QmitkDataNodeColorAction::OnActionChanged);
56 }
57 
59 {
61 
62  float rgb[3];
63  if (dataNode->GetColor(rgb, baseRenderer))
64  {
65  QColor color(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);
66  QString styleSheet = QString("background-color: ") + color.name(QColor::HexRgb);
67  m_ColorButton->setAutoFillBackground(true);
68  m_ColorButton->setStyleSheet(styleSheet);
69  }
70 }
71 
72 void QmitkDataNodeColorAction::OnColorChanged()
73 {
74  auto dataNodes = GetSelectedNodes();
75  if (dataNodes.isEmpty())
76  {
77  return;
78  }
79 
81 
82  bool selectedColor = false;
83  QColor newColor;
84 
85  for (auto& dataNode : dataNodes)
86  {
87  if (dataNode.IsNull())
88  {
89  continue;
90  }
91 
92  float rgb[3];
93  if (dataNode->GetColor(rgb, baseRenderer))
94  {
95  if (!selectedColor)
96  {
97  QColor initial(rgb[0] * 255, rgb[1] * 255, rgb[2] * 255);
98  newColor = QColorDialog::getColor(initial, nullptr, QString(tr("Change color")));
99 
100  if (newColor.isValid())
101  {
102  selectedColor = true;
103  }
104  else
105  {
106  return;
107  }
108  }
109 
110  dataNode->SetProperty("color", mitk::ColorProperty::New(newColor.redF(), newColor.greenF(), newColor.blueF()), baseRenderer);
111  if (dataNode->GetProperty("binaryimage.selectedcolor", baseRenderer))
112  {
113  dataNode->SetProperty("binaryimage.selectedcolor", mitk::ColorProperty::New(newColor.redF(), newColor.greenF(), newColor.blueF()), baseRenderer);
114  }
115  }
116  }
117 
118  if (nullptr == baseRenderer)
119  {
121  }
122  else
123  {
124  mitk::RenderingManager::GetInstance()->RequestUpdate(baseRenderer->GetRenderWindow());
125  }
126 }
127 
128 void QmitkDataNodeColorAction::OnActionChanged()
129 {
130  auto dataNode = GetSelectedNode();
131  if (dataNode.IsNull())
132  {
133  return;
134  }
135 
136  InitializeWithDataNode(dataNode);
137 }
mitk::BaseRenderer::Pointer GetBaseRenderer()
Grants access to the base renderer stored for the action. Will return nullptr if renderer was never s...
QList< mitk::DataNode::Pointer > GetSelectedNodes() const
static Pointer New()
QmitkDataNodeColorAction(QWidget *parent, berry::IWorkbenchPartSite::Pointer workbenchPartSite)
void InitializeWithDataNode(const mitk::DataNode *dataNode) override
bool GetColor(float rgb[3], const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="color") const
Convenience access method for color properties (instances of ColorProperty)
static RenderingManager * GetInstance()
mitk::DataNode::Pointer GetSelectedNode() const
void RequestUpdate(vtkRenderWindow *renderWindow)
const float selectedColor[]
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57