| 1209 | } |
| 1210 | |
| 1211 | QWidgetAction* QmitkMultiLabelInspector::CreateOpacityAction() |
| 1212 | { |
| 1213 | auto selectedLabelValues = this->GetSelectedLabels(); |
| 1214 | |
| 1215 | auto relevantLabelValues = !this->GetMultiSelectionMode() || selectedLabelValues.size() <= 1 |
| 1216 | ? this->GetCurrentlyAffactedLabelInstances() |
| 1217 | : selectedLabelValues; |
| 1218 | |
| 1219 | std::vector<mitk::Label*> relevantLabels; |
| 1220 | |
| 1221 | if (!relevantLabelValues.empty()) |
| 1222 | { |
| 1223 | for (auto value : relevantLabelValues) |
| 1224 | { |
| 1225 | auto label = this->m_Segmentation->GetLabel(value); |
| 1226 | if (label.IsNull()) |
| 1227 | mitkThrow() << "Invalid state. Internal model returned a label value that does not exist in segmentation. Invalid value:" << value; |
| 1228 | relevantLabels.emplace_back(label); |
| 1229 | } |
| 1230 | |
| 1231 | auto* opacitySlider = new QSlider; |
| 1232 | opacitySlider->setMinimum(0); |
| 1233 | opacitySlider->setMaximum(100); |
| 1234 | opacitySlider->setOrientation(Qt::Horizontal); |
| 1235 | |
| 1236 | auto opacity = relevantLabels.front()->GetOpacity(); |
| 1237 | opacitySlider->setValue(static_cast<int>(opacity * 100)); |
| 1238 | auto segmentation = m_Segmentation; |
| 1239 | auto guard = &m_LabelHighlightGuard; |
| 1240 | |
| 1241 | auto onChangeLambda = [segmentation, relevantLabels](const int value) |
| 1242 | { |
| 1243 | auto opacity = static_cast<float>(value) / 100.0f; |
| 1244 | for (auto label : relevantLabels) |
| 1245 | { |
| 1246 | label->SetOpacity(opacity); |
| 1247 | segmentation->UpdateLookupTable(label->GetValue()); |
| 1248 | } |
| 1249 | segmentation->GetLookupTable()->Modified(); |
| 1250 | mitk::RenderingManager::GetInstance()->RequestUpdateAll(); |
| 1251 | }; |
| 1252 | QObject::connect(opacitySlider, &QSlider::valueChanged, this, onChangeLambda); |
| 1253 | |
| 1254 | auto onPressedLambda = [guard]() |
| 1255 | { |
| 1256 | guard->SetHighlightedLabels({}); |
| 1257 | }; |
| 1258 | QObject::connect(opacitySlider, &QSlider::sliderPressed, this, onPressedLambda); |
| 1259 | |
| 1260 | auto onReleasedLambda = [relevantLabelValues, guard]() |
| 1261 | { |
| 1262 | guard->SetHighlightedLabels(relevantLabelValues); |
| 1263 | }; |
| 1264 | QObject::connect(opacitySlider, &QSlider::sliderReleased, this, onReleasedLambda); |
| 1265 | |
| 1266 | QLabel* opacityLabel = new QLabel("Opacity: "); |
| 1267 | QVBoxLayout* opacityWidgetLayout = new QVBoxLayout; |
| 1268 | opacityWidgetLayout->setContentsMargins(4, 4, 4, 4); |
no test coverage detected