Skip to content

Commit

Permalink
#5440: Add FileOverwriteConfirmationHandler to UI module
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Dec 19, 2020
1 parent e836a29 commit 35364ec
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 1 deletion.
3 changes: 2 additions & 1 deletion libs/messages/FileOverwriteConfirmation.h
Expand Up @@ -24,7 +24,8 @@ class FileOverwriteConfirmation :
public:
FileOverwriteConfirmation(const std::string& title, const std::string& message) :
_title(title),
_message(message)
_message(message),
_confirmed(false)
{}

const std::string& getTitle() const
Expand Down
50 changes: 50 additions & 0 deletions radiant/ui/FileOverwriteConfirmationHandler.h
@@ -0,0 +1,50 @@
#pragma once

#include "idialogmanager.h"
#include "iradiant.h"
#include "messages/FileOverwriteConfirmation.h"

namespace ui
{

class FileOverwriteConfirmationHandler
{
private:
std::size_t _msgSubscription;

public:
FileOverwriteConfirmationHandler()
{
_msgSubscription = GlobalRadiantCore().getMessageBus().addListener(
radiant::IMessage::Type::FileOverwriteConfirmation,
radiant::TypeListener<radiant::FileOverwriteConfirmation>(
sigc::mem_fun(this, &FileOverwriteConfirmationHandler::handleRequest)));
}

~FileOverwriteConfirmationHandler()
{
GlobalRadiantCore().getMessageBus().removeListener(_msgSubscription);
}

private:
void handleRequest(radiant::FileOverwriteConfirmation& msg)
{
// Ask the user
auto msgBox = GlobalDialogManager().createMessageBox(
msg.hasTitle() ? msg.getTitle() : _("Confirm overwrite"),
msg.getMessage(),
ui::IDialog::MESSAGE_ASK
);

auto result = msgBox->run();

if (result == ui::IDialog::RESULT_YES)
{
msg.confirmOverwrite();
}

msg.setHandled(true);
}
};

}
2 changes: 2 additions & 0 deletions radiant/ui/UserInterfaceModule.cpp
Expand Up @@ -186,6 +186,7 @@ void UserInterfaceModule::initialiseModule(const IApplicationContext& ctx)
_mapFileProgressHandler.reset(new MapFileProgressHandler);
_autoSaveRequestHandler.reset(new AutoSaveRequestHandler);
_fileSelectionRequestHandler.reset(new FileSelectionRequestHandler);
_fileOverwriteConfirmationHandler.reset(new FileOverwriteConfirmationHandler);

initialiseEntitySettings();

Expand Down Expand Up @@ -231,6 +232,7 @@ void UserInterfaceModule::shutdownModule()

_longOperationHandler.reset();
_mapFileProgressHandler.reset();
_fileOverwriteConfirmationHandler.reset();
_fileSelectionRequestHandler.reset();
_autoSaveRequestHandler.reset();
_shaderClipboardStatus.reset();
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/UserInterfaceModule.h
Expand Up @@ -9,6 +9,7 @@

#include "LongRunningOperationHandler.h"
#include "FileSelectionRequestHandler.h"
#include "FileOverwriteConfirmationHandler.h"
#include "AutoSaveRequestHandler.h"
#include "MapFileProgressHandler.h"
#include "ManipulatorToggle.h"
Expand Down Expand Up @@ -40,6 +41,7 @@ class UserInterfaceModule :
std::unique_ptr<MapFileProgressHandler> _mapFileProgressHandler;
std::unique_ptr<AutoSaveRequestHandler> _autoSaveRequestHandler;
std::unique_ptr<FileSelectionRequestHandler> _fileSelectionRequestHandler;
std::unique_ptr<FileOverwriteConfirmationHandler> _fileOverwriteConfirmationHandler;
std::unique_ptr<ShaderClipboardStatus> _shaderClipboardStatus;
std::unique_ptr<EditingStopwatchStatus> _editStopwatchStatus;
std::unique_ptr<ManipulatorToggle> _manipulatorToggle;
Expand Down
1 change: 1 addition & 0 deletions tools/msvc/DarkRadiant.vcxproj
Expand Up @@ -436,6 +436,7 @@
<ClInclude Include="..\..\radiant\ui\entitylist\GraphTreeModel.h" />
<ClInclude Include="..\..\radiant\ui\entitylist\GraphTreeModelPopulator.h" />
<ClInclude Include="..\..\radiant\ui\entitylist\GraphTreeNode.h" />
<ClInclude Include="..\..\radiant\ui\FileOverwriteConfirmationHandler.h" />
<ClInclude Include="..\..\radiant\ui\FileSelectionRequestHandler.h" />
<ClInclude Include="..\..\radiant\ui\filters\editor\Filter.h" />
<ClInclude Include="..\..\radiant\ui\filters\editor\FilterDialog.h" />
Expand Down
3 changes: 3 additions & 0 deletions tools/msvc/DarkRadiant.vcxproj.filters
Expand Up @@ -1287,6 +1287,9 @@
<ClInclude Include="..\..\radiant\ui\mapselector\MapSelector.h">
<Filter>src\ui\mapselector</Filter>
</ClInclude>
<ClInclude Include="..\..\radiant\ui\FileOverwriteConfirmationHandler.h">
<Filter>src\ui</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\radiant\darkradiant.rc" />
Expand Down

0 comments on commit 35364ec

Please sign in to comment.