Skip to content

Commit

Permalink
#5780: Define new message type
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Oct 14, 2021
1 parent d2a9674 commit d5021f0
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/imessagebus.h
Expand Up @@ -50,6 +50,7 @@ class IMessage
TextureChanged,
ApplicationIsActiveQuery,
FileOverwriteConfirmation,
FileSaveConfirmation,
UnselectSelectionRequest,
ManipulatorModeToggleRequest,
ComponentSelectionModeToggleRequest,
Expand Down
80 changes: 80 additions & 0 deletions libs/messages/FileSaveConfirmation.h
@@ -0,0 +1,80 @@
#pragma once

#include <stdexcept>
#include "imessagebus.h"
#include "iradiant.h"

namespace radiant
{

/**
* Message sent when the backend code wants the user to confirm saving a modified file
* before a new map is loaded, with the option to Save the modified map, Discard the changes
* or to cancel the request.
* Senders: If this message stays unresponded the switch is allowed.
*/
class FileSaveConfirmation :
public radiant::IMessage
{
public:
enum class Action
{
SaveChanges,
DiscardChanges,
Cancel,
};

private:
std::string _title;
std::string _message;

Action _action;

public:
FileSaveConfirmation(const std::string& title, const std::string& message) :
_title(title),
_message(message),
_action(Action::DiscardChanges)
{}

const std::string& getTitle() const
{
return _title;
}

bool hasTitle() const
{
return !_title.empty();
}

const std::string& getMessage() const
{
return _message;
}

std::size_t getId() const override
{
return IMessage::Type::FileSaveConfirmation;
}

Action getChosenAction() const
{
return _action;
}

void setAction(Action action)
{
_action = action;
}

// Convenience method, creating an instance and dispatching it to the message bus, returning the answer
static Action SendAndReceiveAnswer(const std::string& message, const std::string& title = std::string())
{
FileSaveConfirmation msg(title, message);
GlobalRadiantCore().getMessageBus().sendMessage(msg);

return msg.getChosenAction();
}
};

}
1 change: 1 addition & 0 deletions tools/msvc/libs.vcxproj
Expand Up @@ -172,6 +172,7 @@
<ClInclude Include="..\..\libs\messages\CommandExecutionFailed.h" />
<ClInclude Include="..\..\libs\messages\ComponentSelectionModeToggleRequest.h" />
<ClInclude Include="..\..\libs\messages\FileOverwriteConfirmation.h" />
<ClInclude Include="..\..\libs\messages\FileSaveConfirmation.h" />
<ClInclude Include="..\..\libs\messages\FileSelectionRequest.h" />
<ClInclude Include="..\..\libs\messages\GameConfigNeededMessage.h" />
<ClInclude Include="..\..\libs\messages\GridSnapRequest.h" />
Expand Down
3 changes: 3 additions & 0 deletions tools/msvc/libs.vcxproj.filters
Expand Up @@ -317,6 +317,9 @@
<ClInclude Include="..\..\libs\messages\GridSnapRequest.h">
<Filter>messages</Filter>
</ClInclude>
<ClInclude Include="..\..\libs\messages\FileSaveConfirmation.h">
<Filter>messages</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="util">
Expand Down

0 comments on commit d5021f0

Please sign in to comment.