[gpx] Fix bookmark color change

Signed-off-by: cyber-toad <the.cyber.toad@proton.me>
This commit is contained in:
cyber-toad
2025-09-02 14:36:49 +02:00
committed by Konstantin Pastbin
parent fd342c2a17
commit 79a1ee1769
5 changed files with 38 additions and 1 deletions

View File

@@ -311,6 +311,13 @@ UNIT_TEST(Color)
TEST_EQUAL(dataFromFile.m_tracksData.size(), 3, ()); TEST_EQUAL(dataFromFile.m_tracksData.size(), 3, ());
} }
UNIT_TEST(ParseExportedGpxColor)
{
kml::FileData const dataFromFile = LoadGpxFromFile("test_data/gpx/point_with_predefined_color_2.gpx");
TEST_EQUAL(0x0066CCFF, dataFromFile.m_bookmarksData[0].m_color.m_rgba, ());
TEST_EQUAL(kml::PredefinedColor::Blue, dataFromFile.m_bookmarksData[0].m_color.m_predefinedColor, ());
}
UNIT_TEST(MultiTrackNames) UNIT_TEST(MultiTrackNames)
{ {
kml::FileData dataFromFile = LoadGpxFromFile("test_data/gpx/color.gpx"); kml::FileData dataFromFile = LoadGpxFromFile("test_data/gpx/color.gpx");

View File

@@ -182,11 +182,16 @@ kml::PredefinedColor Bookmark::GetColor() const
return m_data.m_color.m_predefinedColor; return m_data.m_color.m_predefinedColor;
} }
void Bookmark::InvalidateRGBAColor()
{
m_data.m_color.m_rgba = kInvalidColor;
}
void Bookmark::SetColor(kml::PredefinedColor color) void Bookmark::SetColor(kml::PredefinedColor color)
{ {
SetDirty(); SetDirty();
m_data.m_color.m_predefinedColor = color; m_data.m_color.m_predefinedColor = color;
m_data.m_color.m_rgba = kInvalidColor; InvalidateRGBAColor();
} }
std::string Bookmark::GetPreferredName() const std::string Bookmark::GetPreferredName() const

View File

@@ -40,6 +40,7 @@ public:
void SetCustomName(std::string const & customName); void SetCustomName(std::string const & customName);
kml::PredefinedColor GetColor() const; kml::PredefinedColor GetColor() const;
void InvalidateRGBAColor();
void SetColor(kml::PredefinedColor color); void SetColor(kml::PredefinedColor color);
m2::RectD GetViewport() const; m2::RectD GetViewport() const;

View File

@@ -2236,8 +2236,11 @@ void BookmarkManager::UpdateBookmark(kml::MarkId bmID, kml::BookmarkData const &
ASSERT(bookmark->GetGroupId() != kml::kInvalidMarkGroupId, ()); ASSERT(bookmark->GetGroupId() != kml::kInvalidMarkGroupId, ());
if (prevColor != bookmark->GetColor()) if (prevColor != bookmark->GetColor())
{
bookmark->InvalidateRGBAColor();
SetLastEditedBmColor(bookmark->GetColor()); SetLastEditedBmColor(bookmark->GetColor());
} }
}
void BookmarkManager::ChangeTrackColor(kml::TrackId trackId, dp::Color color) void BookmarkManager::ChangeTrackColor(kml::TrackId trackId, dp::Color color)
{ {

View File

@@ -371,6 +371,27 @@ UNIT_TEST(Bookmarks_Timestamp)
DeleteCategoryFiles(arrCat); DeleteCategoryFiles(arrCat);
} }
UNIT_TEST(Bookmarks_ChangeColorForImportedBookmark)
{
Framework fm(kFrameworkParams);
BookmarkManager & bmManager = fm.GetBookmarkManager();
bmManager.EnableTestMode(true);
auto const cat1 = bmManager.CreateBookmarkCategory("cat1", false /* autoSave */);
kml::BookmarkData bm1;
kml::SetDefaultStr(bm1.m_name, "1");
bm1.m_point = m2::PointD(38, 20);
bm1.m_color.m_predefinedColor = kml::PredefinedColor::Blue;
bm1.m_color.m_rgba = 0x0066CCFF;
auto const * pBm1 = bmManager.GetEditSession().CreateBookmark(std::move(bm1), cat1);
bm1.m_color.m_predefinedColor = kml::PredefinedColor::Orange;
bmManager.GetEditSession().UpdateBookmark(pBm1->GetId(), bm1);
bmManager.SaveBookmarkCategory(cat1);
pBm1 = bmManager.GetBookmark(pBm1->GetId());
TEST_EQUAL(pBm1->GetData().m_color.m_predefinedColor, kml::PredefinedColor::Orange, ());
TEST_EQUAL(pBm1->GetData().m_color.m_rgba, 0, ());
}
UNIT_TEST(Bookmarks_Getting) UNIT_TEST(Bookmarks_Getting)
{ {
Framework fm(kFrameworkParams); Framework fm(kFrameworkParams);