Skip to content

Commit

Permalink
#5623: Working on merge control dialog. The "merge map" menu item now…
Browse files Browse the repository at this point in the history
… opens the transient window where users can choose a map and launch the comparison/merge.
  • Loading branch information
codereader committed May 29, 2021
1 parent b5f1779 commit 69e0f51
Show file tree
Hide file tree
Showing 11 changed files with 397 additions and 388 deletions.
3 changes: 3 additions & 0 deletions include/imap.h
Expand Up @@ -181,6 +181,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;

// Can be called when in EditMode::Merge, will abort the current merge process
virtual void abortMergeOperation() = 0;
};
typedef std::shared_ptr<IMap> IMapPtr;

Expand Down
Binary file added install/bitmaps/merge_arrow.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added install/bitmaps/merge_fork.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed install/bitmaps/merge_path.png
Binary file not shown.
2 changes: 1 addition & 1 deletion install/menu.xml
Expand Up @@ -6,7 +6,7 @@
<menuItem name="open" caption="&amp;Open..." command="OpenMap" />
<menuItem name="openMapFromProject" caption="&amp;Open Map from Project..." command="OpenMapFromProject" />
<menuItem name="import" caption="&amp;Import map..." command="ImportMap" />
<menuItem name="mergeMap" caption="&amp;Merge map..." command="MergeMap" />
<menuItem name="mergeMap" caption="&amp;Merge map..." command="MergeControlDialog" />
<menuItem name="loadprefab" caption="Import &amp;prefab..." command="LoadPrefab" />
<menuSeparator />
<menuItem name="save" caption="&amp;Save" command="SaveMap" />
Expand Down
515 changes: 209 additions & 306 deletions install/ui/mergecontroldialog.fbp

Large diffs are not rendered by default.

140 changes: 74 additions & 66 deletions install/ui/mergecontroldialog.xrc
Expand Up @@ -25,64 +25,62 @@
<border>5</border>
<object class="wxFlexGridSizer">
<rows>2</rows>
<cols>2</cols>
<cols>3</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<growablecols>0,1</growablecols>
<growablecols>0,2</growablecols>
<growablerows></growablerows>
<object class="sizeritem">
<option>0</option>
<flag>wxBOTTOM|wxRIGHT</flag>
<flag>wxBOTTOM</flag>
<border>6</border>
<object class="wxStaticText" name="TargetMapLabel">
<label>Merge Target</label>
<object class="wxStaticText" name="MergeMapSelector">
<tooltip>The map file to merge into the target map</tooltip>
<label>Map to be merged</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxBOTTOM</flag>
<border>6</border>
<object class="wxStaticText" name="MergeMapSelector">
<tooltip>The map file to merge into the base map</tooltip>
<label>Map to be merged</label>
<wrap>-1</wrap>
<flag></flag>
<border>5</border>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxEXPAND|wxRIGHT</flag>
<flag>wxBOTTOM|wxRIGHT</flag>
<border>6</border>
<object class="wxTextCtrl" name="BaseMapFilename">
<value></value>
<object class="wxStaticText" name="TargetMapLabel">
<label>Merge Target</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxTextCtrl" name="MergeMapFilename">
<value></value>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxButton" name="MergeMapBrowseButton">
<size>20,-1</size>
<label>...</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
<object class="wxTextCtrl" name="MergeMapFilename">
<tooltip>The map file to merge into the target map</tooltip>
<value></value>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxStaticBitmap" name="m_bitmap2">
<bitmap stock_id="darkradiant:merge_arrow.png" stock_client="">undefined.png</bitmap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxTextCtrl" name="TargetMapFilename">
<tooltip>The target map (this is the currently loaded one)</tooltip>
<value></value>
</object>
</object>
</object>
Expand All @@ -98,45 +96,25 @@
<flag>wxALIGN_CENTER|wxALL</flag>
<border>0</border>
<object class="wxStaticBitmap" name="m_bitmap1">
<bitmap stock_id="darkradiant:merge_path.png" stock_client="">undefined.png</bitmap>
<bitmap stock_id="darkradiant:merge_fork.png" stock_client="">undefined.png</bitmap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxBOTTOM|wxEXPAND</flag>
<border>6</border>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxTextCtrl" name="BaseMapFilename">
<tooltip>A common base map both maps have started from</tooltip>
<value></value>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxButton" name="BaseMapBrowseButton">
<size>20,-1</size>
<label>...</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
<option>1</option>
<flag>wxEXPAND</flag>
<border>0</border>
<object class="wxTextCtrl" name="BaseMapFilename">
<tooltip>A common base map both maps have started from, makes detecting merge conflicts much easier.</tooltip>
<value></value>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER</flag>
<flag>wxALIGN_CENTER|wxTOP</flag>
<border>6</border>
<object class="wxStaticText" name="BaseMapLabel">
<tooltip>A common base map both maps have started from</tooltip>
<label>Base Map (optional)</label>
<tooltip>A common base map both maps have started from, makes detecting merge conflicts much easier.</tooltip>
<label>Common Ancestor (optional)</label>
<wrap>-1</wrap>
</object>
</object>
Expand All @@ -145,6 +123,36 @@
</object>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxBOTTOM|wxEXPAND|wxTOP</flag>
<border>12</border>
<object class="wxBoxSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>1</option>
<flag>wxRIGHT</flag>
<border>6</border>
<object class="wxButton" name="LoadAndCompareButton">
<label>Load and Compare</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxALL</flag>
<border>0</border>
<object class="wxButton" name="AbortMergeButton">
<label>Abort Merge</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
</object>
</object>
</object>
</object>
</object>
Expand Down
75 changes: 75 additions & 0 deletions radiant/ui/merge/MergeControlDialog.cpp
Expand Up @@ -3,6 +3,13 @@
#include "i18n.h"
#include "itextstream.h"
#include "imainframe.h"
#include "icommandsystem.h"
#include "imap.h"
#include "wxutil/PathEntry.h"

#include <wx/textctrl.h>
#include <wx/button.h>
#include <wx/sizer.h>

namespace ui
{
Expand All @@ -18,6 +25,24 @@ MergeControlDialog::MergeControlDialog() :
SetSizer(new wxBoxSizer(wxVERTICAL));
GetSizer()->Add(loadNamedPanel(this, "MergeControlDialogMainPanel"), 1, wxEXPAND);

auto* targetMapFilename = findNamedObject<wxTextCtrl>(this, "TargetMapFilename");
targetMapFilename->SetValue(GlobalMapModule().getMapName());
targetMapFilename->Disable();

convertTextCtrlToPathEntry("MergeMapFilename");
convertTextCtrlToPathEntry("BaseMapFilename");

auto* mergeSourceEntry = findNamedObject<wxutil::PathEntry>(this, "MergeMapFilename");
mergeSourceEntry->Bind(wxutil::EV_PATH_ENTRY_CHANGED, &MergeControlDialog::onMergeSourceChanged, this);

auto* abortMergeButton = findNamedObject<wxButton>(this, "AbortMergeButton");
abortMergeButton->Bind(wxEVT_BUTTON, &MergeControlDialog::onAbortMerge, this);

auto* loadAndCompareButton = findNamedObject<wxButton>(this, "LoadAndCompareButton");
loadAndCompareButton->Bind(wxEVT_BUTTON, &MergeControlDialog::onLoadAndCompare, this);

updateControlSensitivity();

SetMinSize(wxSize(300, 300));
}

Expand Down Expand Up @@ -64,4 +89,54 @@ void MergeControlDialog::Toggle(const cmd::ArgumentList& args)
Instance().ToggleVisibility();
}

void MergeControlDialog::convertTextCtrlToPathEntry(const std::string& ctrlName)
{
auto oldCtrl = findNamedObject<wxTextCtrl>(this, ctrlName);
replaceControl(oldCtrl, new wxutil::PathEntry(oldCtrl->GetParent(), false));
}

void MergeControlDialog::onMergeSourceChanged(wxCommandEvent& ev)
{
updateControlSensitivity();
}

void MergeControlDialog::onLoadAndCompare(wxCommandEvent& ev)
{
auto sourceMapPath = findNamedObject<wxutil::PathEntry>(this, "MergeMapFilename")->getValue();
auto baseMapPath = findNamedObject<wxutil::PathEntry>(this, "BaseMapFilename")->getValue();

if (sourceMapPath.empty())
{
return;
}

if (!baseMapPath.empty())
{
GlobalCommandSystem().executeCommand("StartMergeOperation", sourceMapPath, baseMapPath);
}
else
{
GlobalCommandSystem().executeCommand("StartMergeOperation", sourceMapPath);
}

updateControlSensitivity();
}

void MergeControlDialog::onAbortMerge(wxCommandEvent& ev)
{
GlobalMapModule().abortMergeOperation();
updateControlSensitivity();
}

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

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

}
6 changes: 6 additions & 0 deletions radiant/ui/merge/MergeControlDialog.h
Expand Up @@ -23,6 +23,12 @@ class MergeControlDialog :
private:
void onMainFrameShuttingDown();
static std::shared_ptr<MergeControlDialog>& InstancePtr();

void convertTextCtrlToPathEntry(const std::string& ctrlName);
void onMergeSourceChanged(wxCommandEvent& ev);
void onLoadAndCompare(wxCommandEvent& ev);
void onAbortMerge(wxCommandEvent& ev);
void updateControlSensitivity();
};

}

0 comments on commit 69e0f51

Please sign in to comment.