WIP: Modes

Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
Yannik Bloscheck
2026-01-19 21:43:39 +01:00
parent e56e54f994
commit 0dd8059814
127 changed files with 11823 additions and 1030 deletions

View File

@@ -93,9 +93,11 @@ std::string_view constexpr kAllow3dKey = "Allow3d";
std::string_view constexpr kAllow3dBuildingsKey = "Buildings3d";
std::string_view constexpr kAllowAutoZoom = "AutoZoom";
std::string_view constexpr kTrafficEnabledKey = "TrafficEnabled";
std::string_view constexpr kTransitSchemeEnabledKey = "TransitSchemeEnabled";
std::string_view constexpr kIsolinesEnabledKey = "IsolinesEnabled";
std::string_view constexpr kOutdoorsEnabledKey = "OutdoorsEnabled";
std::string_view constexpr kMapModeKey = "MapMode";
std::string_view constexpr kMapModeDefaultIsolinesKey = "MapModeDefaultHasIsolines";
std::string_view constexpr kMapModeHikingIsolinesKey = "MapModeHikingHasIsolines";
std::string_view constexpr kMapModeCyclingIsolinesKey = "MapModeCyclingHasIsolines";
std::string_view constexpr kMapModePublicTransportSubwaysKey = "MapModePublicTransportHasSubways";
std::string_view constexpr kTrafficSimplifiedColorsKey = "TrafficSimplifiedColors";
std::string_view constexpr kLargeFontsSize = "LargeFontsSize";
std::string_view constexpr kTranslitMode = "TransliterationMode";
@@ -211,21 +213,6 @@ TrafficManager & Framework::GetTrafficManager()
return m_trafficManager;
}
TransitReadManager & Framework::GetTransitManager()
{
return m_transitManager;
}
IsolinesManager & Framework::GetIsolinesManager()
{
return m_isolinesManager;
}
IsolinesManager const & Framework::GetIsolinesManager() const
{
return m_isolinesManager;
}
void Framework::OnUserPositionChanged(m2::PointD const & position, bool hasPosition)
{
GetBookmarkManager().MyPositionMark().SetUserPosition(position, hasPosition);
@@ -353,8 +340,8 @@ Framework::Framework(FrameworkParams const & params, bool loadMaps)
// m_trafficManager.SetSimplifiedColorScheme(LoadTrafficSimplifiedColors());
// m_trafficManager.SetEnabled(LoadTrafficEnabled());
m_isolinesManager.SetEnabled(LoadIsolinesEnabled());
SwitchToMapMode(CurrentMapMode());
InitTransliteration();
LOG(LDEBUG, ("Transliterators initialized"));
@@ -1482,7 +1469,6 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::GraphicsContextFactory> contextFac
auto const isAutozoomEnabled = LoadAutoZoom();
auto const trafficEnabled = m_trafficManager.IsEnabled();
auto const isolinesEnabled = m_isolinesManager.IsEnabled();
auto const simplifiedTrafficColors = m_trafficManager.HasSimplifiedColorScheme();
auto const fontsScaleFactor = LoadLargeFontsSize() ? kLargeFontsScaleFactor : 1.0;
@@ -1492,7 +1478,7 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::GraphicsContextFactory> contextFac
df::MapDataProvider(std::move(idReadFn), std::move(featureReadFn), std::move(isCountryLoadedByNameFn),
std::move(updateCurrentCountryFn)),
params.m_hints, params.m_visualScale, fontsScaleFactor, std::move(params.m_widgetsInitInfo),
std::move(myPositionModeChangedFn), allow3dBuildings, trafficEnabled, isolinesEnabled,
std::move(myPositionModeChangedFn), allow3dBuildings, trafficEnabled, false,
params.m_isChoosePositionMode, params.m_isChoosePositionMode, GetSelectedFeatureTriangles(),
m_routingManager.IsRoutingActive() && m_routingManager.IsRoutingFollowing(), isAutozoomEnabled,
simplifiedTrafficColors, std::nullopt /* arrow3dCustomDecl */, std::move(overlaysShowStatsFn),
@@ -1530,9 +1516,6 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::GraphicsContextFactory> contextFac
InvalidateUserMarks();
auto const transitSchemeEnabled = LoadTransitSchemeEnabled();
m_transitManager.EnableTransitSchemeMode(transitSchemeEnabled);
// Show debug info if it's enabled in the config.
bool showDebugInfo;
if (!settings::Get(kShowDebugInfo, showDebugInfo))
@@ -1541,6 +1524,8 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::GraphicsContextFactory> contextFac
m_drapeEngine->ShowDebugInfo(showDebugInfo);
benchmark::RunGraphicsBenchmark(this);
SwitchToMapMode(CurrentMapMode());
}
void Framework::OnRecoverSurface(int width, int height, bool recreateContextDependentResources)
@@ -2510,43 +2495,216 @@ void Framework::SaveAutoZoom(bool allowAutoZoom)
settings::Set(kAllowAutoZoom, allowAutoZoom);
}
bool Framework::LoadTransitSchemeEnabled()
MapMode Framework::CurrentMapMode()
{
bool enabled;
if (!settings::Get(kTransitSchemeEnabledKey, enabled))
enabled = false;
return enabled;
string mapModeValue = "Default";
UNUSED_VALUE(settings::Get(kMapModeKey, mapModeValue));
MapMode mapMode = DEFAULT;
if (mapModeValue == "Hiking")
mapMode = HIKING;
else if (mapModeValue == "Cycling")
mapMode = CYCLING;
else if (mapModeValue == "Driving")
mapMode = DRIVING;
else if (mapModeValue == "PublicTransport")
mapMode = PUBLICTRANSPORT;
return mapMode;
}
void Framework::SaveTransitSchemeEnabled(bool enabled)
void Framework::SwitchToMapMode(MapMode const mapMode)
{
settings::Set(kTransitSchemeEnabledKey, enabled);
MapStyle mapStyle = GetMapStyle();
string mapModeValue = "Default";
switch (mapMode)
{
case HIKING:
mapModeValue = "Hiking";
if (MapStyleIsDark(mapStyle))
mapStyle = MapStyleHikingDark;
else
mapStyle = MapStyleHikingLight;
break;
case CYCLING:
mapModeValue = "Cycling";
if (MapStyleIsDark(mapStyle))
mapStyle = MapStyleCyclingDark;
else
mapStyle = MapStyleCyclingLight;
break;
case DRIVING:
mapModeValue = "Driving";
if (MapStyleIsDark(mapStyle))
mapStyle = MapStyleDrivingDark;
else
mapStyle = MapStyleDrivingLight;
break;
case PUBLICTRANSPORT:
mapModeValue = "PublicTransport";
if (MapStyleIsDark(mapStyle))
mapStyle = MapStylePublicTransportDark;
else
mapStyle = MapStylePublicTransportLight;
break;
default:
mapModeValue = "Default";
if (MapStyleIsDark(mapStyle))
mapStyle = MapStyleDefaultDark;
else
mapStyle = MapStyleDefaultLight;
break;
}
settings::Set(kMapModeKey, mapModeValue);
SetMapStyle(mapStyle);
RefreshMapMode();
}
bool Framework::LoadIsolinesEnabled()
MapAppearance Framework::CurrentMapAppearance()
{
bool enabled;
if (!settings::Get(kIsolinesEnabledKey, enabled))
enabled = false;
return enabled;
if (MapStyleIsDark(GetMapStyle()))
return DARK;
return LIGHT;
}
void Framework::SaveIsolinesEnabled(bool enabled)
void Framework::SwitchToMapAppearance(MapAppearance const mapAppearance)
{
settings::Set(kIsolinesEnabledKey, enabled);
MapStyle mapStyle = GetMapStyle();
if (mapAppearance == DARK)
mapStyle = GetLightMapStyleVariant(mapStyle);
else
mapStyle = GetDarkMapStyleVariant(mapStyle);
SetMapStyle(mapStyle);
}
bool Framework::LoadOutdoorsEnabled()
bool Framework::IsUsingVehicleStyle()
{
bool enabled;
if (!settings::Get(kOutdoorsEnabledKey, enabled))
enabled = false;
return enabled;
MapStyle const mapStyle = GetMapStyle();
return mapStyle == MapStyleVehicleLight || mapStyle == MapStyleVehicleDark;
}
void Framework::SaveOutdoorsEnabled(bool enabled)
void Framework::SwitchToUsingVehicleStyle(bool const shouldUseVehicleStyle)
{
settings::Set(kOutdoorsEnabledKey, enabled);
if (shouldUseVehicleStyle)
{
if (CurrentMapAppearance() == DARK)
SetMapStyle(MapStyleVehicleDark);
else
SetMapStyle(MapStyleVehicleLight);
}
else
{
SwitchToMapMode(CurrentMapMode());
}
}
bool Framework::DefaultMapModeHasIsolines()
{
bool hasIsolines;
if (!settings::Get(kMapModeDefaultIsolinesKey, hasIsolines))
hasIsolines = false;
return hasIsolines;
}
void Framework::DefaultMapModeSetIsolines(bool const hasIsolines)
{
settings::Set(kMapModeDefaultIsolinesKey, hasIsolines);
RefreshMapMode();
}
bool Framework::HikingMapModeHasIsolines()
{
bool hasIsolines;
if (!settings::Get(kMapModeHikingIsolinesKey, hasIsolines))
hasIsolines = false;
return hasIsolines;
}
void Framework::HikingMapModeSetIsolines(bool const hasIsolines)
{
settings::Set(kMapModeHikingIsolinesKey, hasIsolines);
RefreshMapMode();
}
bool Framework::CyclingMapModeHasIsolines()
{
bool hasIsolines;
if (!settings::Get(kMapModeCyclingIsolinesKey, hasIsolines))
hasIsolines = false;
return hasIsolines;
}
void Framework::CyclingMapModeSetIsolines(bool const hasIsolines)
{
settings::Set(kMapModeCyclingIsolinesKey, hasIsolines);
RefreshMapMode();
}
bool Framework::PublicTransportMapModeHasSubways()
{
bool hasSubways;
if (!settings::Get(kMapModePublicTransportSubwaysKey, hasSubways))
hasSubways = false;
return hasSubways;
}
void Framework::PublicTransportMapModeSetSubways(bool const hasSubways)
{
settings::Set(kMapModePublicTransportSubwaysKey, hasSubways);
RefreshMapMode();
}
void Framework::RefreshMapMode()
{
switch (CurrentMapMode())
{
case DEFAULT:
if (m_isolinesManager.IsEnabled() != DefaultMapModeHasIsolines())
m_isolinesManager.SetEnabled(DefaultMapModeHasIsolines());
if (m_transitManager.IsTransitSchemeModeEnabled())
m_transitManager.EnableTransitSchemeMode(false);
break;
case HIKING:
if (m_isolinesManager.IsEnabled() != HikingMapModeHasIsolines())
m_isolinesManager.SetEnabled(HikingMapModeHasIsolines());
if (m_transitManager.IsTransitSchemeModeEnabled())
m_transitManager.EnableTransitSchemeMode(false);
break;
case CYCLING:
if (m_isolinesManager.IsEnabled() != CyclingMapModeHasIsolines())
m_isolinesManager.SetEnabled(CyclingMapModeHasIsolines());
if (m_transitManager.IsTransitSchemeModeEnabled())
m_transitManager.EnableTransitSchemeMode(false);
break;
case PUBLICTRANSPORT:
if (m_isolinesManager.IsEnabled())
m_isolinesManager.SetEnabled(false);
if (m_transitManager.IsTransitSchemeModeEnabled() != PublicTransportMapModeHasSubways())
m_transitManager.EnableTransitSchemeMode(PublicTransportMapModeHasSubways());
break;
default:
if (m_isolinesManager.IsEnabled())
m_isolinesManager.SetEnabled(false);
if (m_transitManager.IsTransitSchemeModeEnabled())
m_transitManager.EnableTransitSchemeMode(false);
break;
}
}
void Framework::EnableChoosePositionMode(bool enable, bool enableBounds, m2::PointD const * optionalPosition)
@@ -2589,17 +2747,13 @@ bool Framework::ParseDrapeDebugCommand(string const & query)
{
MapStyle desiredStyle = MapStyleCount;
if (query == "?dark" || query == "mapstyle:dark")
desiredStyle = MapStyleDefaultDark;
desiredStyle = MapStyleDefaultDark; // TODO: Mode
else if (query == "?light" || query == "mapstyle:light")
desiredStyle = MapStyleDefaultLight;
desiredStyle = MapStyleDefaultLight; // TODO: Mode
else if (query == "?vlight" || query == "mapstyle:vehicle_light")
desiredStyle = MapStyleVehicleLight;
else if (query == "?vdark" || query == "mapstyle:vehicle_dark")
desiredStyle = MapStyleVehicleDark;
else if (query == "?olight" || query == "mapstyle:outdoors_light")
desiredStyle = MapStyleOutdoorsLight;
else if (query == "?odark" || query == "mapstyle:outdoors_dark")
desiredStyle = MapStyleOutdoorsDark;
if (desiredStyle != MapStyleCount)
{