Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
41871aa
feat: Add stand assignment source tracking with runtime-configurable …
MrAdder Mar 16, 2026
355d479
refactor: Corrections from Personal Review
MrAdder Mar 16, 2026
c547eee
feat: Enhance StandEventHandler with source tracking and update relat…
MrAdder Mar 16, 2026
4e80ae9
refactor: Update StandColourConfiguration and StandEventHandler for i…
MrAdder Mar 16, 2026
c1f98b7
feat: Add StandAssignmentSource and StandColourConfiguration files to…
MrAdder Mar 16, 2026
bc151ca
chore: consolidate code changes for improved maintainability
MrAdder Mar 16, 2026
6ff5c17
feat: Add StandEventHandlerConfig to StandEventHandlerTest for enhanc…
MrAdder Mar 16, 2026
2ace07d
refactor: Simplify StandEventHandlerTest by consolidating JSON object…
MrAdder Mar 16, 2026
2d47b34
Test fixes for clang-format
MrAdder Mar 16, 2026
1c2df0b
dev: Testing a potential fix
MrAdder Mar 16, 2026
9ae9b0d
added the menu i forgot earlier needs rework a little
MrAdder Mar 17, 2026
7a35e4d
Fix Test and Color chooser titles
MrAdder Mar 17, 2026
b4ed9af
Formatting
MrAdder Mar 17, 2026
7ed5e63
Restrict color selector
MrAdder Mar 17, 2026
14df754
Removal of UI and Save components leaving load for customisation
MrAdder Mar 18, 2026
b6870e2
remove code smells from sonarqube
MrAdder Mar 18, 2026
d3e0c79
formatting
MrAdder Mar 18, 2026
18c8efe
formatting fix hopefully
MrAdder Mar 18, 2026
4abd622
Format fix
MrAdder Mar 18, 2026
7dbcca4
ok this is after running clang-format
MrAdder Mar 18, 2026
57aadd3
would help if i removed dryrun
MrAdder Mar 18, 2026
df008d3
formatting
MrAdder Mar 18, 2026
0888907
attempt at deduplication
MrAdder Mar 19, 2026
0d784e2
attempt fix
MrAdder Mar 19, 2026
c0c6eff
Some fixes from review
MrAdder Mar 21, 2026
25f50a3
further review fixes
MrAdder Mar 21, 2026
70c7c32
Update StandEventHandler.cpp
MrAdder Mar 22, 2026
8ac14b6
Sonarqube Fixes
MrAdder Mar 22, 2026
e585052
Build fix for test
MrAdder Mar 22, 2026
b1d430b
Woops Tag overlap
MrAdder Mar 22, 2026
d0cd447
Correct tests and rename Web Services to Technology
MrAdder Mar 22, 2026
b6b1b91
Formatting
MrAdder Mar 22, 2026
e10e3fb
revert web services change
MrAdder Mar 22, 2026
8cdca49
Potential final push
MrAdder Apr 8, 2026
5a0b9e5
Formatting
MrAdder Apr 8, 2026
a36605d
Fix for build and sonar
MrAdder Apr 8, 2026
b2593c6
Test fixes
MrAdder Apr 8, 2026
f8d08b7
Use 'using enum' for StandAssignment::Source
MrAdder Apr 8, 2026
9933b2d
formatting
MrAdder Apr 8, 2026
52a0c19
sonarqube fixes
MrAdder Apr 8, 2026
acbe4cc
Revert "sonarqube fixes"
MrAdder Apr 8, 2026
238c94e
Refactor stand assignment source handling
MrAdder Apr 9, 2026
b4bd89a
Remove default arg from GetColourEntry call
MrAdder Apr 9, 2026
26c5698
Handle unknown System mode with default case
MrAdder Apr 9, 2026
3993f59
Return 'unknown' for default allocator case
MrAdder Apr 9, 2026
47a78db
Pad source labels with trailing space
MrAdder Apr 9, 2026
410e8aa
Revert AircraftFlowMeasureMapTest
MrAdder Apr 9, 2026
2661e67
Remove trailing spaces from source shorthands
MrAdder Apr 9, 2026
f1ce398
Refactor stands: colours & event handler
MrAdder Apr 9, 2026
49c8c1f
Removed extra brace
MrAdder Apr 9, 2026
6cda582
Fix include path and array size
MrAdder Apr 9, 2026
047ceec
Simplify sourceColourDefaults initialization
MrAdder Apr 9, 2026
24134a5
Use using enum for StandAssignment::Source
MrAdder Apr 12, 2026
d9f8727
sonar
MrAdder Apr 12, 2026
f8df1d8
Use using enum for StandAssignment::Source
MrAdder Apr 12, 2026
00d66cd
Use DEFAULT_COLOUR for Unknown stand source
MrAdder Apr 18, 2026
e0eb3da
Update src/plugin/stands/StandColourConfiguration.cpp
MrAdder Apr 23, 2026
34abef7
Update src/plugin/stands/StandColourConfiguration.h
MrAdder Apr 23, 2026
e30e230
Fix initializer list and format comments
MrAdder Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/TAG_ITEMS.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@
130 - Missed Approach Indicator
131 - Relevant ECFMP Flow Measures
132 - Glideslope Deviation
133 - Stand Assignment Source
3 changes: 3 additions & 0 deletions src/plugin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,9 @@ set(src__stands
"stands/CompareStands.cpp"
"stands/CompareStands.h"
"stands/Stand.h"
"stands/StandAssignmentSource.h"
"stands/StandColourConfiguration.cpp"
"stands/StandColourConfiguration.h"
"stands/StandEventHandler.cpp"
"stands/StandEventHandler.h"
"stands/StandModule.cpp"
Expand Down
66 changes: 66 additions & 0 deletions src/plugin/stands/StandAssignmentSource.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#pragma once
#include <string>
#include <string_view>

namespace UKControllerPlugin::Stands {
/*
Represents a stand assignment with its source (how it was assigned).
*/
struct StandAssignment
{
enum class Source
Comment thread
MrAdder marked this conversation as resolved.
{
Unknown,
User,
ReservationAllocator,
VaaAllocator,
SystemAuto,
};

int standId;

// The source of the assignment (user, reservation_allocator, vaa_allocator, system_auto)
Source source;

[[nodiscard]] static constexpr auto ToString(Source source) -> std::string_view
{
using enum Source;

switch (source) {
case Unknown:
return "unknown";
case User:
return "user";
case ReservationAllocator:
return "reservation_allocator";
case VaaAllocator:
return "vaa_allocator";
case SystemAuto:
return "system_auto";
default:
return "unknown";
}
}

[[nodiscard]] static constexpr auto FromString(std::string_view source) -> Source
{
using enum Source;

if (source == "user") {
return User;
}
if (source == "reservation_allocator") {
return ReservationAllocator;
}
if (source == "vaa_allocator") {
return VaaAllocator;
}

if (source == "system_auto") {
return SystemAuto;
}

return Unknown;
}
};
} // namespace UKControllerPlugin::Stands
59 changes: 59 additions & 0 deletions src/plugin/stands/StandColourConfiguration.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include "StandColourConfiguration.h"
#include "StandAssignmentSource.h"
#include "euroscope/UserSetting.h"
#include "helper/HelperFunctions.h"
#include "log/LoggerFunctions.h"
#include <array>

namespace UKControllerPlugin::Stands {

StandColourConfiguration::StandColourConfiguration(UKControllerPlugin::Euroscope::UserSetting& setting)
: StandColourConfiguration(&setting)
{
}

StandColourConfiguration::StandColourConfiguration() : StandColourConfiguration(nullptr)
{
}

StandColourConfiguration::StandColourConfiguration(UKControllerPlugin::Euroscope::UserSetting* userSetting)
: userSetting(userSetting), sourceColours(
{{StandAssignment::Source::User, DEFAULT_USER_COLOUR},
{StandAssignment::Source::ReservationAllocator, DEFAULT_RESERVATION_COLOUR},
{StandAssignment::Source::VaaAllocator, DEFAULT_VAA_COLOUR},
{StandAssignment::Source::SystemAuto, DEFAULT_SYSTEM_COLOUR}})
{
LoadFromUserSettings();
}
Comment thread
MrAdder marked this conversation as resolved.

auto StandColourConfiguration::GetColourForSource(StandAssignment::Source source) const -> COLORREF
{
if (auto it = sourceColours.find(source); it != sourceColours.cend()) {
return it->second;
}

return DEFAULT_COLOUR;
}

void StandColourConfiguration::LoadFromUserSettings()
{
if (!this->userSetting) {
return;
}

using enum UKControllerPlugin::Stands::StandAssignment::Source;

Check warning on line 44 in src/plugin/stands/StandColourConfiguration.cpp

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Declaration shadows a enumerator "Unknown" in the outer scope.

See more on https://sonarcloud.io/project/issues?id=VATSIM-UK_uk-controller-plugin&issues=AZ2Ccd8cB1HMB1XNuAKd&open=AZ2Ccd8cB1HMB1XNuAKd&pullRequest=610

constexpr std::array<StandAssignment::Source, 5> sourceColourDefaults = {
{Unknown, User, ReservationAllocator, VaaAllocator, SystemAuto}};

for (const auto source : sourceColourDefaults) {
const std::string key = std::string(SETTING_PREFIX) + std::string(StandAssignment::ToString(source));
if (this->userSetting->HasEntry(key)) {
this->sourceColours[source] = this->userSetting->GetColourEntry(key);
}
}

LogInfo("Loaded stand assignment source colours from UserSettings");
}

} // namespace UKControllerPlugin::Stands
55 changes: 55 additions & 0 deletions src/plugin/stands/StandColourConfiguration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#pragma once
#include "StandAssignmentSource.h"
#include <map>
#include <string>
#include <string_view>
#include <Windows.h>

namespace UKControllerPlugin::Euroscope {
class UserSetting;
}

namespace UKControllerPlugin::Stands {
/*
Manages colour configuration for stand assignments based on their source.
Colours are persisted to EuroScope UserSettings and can be customized without recompilation.
*/
class StandColourConfiguration
{
public:
explicit StandColourConfiguration(UKControllerPlugin::Euroscope::UserSetting& userSetting);
explicit StandColourConfiguration();

/*
Get the colour for a given assignment source.
Returns a default grey if source is not found or not set.
*/
[[nodiscard]] auto GetColourForSource(StandAssignment::Source source) const -> COLORREF;

/*
Load colours from UserSettings, with fallback to defaults.
*/
void LoadFromUserSettings();

private:
explicit StandColourConfiguration(UKControllerPlugin::Euroscope::UserSetting* userSetting);

// Reference to user settings for persistence (null if not available)
UKControllerPlugin::Euroscope::UserSetting* userSetting;
Comment thread
MrAdder marked this conversation as resolved.

// Map of source to RGB colour
std::map<StandAssignment::Source, COLORREF> sourceColours;

// Default colour (grey) for unknown sources
static constexpr COLORREF DEFAULT_COLOUR = RGB(204, 204, 204);

// Default colours if not configured
static constexpr COLORREF DEFAULT_USER_COLOUR = RGB(255, 149, 41); // orange
static constexpr COLORREF DEFAULT_RESERVATION_COLOUR = RGB(255, 216, 0); // yellow
static constexpr COLORREF DEFAULT_VAA_COLOUR = RGB(255, 216, 0); // yellow
static constexpr COLORREF DEFAULT_SYSTEM_COLOUR = RGB(255, 255, 255); // white

// UserSetting key prefix for colours
static constexpr std::string_view SETTING_PREFIX = "stand_colour_";
};
} // namespace UKControllerPlugin::Stands
Loading
Loading