MCPcopy Create free account
hub / github.com/MITK/MITK / MoveNodeToPosition

Method MoveNodeToPosition

Modules/QtWidgets/src/mitkRenderWindowLayerController.cpp:79–141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77}
78
79bool mitk::RenderWindowLayerController::MoveNodeToPosition(DataNode* dataNode, int newLayer, const BaseRenderer* renderer /*= nullptr*/)
80{
81 if (nullptr == dataNode)
82 {
83 return false;
84 }
85
86 // get the layer stack of the current renderer
87 RenderWindowLayerUtilities::LayerStack stackedLayers = RenderWindowLayerUtilities::GetLayerStack(m_DataStorage, renderer);
88 if (stackedLayers.empty())
89 // do not work with empty layer stack
90 return false;
91
92 // get the current layer value of the given data node
93 int currentLayer;
94 bool wasFound = dataNode->GetIntProperty("layer", currentLayer, renderer);
95 if (!wasFound || currentLayer == newLayer)
96 // data node has no layer information or is already at the specified position
97 return false;
98
99 // move the given data node to the specified layer
100 dataNode->SetIntProperty("layer", newLayer, renderer);
101
102 int upperBound;
103 int lowerBound;
104 int step;
105 if (currentLayer < newLayer)
106 {
107 // move node up
108 upperBound = newLayer + 1;
109 lowerBound = currentLayer + 1;
110 step = -1; // move all other nodes one step down
111 }
112 else
113 {
114 upperBound = currentLayer;
115 lowerBound = newLayer;
116 step = 1; // move all other nodes one step up
117 }
118
119 // move all other data nodes between the upper and the lower bound
120 for (auto& layer : stackedLayers)
121 {
122 if (layer.second != dataNode && layer.first < upperBound && layer.first >= lowerBound)
123 {
124 layer.second->SetIntProperty("layer", layer.first + step, renderer);
125 }
126 // else: current data node is the selected data node or
127 // was previously already above the selected data node or
128 // was previously already below the new layer position
129 }
130 dataNode->Modified();
131 if (nullptr == renderer)
132 {
133 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
134 }
135 else
136 {

Callers 3

dropMimeDataMethod · 0.80
dropMimeDataMethod · 0.80
moveNodesLayerMethod · 0.80

Calls 7

emptyMethod · 0.45
GetIntPropertyMethod · 0.45
SetIntPropertyMethod · 0.45
ModifiedMethod · 0.45
RequestUpdateAllMethod · 0.45
RequestUpdateMethod · 0.45
GetRenderWindowMethod · 0.45

Tested by

no test coverage detected