Skip to content

Commit

Permalink
#5408: Set up infrastructure to show the last named map operation in …
Browse files Browse the repository at this point in the history
…the status bar
  • Loading branch information
codereader committed Oct 27, 2021
1 parent c4f7a6f commit 2263151
Show file tree
Hide file tree
Showing 15 changed files with 147 additions and 9 deletions.
1 change: 1 addition & 0 deletions include/imessagebus.h
Expand Up @@ -45,6 +45,7 @@ class IMessage
GameConfigNeeded,
LongRunningOperation,
MapFileOperation,
MapOperationFinished,
FileSelectionRequest,
Notification,
TextureChanged,
Expand Down
2 changes: 1 addition & 1 deletion include/iundo.h
Expand Up @@ -94,7 +94,7 @@ class IUndoSystem

/**
* Observer implementation which gets notified
* on undo/redo perations.
* on undo/redo operations.
*/
class Tracker
{
Expand Down
15 changes: 8 additions & 7 deletions include/ui/istatusbarmanager.h
Expand Up @@ -11,18 +11,19 @@ namespace statusbar
{

// Use these positions to place the status bar elements in between
// the default ones. A position of 31 would put a widget in between
// StandardPosition::MapStatistics and StandardPosition::ShaderClipboard.
// the default ones. A position of 32 would put a widget in between
// StandardPosition::GridSize and StandardPosition::OrthoViewPosition.
struct StandardPosition
{
enum
{
Front = 0,
MapStatistics = 10,
GridSize = 20,
OrthoViewPosition = 30,
ShaderClipboard = 40,
MapEditStopwatch = 50,
Commands = 10,
MapStatistics = 20,
GridSize = 30,
OrthoViewPosition = 40,
ShaderClipboard = 50,
MapEditStopwatch = 60,
Back = 9000,
};
};
Expand Down
41 changes: 41 additions & 0 deletions libs/messages/MapOperationMessage.h
@@ -0,0 +1,41 @@
#pragma once

#include "iradiant.h"
#include "imessagebus.h"

namespace map
{

/**
* Message sent when an operation affecting the loaded map is finished.
* This can be an ordinary edit operation, loading, saving, or an undo/redo step.
*/
class OperationMessage :
public radiant::IMessage
{
private:
std::string _message;

public:
OperationMessage(const std::string& message) :
_message(message)
{}

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

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

static void Send(const std::string& message)
{
OperationMessage msg(message);
GlobalRadiantCore().getMessageBus().sendMessage(msg);
}
};

}
1 change: 1 addition & 0 deletions radiant/CMakeLists.txt
Expand Up @@ -159,6 +159,7 @@ add_executable(darkradiant
ui/script/ScriptWindow.cpp
ui/selectionset/SelectionSetToolmenu.cpp
ui/splash/Splash.cpp
ui/statusbar/CommandStatus.cpp
ui/statusbar/EditingStopwatchStatus.cpp
ui/statusbar/MapStatistics.cpp
ui/statusbar/StatusBarManager.cpp
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/UserInterfaceModule.cpp
Expand Up @@ -213,6 +213,7 @@ void UserInterfaceModule::initialiseModule(const IApplicationContext& ctx)
_mruMenu.reset(new MRUMenu);
_shaderClipboardStatus.reset(new statusbar::ShaderClipboardStatus);
_editStopwatchStatus.reset(new statusbar::EditingStopwatchStatus);
_commandStatus.reset(new statusbar::CommandStatus);
_mapStatisticsStatus.reset(new statusbar::MapStatistics);
_manipulatorToggle.reset(new ManipulatorToggle);
_textureToolModeToggles.reset(new TexToolModeToggles);
Expand Down Expand Up @@ -252,6 +253,7 @@ void UserInterfaceModule::shutdownModule()
_shaderClipboardStatus.reset();
_mapStatisticsStatus.reset();
_editStopwatchStatus.reset();
_commandStatus.reset();
_manipulatorToggle.reset();
_selectionModeToggle.reset();
_textureToolModeToggles.reset();
Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/UserInterfaceModule.h
Expand Up @@ -17,6 +17,7 @@
#include "SelectionModeToggle.h"
#include "statusbar/ShaderClipboardStatus.h"
#include "statusbar/EditingStopwatchStatus.h"
#include "statusbar/CommandStatus.h"
#include "statusbar/MapStatistics.h"
#include "messages/CommandExecutionFailed.h"
#include "messages/TextureChanged.h"
Expand Down Expand Up @@ -49,6 +50,7 @@ class UserInterfaceModule :
std::unique_ptr<FileSaveConfirmationHandler> _fileSaveConfirmationHandler;
std::unique_ptr<statusbar::ShaderClipboardStatus> _shaderClipboardStatus;
std::unique_ptr<statusbar::EditingStopwatchStatus> _editStopwatchStatus;
std::unique_ptr<statusbar::CommandStatus> _commandStatus;
std::unique_ptr<statusbar::MapStatistics> _mapStatisticsStatus;
std::unique_ptr<ManipulatorToggle> _manipulatorToggle;
std::unique_ptr<SelectionModeToggle> _selectionModeToggle;
Expand Down
40 changes: 40 additions & 0 deletions radiant/ui/statusbar/CommandStatus.cpp
@@ -0,0 +1,40 @@
#include "CommandStatus.h"

#include "ui/istatusbarmanager.h"
#include "iradiant.h"

namespace ui
{

namespace statusbar
{

namespace
{
const char* const STATUS_BAR_ELEMENT = "Commands";
}

CommandStatus::CommandStatus()
{
_mapOperationListener = GlobalRadiantCore().getMessageBus().addListener(
radiant::IMessage::MapOperationFinished,
radiant::TypeListener<map::OperationMessage>(
sigc::mem_fun(this, &CommandStatus::onOperationFinished)));

// Add the status bar element
GlobalStatusBarManager().addTextElement(STATUS_BAR_ELEMENT, "", StandardPosition::Commands, "");
}

CommandStatus::~CommandStatus()
{
GlobalRadiantCore().getMessageBus().removeListener(_mapOperationListener);
}

void CommandStatus::onOperationFinished(map::OperationMessage& message)
{
GlobalStatusBarManager().setText(STATUS_BAR_ELEMENT, message.getMessage(), false);
}

}

}
32 changes: 32 additions & 0 deletions radiant/ui/statusbar/CommandStatus.h
@@ -0,0 +1,32 @@
#pragma once

#include "iundo.h"
#include "imap.h"

#include "messages/MapOperationMessage.h"

namespace ui
{

namespace statusbar
{

/**
* Status bar widget displaying the most recently completed
* operation or any undo / redo activitiy.
*/
class CommandStatus final
{
private:
std::size_t _mapOperationListener;

public:
CommandStatus();
~CommandStatus();

void onOperationFinished(map::OperationMessage& message);
};

}

}
3 changes: 2 additions & 1 deletion radiant/ui/statusbar/StatusBarManager.cpp
Expand Up @@ -241,7 +241,8 @@ void StatusBarManager::rebuildStatusBar()

// A few default elements don't need to use 1 as proportion
auto proportion = i->first == StandardPosition::MapStatistics || i->first == StandardPosition::GridSize ||
i->first == StandardPosition::MapEditStopwatch || i->first == StandardPosition::OrthoViewPosition ? 0 : 1;
i->first == StandardPosition::MapEditStopwatch || i->first == StandardPosition::OrthoViewPosition ||
i->first == StandardPosition::Commands ? 0 : 1;

_statusBar->GetSizer()->Add(i->second->toplevel, proportion, flags, spacing);

Expand Down
5 changes: 5 additions & 0 deletions radiantcore/map/Map.cpp
Expand Up @@ -44,6 +44,7 @@
#include "messages/ScopedLongRunningOperation.h"
#include "messages/FileOverwriteConfirmation.h"
#include "messages/FileSaveConfirmation.h"
#include "messages/MapOperationMessage.h"
#include "selection/algorithm/Primitives.h"
#include "selection/algorithm/Group.h"
#include "scene/Group.h"
Expand Down Expand Up @@ -174,6 +175,8 @@ void Map::loadMapResourceFromLocation(const MapLocation& location)
// Map loading finished, emit the signal
emitMapEvent(MapLoaded);

OperationMessage::Send(_("Map loaded"));

rMessage() << "--- LoadMapFile ---\n";
rMessage() << _mapName << "\n";

Expand Down Expand Up @@ -606,6 +609,7 @@ bool Map::save(const MapFormatPtr& mapFormat)
}

emitMapEvent(MapSaved);
OperationMessage::Send(_("Map saved"));

_saveInProgress = false;

Expand All @@ -626,6 +630,7 @@ void Map::createNewMap()

setModified(false);

OperationMessage::Send(_("Empty Map created"));
focusViews(Vector3(0,0,30), Vector3(0,0,0));
}

Expand Down
2 changes: 2 additions & 0 deletions tools/msvc/DarkRadiant.vcxproj
Expand Up @@ -345,6 +345,7 @@
<ClCompile Include="..\..\radiant\ui\script\ScriptUserInterfaceModule.cpp" />
<ClCompile Include="..\..\radiant\ui\script\ScriptWindow.cpp" />
<ClCompile Include="..\..\radiant\ui\selectionset\SelectionSetToolmenu.cpp" />
<ClCompile Include="..\..\radiant\ui\statusbar\CommandStatus.cpp" />
<ClCompile Include="..\..\radiant\ui\statusbar\EditingStopwatchStatus.cpp" />
<ClCompile Include="..\..\radiant\ui\statusbar\MapStatistics.cpp" />
<ClCompile Include="..\..\radiant\ui\statusbar\StatusBarManager.cpp" />
Expand Down Expand Up @@ -561,6 +562,7 @@
<ClInclude Include="..\..\radiant\ui\script\ScriptWindow.h" />
<ClInclude Include="..\..\radiant\ui\SelectionModeToggle.h" />
<ClInclude Include="..\..\radiant\ui\selectionset\SelectionSetToolmenu.h" />
<ClInclude Include="..\..\radiant\ui\statusbar\CommandStatus.h" />
<ClInclude Include="..\..\radiant\ui\statusbar\EditingStopwatchStatus.h" />
<ClInclude Include="..\..\radiant\ui\statusbar\MapStatistics.h" />
<ClInclude Include="..\..\radiant\ui\statusbar\ShaderClipboardStatus.h" />
Expand Down
6 changes: 6 additions & 0 deletions tools/msvc/DarkRadiant.vcxproj.filters
Expand Up @@ -715,6 +715,9 @@
<ClCompile Include="..\..\radiant\selection\SceneManipulateMouseTool.cpp">
<Filter>src\selection</Filter>
</ClCompile>
<ClCompile Include="..\..\radiant\ui\statusbar\CommandStatus.cpp">
<Filter>src\ui\statusbar</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\radiant\camera\CameraSettings.h">
Expand Down Expand Up @@ -1389,6 +1392,9 @@
<ClInclude Include="..\..\radiant\ui\FileSaveConfirmationHandler.h">
<Filter>src\ui</Filter>
</ClInclude>
<ClInclude Include="..\..\radiant\ui\statusbar\CommandStatus.h">
<Filter>src\ui\statusbar</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\radiant\darkradiant.rc" />
Expand Down
1 change: 1 addition & 0 deletions tools/msvc/libs.vcxproj
Expand Up @@ -179,6 +179,7 @@
<ClInclude Include="..\..\libs\messages\LongRunningOperationMessage.h" />
<ClInclude Include="..\..\libs\messages\ManipulatorModeToggleRequest.h" />
<ClInclude Include="..\..\libs\messages\MapFileOperation.h" />
<ClInclude Include="..\..\libs\messages\MapOperationMessage.h" />
<ClInclude Include="..\..\libs\messages\NotificationMessage.h" />
<ClInclude Include="..\..\libs\messages\ScopedLongRunningOperation.h" />
<ClInclude Include="..\..\libs\messages\TextureChanged.h" />
Expand Down
3 changes: 3 additions & 0 deletions tools/msvc/libs.vcxproj.filters
Expand Up @@ -326,6 +326,9 @@
<ClInclude Include="..\..\libs\selection\CollectiveSpawnargs.h">
<Filter>selection</Filter>
</ClInclude>
<ClInclude Include="..\..\libs\messages\MapOperationMessage.h">
<Filter>messages</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="util">
Expand Down

0 comments on commit 2263151

Please sign in to comment.