Mercurial > hg > orthanc-stone
diff Framework/Radiography/RadiographyWidget.h @ 1199:922d2e61aa5d
RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Thu, 28 Nov 2019 18:28:15 +0100 |
parents | 4663f158c748 |
children | 54cbffabdc45 9ee6b28f53e8 |
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyWidget.h Wed Nov 27 17:56:48 2019 +0100 +++ b/Framework/Radiography/RadiographyWidget.h Thu Nov 28 18:28:15 2019 +0100 @@ -71,16 +71,14 @@ void SetScene(boost::shared_ptr<RadiographyScene> scene); + void Select(size_t layer); + void Unselect() { hasSelection_ = false; } - void Select(size_t layer); - - void ClearSelectedLayer(); - - bool SelectMaskLayer(size_t index = 0); + template<typename LayerType> bool SelectLayerByType(size_t index = 0); bool LookupSelectedLayer(size_t& layer); @@ -106,4 +104,27 @@ return interpolation_; } }; + + template<typename LayerType> bool RadiographyWidget::SelectLayerByType(size_t index) + { + std::vector<size_t> layerIndexes; + size_t count = 0; + scene_->GetLayersIndexes(layerIndexes); + + for (size_t i = 0; i < layerIndexes.size(); ++i) + { + const LayerType* typedLayer = dynamic_cast<const LayerType*>(&(scene_->GetLayer(layerIndexes[i]))); + if (typedLayer != NULL) + { + if (count == index) + { + Select(layerIndexes[i]); + return true; + } + count++; + } + } + + return false; + } }