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 2621b30399
commit bf75728e7d
289 changed files with 2698 additions and 6484 deletions

View File

@@ -216,6 +216,8 @@ MainWindow::MainWindow(Framework & framework, std::unique_ptr<ScreenshotParams>
m_pDrawWidget->UpdateAfterSettingsChanged();
RoutingSettings::LoadSession(m_pDrawWidget->GetFramework());
SetMapMode(m_pDrawWidget->GetFramework().CurrentMapMode());
}
#if defined(OMIM_OS_WINDOWS)
@@ -277,29 +279,38 @@ void MainWindow::CreateNavigationBar()
}
{
using namespace std::placeholders;
m_defaultMapMode = new PopupMenuHolder(this);
m_defaultMapMode->setDefaultAction(tr("Default"), std::bind(&MainWindow::OnMapModeChange, this, MapMode::DEFAULT));
m_defaultMapMode->addAction(QIcon(":/navig64/mode_options_contourlines.png"), tr("Show Contour Lines"), std::bind(&MainWindow::OnDefaultMapModeOptionChange, this, 0), true);
m_defaultMapMode->setChecked(0, m_pDrawWidget->GetFramework().DefaultMapModeHasContourLines());
pToolBar->addWidget(m_defaultMapMode->create());
m_defaultMapMode->setMainIcon(QIcon(":/navig64/mode_default.png"));
m_layers = new PopupMenuHolder(this);
m_hikingMapMode = new PopupMenuHolder(this);
m_hikingMapMode->setDefaultAction(tr("Hiking"), std::bind(&MainWindow::OnMapModeChange, this, MapMode::HIKING));
m_hikingMapMode->addAction(QIcon(":/navig64/mode_options_contourlines.png"), tr("Show Contour Lines"), std::bind(&MainWindow::OnHikingMapModeOptionChange, this, 0), true);
m_hikingMapMode->setChecked(0, m_pDrawWidget->GetFramework().HikingMapModeHasContourLines());
pToolBar->addWidget(m_hikingMapMode->create());
m_hikingMapMode->setMainIcon(QIcon(":/navig64/mode_hiking.png"));
/// @todo Uncomment when we will integrate a traffic provider.
// m_layers->addAction(QIcon(":/navig64/traffic.png"), tr("Traffic"),
// std::bind(&MainWindow::OnLayerEnabled, this, LayerType::TRAFFIC), true);
// m_layers->setChecked(LayerType::TRAFFIC, m_pDrawWidget->GetFramework().LoadTrafficEnabled());
m_cyclingMapMode = new PopupMenuHolder(this);
m_cyclingMapMode->setDefaultAction(tr("Cycling"), std::bind(&MainWindow::OnMapModeChange, this, MapMode::CYCLING));
m_cyclingMapMode->addAction(QIcon(":/navig64/mode_options_contourlines.png"), tr("Show Contour Lines"), std::bind(&MainWindow::OnCyclingMapModeOptionChange, this, 0), true);
m_cyclingMapMode->setChecked(0, m_pDrawWidget->GetFramework().CyclingMapModeHasContourLines());
pToolBar->addWidget(m_cyclingMapMode->create());
m_cyclingMapMode->setMainIcon(QIcon(":/navig64/mode_cycling.png"));
m_layers->addAction(QIcon(":/navig64/subway.png"), tr("Public transport"),
std::bind(&MainWindow::OnLayerEnabled, this, LayerType::TRANSIT), true);
m_layers->setChecked(LayerType::TRANSIT, m_pDrawWidget->GetFramework().LoadTransitSchemeEnabled());
m_drivingMapMode = new PopupMenuHolder(this);
m_drivingMapMode->setDefaultAction(tr("Driving"), std::bind(&MainWindow::OnMapModeChange, this, MapMode::DRIVING));
pToolBar->addWidget(m_drivingMapMode->create());
m_drivingMapMode->setMainIcon(QIcon(":/navig64/mode_driving.png"));
m_layers->addAction(QIcon(":/navig64/isolines.png"), tr("Isolines"),
std::bind(&MainWindow::OnLayerEnabled, this, LayerType::ISOLINES), true);
m_layers->setChecked(LayerType::ISOLINES, m_pDrawWidget->GetFramework().LoadIsolinesEnabled());
m_layers->addAction(QIcon(":/navig64/isolines.png"), tr("Outdoors"),
std::bind(&MainWindow::OnLayerEnabled, this, LayerType::OUTDOORS), true);
m_layers->setChecked(LayerType::OUTDOORS, m_pDrawWidget->GetFramework().LoadOutdoorsEnabled());
pToolBar->addWidget(m_layers->create());
m_layers->setMainIcon(QIcon(":/navig64/layers.png"));
m_publicTransportMapMode = new PopupMenuHolder(this);
m_publicTransportMapMode->setDefaultAction(tr("Public Transport"), std::bind(&MainWindow::OnMapModeChange, this, MapMode::PUBLICTRANSPORT));
m_publicTransportMapMode->addAction(QIcon(":/navig64/mode_options_transitlines.png"), tr("Show Transit Lines"), std::bind(&MainWindow::OnPublicTransportMapModeOptionChange, this, 0), true);
m_publicTransportMapMode->setChecked(0, m_pDrawWidget->GetFramework().PublicTransportMapModeHasTransitLines());
pToolBar->addWidget(m_publicTransportMapMode->create());
m_publicTransportMapMode->setMainIcon(QIcon(":/navig64/mode_publictransport.png"));
pToolBar->addSeparator();
@@ -856,37 +867,64 @@ void MainWindow::OnRetryDownloadClicked()
GetFramework().GetStorage().RetryDownloadNode(m_lastCountry);
}
void MainWindow::SetLayerEnabled(LayerType type, bool enable)
void MainWindow::SetMapMode(MapMode const mapMode)
{
auto & frm = m_pDrawWidget->GetFramework();
switch (type)
{
// @todo Uncomment when we will integrate a traffic provider.
// case LayerType::TRAFFIC:
// frm.GetTrafficManager().SetEnabled(enable);
// frm.SaveTrafficEnabled(enable);
// break;
case LayerType::TRANSIT:
frm.GetTransitManager().EnableTransitSchemeMode(enable);
frm.SaveTransitSchemeEnabled(enable);
break;
case LayerType::ISOLINES:
frm.GetIsolinesManager().SetEnabled(enable);
frm.SaveIsolinesEnabled(enable);
break;
case LayerType::OUTDOORS:
frm.SaveOutdoorsEnabled(enable);
if (enable)
m_pDrawWidget->SetMapStyleToOutdoors();
else
m_pDrawWidget->SetMapStyleToDefault();
break;
}
frm.SwitchToMapMode(mapMode);
if (MapMode::DEFAULT == mapMode)
m_defaultMapMode->setMainIcon(QIcon(":/navig64/mode_default-selected.png"));
else
m_defaultMapMode->setMainIcon(QIcon(":/navig64/mode_default.png"));
if (MapMode::HIKING == mapMode)
m_hikingMapMode->setMainIcon(QIcon(":/navig64/mode_hiking-selected.png"));
else
m_hikingMapMode->setMainIcon(QIcon(":/navig64/mode_hiking.png"));
if (MapMode::CYCLING == mapMode)
m_cyclingMapMode->setMainIcon(QIcon(":/navig64/mode_cycling-selected.png"));
else
m_cyclingMapMode->setMainIcon(QIcon(":/navig64/mode_cycling.png"));
if (MapMode::DRIVING == mapMode)
m_drivingMapMode->setMainIcon(QIcon(":/navig64/mode_driving-selected.png"));
else
m_drivingMapMode->setMainIcon(QIcon(":/navig64/mode_driving.png"));
if (MapMode::PUBLICTRANSPORT == mapMode)
m_publicTransportMapMode->setMainIcon(QIcon(":/navig64/mode_publictransport-selected.png"));
else
m_publicTransportMapMode->setMainIcon(QIcon(":/navig64/mode_publictransport.png"));
}
void MainWindow::OnLayerEnabled(LayerType layer)
void MainWindow::OnMapModeChange(MapMode const mapMode)
{
SetLayerEnabled(layer, m_layers->isChecked(layer));
SetMapMode(mapMode);
}
void MainWindow::OnDefaultMapModeOptionChange(int8_t const index)
{
auto & frm = m_pDrawWidget->GetFramework();
frm.DefaultMapModeSetContourLines(m_defaultMapMode->isChecked(0));
}
void MainWindow::OnHikingMapModeOptionChange(int8_t const index)
{
auto & frm = m_pDrawWidget->GetFramework();
frm.HikingMapModeSetContourLines(m_hikingMapMode->isChecked(0));
}
void MainWindow::OnCyclingMapModeOptionChange(int8_t const index)
{
auto & frm = m_pDrawWidget->GetFramework();
frm.CyclingMapModeSetContourLines(m_cyclingMapMode->isChecked(0));
}
void MainWindow::OnPublicTransportMapModeOptionChange(int8_t const index)
{
auto & frm = m_pDrawWidget->GetFramework();
frm.PublicTransportMapModeSetTransitLines(m_publicTransportMapMode->isChecked(0));
}
void MainWindow::OnRulerEnabled()