Skip to content

Commit

Permalink
#5623: Reject / Finish buttons wired up to the respective functions. …
Browse files Browse the repository at this point in the history
…Reject algorithm is already working.
  • Loading branch information
codereader committed May 29, 2021
1 parent 796ba28 commit a600afb
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 11 deletions.
3 changes: 3 additions & 0 deletions include/imap.h
Expand Up @@ -182,6 +182,9 @@ class IMap :
// Exports the current selection to the given output stream, using the given map format
virtual void exportSelected(std::ostream& out, const map::MapFormatPtr& format) = 0;

// When called in EditMode::Merge, this will apply the currently active set of actions
virtual void finishMergeOperation() = 0;

// Can be called when in EditMode::Merge, will abort the current merge process
virtual void abortMergeOperation() = 0;
};
Expand Down
6 changes: 3 additions & 3 deletions install/ui/mergecontroldialog.fbp
Expand Up @@ -938,7 +938,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">RejectModificationButton</property>
<property name="name">RejectSelectionButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -1010,7 +1010,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">FinishMergeOperation</property>
<property name="name">FinishMergeButton</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand All @@ -1025,7 +1025,7 @@
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Apply the visible set of changes to the current map and finish the merge operation.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
Expand Down
5 changes: 3 additions & 2 deletions install/ui/mergecontroldialog.xrc
Expand Up @@ -178,7 +178,7 @@
<option>1</option>
<flag>wxALL</flag>
<border>0</border>
<object class="wxButton" name="RejectModificationButton">
<object class="wxButton" name="RejectSelectionButton">
<label>Reject selected Modifications</label>
<default>0</default>
<markup>0</markup>
Expand All @@ -189,7 +189,8 @@
<option>1</option>
<flag>wxLEFT</flag>
<border>6</border>
<object class="wxButton" name="FinishMergeOperation">
<object class="wxButton" name="FinishMergeButton">
<tooltip>Apply the visible set of changes to the current map and finish the merge operation.</tooltip>
<label>Finish Merge Operation</label>
<default>0</default>
<markup>0</markup>
Expand Down
71 changes: 65 additions & 6 deletions radiant/ui/merge/MergeControlDialog.cpp
Expand Up @@ -8,6 +8,7 @@
#include "iundo.h"
#include "imap.h"
#include "wxutil/PathEntry.h"
#include "scenelib.h"

#include <wx/textctrl.h>
#include <wx/button.h>
Expand Down Expand Up @@ -44,6 +45,12 @@ MergeControlDialog::MergeControlDialog() :
auto* loadAndCompareButton = findNamedObject<wxButton>(this, "LoadAndCompareButton");
loadAndCompareButton->Bind(wxEVT_BUTTON, &MergeControlDialog::onLoadAndCompare, this);

auto* rejectButton = findNamedObject<wxButton>(this, "RejectSelectionButton");
rejectButton->Bind(wxEVT_BUTTON, &MergeControlDialog::onRejectSelection, this);

auto* finishButton = findNamedObject<wxButton>(this, "FinishMergeButton");
finishButton->Bind(wxEVT_BUTTON, &MergeControlDialog::onFinishMerge, this);

updateControlSensitivity();

SetMinSize(wxSize(300, 300));
Expand Down Expand Up @@ -133,30 +140,81 @@ void MergeControlDialog::onAbortMerge(wxCommandEvent& ev)
updateControlSensitivity();
}

void MergeControlDialog::onRejectSelection(wxCommandEvent& ev)
{
UndoableCommand undo("deleteSelectedMergeNodes");

auto mergeNodes = getSelectedMergeNodes();

for (const auto& mergeNode : mergeNodes)
{
scene::removeNodeFromParent(mergeNode);
}

updateControlSensitivity();
}

void MergeControlDialog::onFinishMerge(wxCommandEvent& ev)
{
GlobalMapModule().finishMergeOperation();

if (GlobalMapModule().getEditMode() != IMap::EditMode::Merge)
{
// We're done here
Hide();
return;
}

updateControlSensitivity();
}

std::vector<scene::INodePtr> MergeControlDialog::getSelectedMergeNodes()
{
std::vector<scene::INodePtr> mergeNodes;

// Remove the selected nodes
GlobalSelectionSystem().foreachSelected([&](const scene::INodePtr& node)
{
if (node->getNodeType() == scene::INode::Type::MergeAction)
{
mergeNodes.push_back(node);
}
});

return mergeNodes;
}

std::size_t MergeControlDialog::getNumSelectedMergeNodes()
{
return getSelectedMergeNodes().size();
}

void MergeControlDialog::updateControlSensitivity()
{
auto numSelectedMergeNodes = getNumSelectedMergeNodes();
bool mergeInProgress = GlobalMapModule().getEditMode() == IMap::EditMode::Merge;
auto sourceMapPath = findNamedObject<wxutil::PathEntry>(this, "MergeMapFilename")->getValue();

findNamedObject<wxButton>(this, "AbortMergeButton")->Enable(mergeInProgress);
findNamedObject<wxButton>(this, "FinishMergeButton")->Enable(mergeInProgress);
findNamedObject<wxButton>(this, "LoadAndCompareButton")->Enable(!mergeInProgress && !sourceMapPath.empty());
findNamedObject<wxWindow>(this, "BaseMapFilename")->Enable(!mergeInProgress);
findNamedObject<wxWindow>(this, "MergeMapFilename")->Enable(!mergeInProgress);

findNamedObject<wxButton>(this, "RejectSelectionButton")->Enable(mergeInProgress && numSelectedMergeNodes > 0);
}

// Pre-hide callback
void MergeControlDialog::_preHide()
{
TransientWindow::_preHide();

// A hidden PatchInspector doesn't need to listen for events
// A hidden window doesn't need to listen for events
_undoHandler.disconnect();
_redoHandler.disconnect();

GlobalSelectionSystem().removeObserver(this);
}

// Pre-show callback
void MergeControlDialog::_preShow()
{
TransientWindow::_preShow();
Expand All @@ -173,12 +231,12 @@ void MergeControlDialog::_preShow()
sigc::mem_fun(this, &MergeControlDialog::queueUpdate));

// Check for selection changes before showing the dialog again
rescanSelection();
updateControlSensitivity();
}

void MergeControlDialog::rescanSelection()
{

}

void MergeControlDialog::selectionChanged(const scene::INodePtr& node, bool isComponent)
Expand All @@ -188,7 +246,7 @@ void MergeControlDialog::selectionChanged(const scene::INodePtr& node, bool isCo
return; // we only care about merge actions here
}

rescanSelection();
queueUpdate();
}

void MergeControlDialog::queueUpdate()
Expand All @@ -202,6 +260,7 @@ void MergeControlDialog::onIdle(wxIdleEvent& ev)

_updateNeeded = false;
rescanSelection();
updateControlSensitivity();
}

}
5 changes: 5 additions & 0 deletions radiant/ui/merge/MergeControlDialog.h
Expand Up @@ -45,11 +45,16 @@ class MergeControlDialog :
void convertTextCtrlToPathEntry(const std::string& ctrlName);
void onMergeSourceChanged(wxCommandEvent& ev);
void onLoadAndCompare(wxCommandEvent& ev);
void onFinishMerge(wxCommandEvent& ev);
void onAbortMerge(wxCommandEvent& ev);
void onRejectSelection(wxCommandEvent& ev);
void updateControlSensitivity();
void rescanSelection();
void queueUpdate();
void onIdle(wxIdleEvent& ev);

std::size_t getNumSelectedMergeNodes();
std::vector<scene::INodePtr> getSelectedMergeNodes();
};

}
5 changes: 5 additions & 0 deletions radiantcore/map/Map.cpp
Expand Up @@ -166,6 +166,11 @@ void Map::loadMapResourceFromLocation(const MapLocation& location)
setModified(false);
}

void Map::finishMergeOperation()
{

}

void Map::abortMergeOperation()
{
for (const auto& mergeAction : _mergeActionNodes)
Expand Down
1 change: 1 addition & 0 deletions radiantcore/map/Map.h
Expand Up @@ -169,6 +169,7 @@ class Map :
void exportSelected(std::ostream& out) override;
void exportSelected(std::ostream& out, const MapFormatPtr& format) override;

void finishMergeOperation() override;
void abortMergeOperation() override;

// free all map elements, reinitialize the structures that depend on them
Expand Down

0 comments on commit a600afb

Please sign in to comment.