188 lines
6.2 KiB
C#
188 lines
6.2 KiB
C#
using System;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Project_Periodensystem.Model;
|
|
using Project_Periodensystem.Persistence;
|
|
using Project_Periodensystem.Controller;
|
|
|
|
namespace Project_Periodensystem.View
|
|
{
|
|
/// <summary>
|
|
/// Navigation Service Implementation im View-Layer
|
|
/// Implementiert INavigationService Interface vom Controller
|
|
/// SAUBERE TRENNUNG: Controller definiert WAS, View definiert WIE
|
|
/// </summary>
|
|
public class NavigationService : INavigationService
|
|
{
|
|
private readonly MainWindow _mainWindow;
|
|
private PeriodensystemController? _dataController;
|
|
|
|
/// <summary>
|
|
/// Konstruktor
|
|
/// </summary>
|
|
public NavigationService(MainWindow mainWindow)
|
|
{
|
|
_mainWindow = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow));
|
|
Logger.Log("NavigationService initialisiert - saubere Interface-Trennung");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Data Controller setzen (löst zirkuläre Abhängigkeit)
|
|
/// </summary>
|
|
public void SetDataController(PeriodensystemController dataController)
|
|
{
|
|
_dataController = dataController ?? throw new ArgumentNullException(nameof(dataController));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Navigation zum Periodensystem (Interface Implementation)
|
|
/// </summary>
|
|
public void NavigateToPeriodicTable()
|
|
{
|
|
try
|
|
{
|
|
if (_dataController == null)
|
|
{
|
|
Logger.LogError("DataController nicht gesetzt");
|
|
return;
|
|
}
|
|
|
|
var periodicTablePage = new PeriodicTablePage();
|
|
periodicTablePage.SetController(_dataController);
|
|
|
|
var mainContent = _mainWindow.FindControl<ContentControl>("MainContent");
|
|
if (mainContent != null)
|
|
{
|
|
mainContent.Content = periodicTablePage;
|
|
Logger.Log("NavigationService: Navigation zum Periodensystem");
|
|
}
|
|
else
|
|
{
|
|
Logger.LogError("MainContent Control nicht gefunden");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "NavigateToPeriodicTable");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Navigation zur About-Seite (Interface Implementation)
|
|
/// </summary>
|
|
public void NavigateToAbout()
|
|
{
|
|
try
|
|
{
|
|
if (_dataController == null)
|
|
{
|
|
Logger.LogError("DataController nicht gesetzt");
|
|
return;
|
|
}
|
|
|
|
var aboutPage = new AboutPage();
|
|
aboutPage.SetController(_dataController);
|
|
|
|
var mainContent = _mainWindow.FindControl<ContentControl>("MainContent");
|
|
if (mainContent != null)
|
|
{
|
|
mainContent.Content = aboutPage;
|
|
Logger.Log("NavigationService: Navigation zu About");
|
|
}
|
|
else
|
|
{
|
|
Logger.LogError("MainContent Control nicht gefunden");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "NavigateToAbout");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Navigation zur Landing Page (Interface Implementation)
|
|
/// </summary>
|
|
public void NavigateToLanding()
|
|
{
|
|
try
|
|
{
|
|
if (_dataController == null)
|
|
{
|
|
Logger.LogError("DataController nicht gesetzt");
|
|
return;
|
|
}
|
|
|
|
var landingPage = new LandingPage();
|
|
landingPage.SetController(_dataController);
|
|
|
|
var mainContent = _mainWindow.FindControl<ContentControl>("MainContent");
|
|
if (mainContent != null)
|
|
{
|
|
mainContent.Content = landingPage;
|
|
Logger.Log("NavigationService: Navigation zur Landing Page");
|
|
}
|
|
else
|
|
{
|
|
Logger.LogError("MainContent Control nicht gefunden");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "NavigateToLanding");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Theme-Wechsel (Interface Implementation)
|
|
/// </summary>
|
|
public void ToggleTheme()
|
|
{
|
|
try
|
|
{
|
|
var app = Application.Current;
|
|
if (app != null)
|
|
{
|
|
var currentTheme = app.ActualThemeVariant;
|
|
var newTheme = currentTheme == Avalonia.Styling.ThemeVariant.Dark
|
|
? Avalonia.Styling.ThemeVariant.Light
|
|
: Avalonia.Styling.ThemeVariant.Dark;
|
|
|
|
app.RequestedThemeVariant = newTheme;
|
|
|
|
// Settings speichern
|
|
var settings = new AppSettings
|
|
{
|
|
LastTheme = newTheme.ToString() ?? "Dark",
|
|
LastUsed = DateTime.Now,
|
|
PreferredLanguage = "German"
|
|
};
|
|
DataManager.SaveSettings(settings);
|
|
|
|
Logger.Log($"NavigationService: Theme gewechselt zu {newTheme}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "ToggleTheme");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Export-Bestätigung anzeigen (Interface Implementation)
|
|
/// </summary>
|
|
public void ShowExportConfirmation()
|
|
{
|
|
try
|
|
{
|
|
Logger.Log("NavigationService: Export-Bestätigung angezeigt");
|
|
// Hier könnte ein Dialog oder Notification angezeigt werden
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogException(ex, "ShowExportConfirmation");
|
|
}
|
|
}
|
|
}
|
|
}
|