Skip to content

Commit

Permalink
#5643: Move code to deactivate the conflict actions (and reject the s…
Browse files Browse the repository at this point in the history
…ource change) on removal from scene to the nodes.
  • Loading branch information
codereader committed Jun 20, 2021
1 parent 31ff662 commit a8e3607
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 57 deletions.
17 changes: 1 addition & 16 deletions radiant/ui/merge/MergeControlDialog.cpp
Expand Up @@ -193,23 +193,8 @@ void MergeControlDialog::rejectSelectedNodesByDeletion()

auto mergeNodes = getSelectedMergeNodes();

for (const auto& node : mergeNodes)
for (const auto& mergeNode : mergeNodes)
{
auto mergeNode = std::dynamic_pointer_cast<scene::IMergeActionNode>(node);

if (!mergeNode) continue;

if (mergeNode->getActionType() == scene::merge::ActionType::ConflictResolution)
{
mergeNode->foreachMergeAction([&](const scene::merge::IMergeAction::Ptr& action)
{
auto conflictAction = std::dynamic_pointer_cast<scene::merge::IConflictResolutionAction>(action);
assert(conflictAction);

conflictAction->setResolution(scene::merge::ResolutionType::RejectSourceChange);
});
}

scene::removeNodeFromParent(mergeNode);
}

Expand Down
65 changes: 27 additions & 38 deletions radiantcore/map/MergeActionNode.cpp
Expand Up @@ -24,16 +24,41 @@ void MergeActionNodeBase::clear()

void MergeActionNodeBase::onInsertIntoScene(scene::IMapRootNode& rootNode)
{
SelectableNode::onInsertIntoScene(rootNode);
if (_syncActionStatus)
{
foreachMergeAction([&](const scene::merge::IMergeAction::Ptr& action)
{
action->activate();
});
}

hideAffectedNodes();

SelectableNode::onInsertIntoScene(rootNode);
}

void MergeActionNodeBase::onRemoveFromScene(scene::IMapRootNode& rootNode)
{
SelectableNode::onRemoveFromScene(rootNode);

unhideAffectedNodes();

SelectableNode::onRemoveFromScene(rootNode);
if (_syncActionStatus)
{
foreachMergeAction([&](const scene::merge::IMergeAction::Ptr& action)
{
// Removing an unresolved conflict action from the scene implies rejecting the source change
auto conflictAction = std::dynamic_pointer_cast<scene::merge::IConflictResolutionAction>(action);

if (conflictAction && conflictAction->getResolution() == scene::merge::ResolutionType::Unresolved)
{
conflictAction->setResolution(scene::merge::ResolutionType::RejectSourceChange);
}

// Removing any action from the scene means to deactivate it
action->deactivate();
});
}
}

scene::INode::Type MergeActionNodeBase::getNodeType() const
Expand Down Expand Up @@ -194,32 +219,6 @@ void KeyValueMergeActionNode::foreachMergeAction(const std::function<void(const
}
}

void KeyValueMergeActionNode::onInsertIntoScene(scene::IMapRootNode& rootNode)
{
if (_syncActionStatus)
{
for (const auto& action : _actions)
{
action->activate();
}
}

MergeActionNodeBase::onInsertIntoScene(rootNode);
}

void KeyValueMergeActionNode::onRemoveFromScene(scene::IMapRootNode& rootNode)
{
MergeActionNodeBase::onRemoveFromScene(rootNode);

if (_syncActionStatus)
{
for (const auto& action : _actions)
{
action->deactivate();
}
}
}

// RegularMergeActionNode

RegularMergeActionNode::RegularMergeActionNode(const scene::merge::IMergeAction::Ptr& action) :
Expand All @@ -230,11 +229,6 @@ RegularMergeActionNode::RegularMergeActionNode(const scene::merge::IMergeAction:

void RegularMergeActionNode::onInsertIntoScene(scene::IMapRootNode& rootNode)
{
if (_syncActionStatus)
{
_action->activate();
}

// Add the nodes that are missing in this scene, for preview purposes
addPreviewNodeForAddAction();

Expand All @@ -247,11 +241,6 @@ void RegularMergeActionNode::onRemoveFromScene(scene::IMapRootNode& rootNode)
MergeActionNodeBase::onRemoveFromScene(rootNode);

removePreviewNodeForAddAction();

if (_syncActionStatus)
{
_action->deactivate();
}
}

void RegularMergeActionNode::clear()
Expand Down
3 changes: 0 additions & 3 deletions radiantcore/map/MergeActionNode.h
Expand Up @@ -82,9 +82,6 @@ class KeyValueMergeActionNode final :
void foreachMergeAction(const std::function<void(const scene::merge::IMergeAction::Ptr&)>& functor) override;
std::size_t getMergeActionCount() override;
bool hasActiveActions() override;

void onInsertIntoScene(scene::IMapRootNode& rootNode) override;
void onRemoveFromScene(scene::IMapRootNode& rootNode) override;
};

/**
Expand Down

0 comments on commit a8e3607

Please sign in to comment.