diff --git a/Project_Periodensystem.Controller/INavigationService.cs b/Project_Periodensystem.Controller/INavigationService.cs new file mode 100644 index 0000000..684471a --- /dev/null +++ b/Project_Periodensystem.Controller/INavigationService.cs @@ -0,0 +1,17 @@ +using System; + +namespace Project_Periodensystem.Controller +{ + /// + /// Interface für Navigation - trennt Controller von UI-Dependencies + /// Controller definiert WAS navigiert wird, View definiert WIE + /// + public interface INavigationService + { + void NavigateToPeriodicTable(); + void NavigateToAbout(); + void NavigateToLanding(); + void ToggleTheme(); + void ShowExportConfirmation(); + } +} diff --git a/Project_Periodensystem.Controller/PeriodensystemController.cs b/Project_Periodensystem.Controller/PeriodensystemController.cs index 531a5d7..24b2005 100644 --- a/Project_Periodensystem.Controller/PeriodensystemController.cs +++ b/Project_Periodensystem.Controller/PeriodensystemController.cs @@ -9,17 +9,22 @@ namespace Project_Periodensystem.Controller /// /// Controller für das Periodensystem - verwaltet die Geschäftslogik /// und trennt View von Model gemäß MVC-Pattern + /// SAUBERE ARCHITEKTUR: Verwendet Interface für Navigation /// public class PeriodensystemController { // Nullable Field um Warning zu vermeiden private List _elements = new List(); - + + // Navigation Service Interface (KEINE direkte UI-Dependency!) + private readonly INavigationService? _navigationService; + /// - /// Konstruktor - initialisiert den Controller + /// Konstruktor - optional mit Navigation Service /// - public PeriodensystemController() + public PeriodensystemController(INavigationService? navigationService = null) { + _navigationService = navigationService; LoadElements(); } @@ -346,5 +351,91 @@ namespace Project_Periodensystem.Controller return (lightest, heaviest); } + + // ===== NAVIGATION CONTROLLER METHODS (SAUBERES MVC MIT INTERFACE) ===== + + /// + /// Behandelt Navigation zum Periodensystem (Controller-Logic) + /// + public void HandleNavigateToPeriodicTable() + { + try + { + Logger.Log("Controller: Navigation zum Periodensystem angefordert"); + _navigationService?.NavigateToPeriodicTable(); + } + catch (Exception ex) + { + Logger.LogException(ex, "HandleNavigateToPeriodicTable"); + } + } + + /// + /// Behandelt Navigation zur About-Seite (Controller-Logic) + /// + public void HandleNavigateToAbout() + { + try + { + Logger.Log("Controller: Navigation zu About angefordert"); + _navigationService?.NavigateToAbout(); + } + catch (Exception ex) + { + Logger.LogException(ex, "HandleNavigateToAbout"); + } + } + + /// + /// Behandelt Navigation zur Landing Page (Controller-Logic) + /// + public void HandleNavigateToLanding() + { + try + { + Logger.Log("Controller: Navigation zur Landing Page angefordert"); + _navigationService?.NavigateToLanding(); + } + catch (Exception ex) + { + Logger.LogException(ex, "HandleNavigateToLanding"); + } + } + + /// + /// Behandelt Theme-Wechsel (Controller-Logic) + /// + public void HandleToggleTheme() + { + try + { + Logger.Log("Controller: Theme-Wechsel angefordert"); + _navigationService?.ToggleTheme(); + } + catch (Exception ex) + { + Logger.LogException(ex, "HandleToggleTheme"); + } + } + + /// + /// Behandelt Daten-Export (Controller-Logic) + /// + public void HandleExportData() + { + try + { + Logger.Log("Controller: Daten-Export angefordert"); + + // Geschäftslogik für Export + SaveElements(); // Persistierung + + _navigationService?.ShowExportConfirmation(); + } + catch (Exception ex) + { + Logger.LogException(ex, "HandleExportData"); + } + } } } diff --git a/Project_Periodensystem.View/AboutPage.axaml.cs b/Project_Periodensystem.View/AboutPage.axaml.cs index 79a2ef0..d4e95f8 100644 --- a/Project_Periodensystem.View/AboutPage.axaml.cs +++ b/Project_Periodensystem.View/AboutPage.axaml.cs @@ -5,14 +5,17 @@ using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.VisualTree; using Project_Periodensystem.Model; +using Project_Periodensystem.Controller; namespace Project_Periodensystem.View { /// - /// Code-Behind für die About-Seite + /// Code-Behind für die About-Seite - SAUBERES MVC /// public partial class AboutPage : UserControl { + private PeriodensystemController? _controller; + /// /// Konstruktor /// @@ -21,54 +24,63 @@ namespace Project_Periodensystem.View InitializeComponent(); } + /// + /// Controller setzen (Dependency Injection für MVC) + /// + public void SetController(PeriodensystemController controller) + { + _controller = controller ?? throw new ArgumentNullException(nameof(controller)); + Logger.Log("AboutPage: Controller gesetzt (MVC-Pattern)"); + } + private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } /// - /// Zurück-Button - Navigation zur Landing Page + /// Zurück-Button - Navigation zur Landing Page - SAUBERES MVC /// private void BackButton_Click(object? sender, RoutedEventArgs e) { try { - var mainWindow = TopLevel.GetTopLevel(this) as Window; - if (mainWindow != null) + if (_controller != null) { - var landingPage = new LandingPage(); - mainWindow.Content = landingPage; - Logger.Log("Navigation zurück zur Landing Page"); + // Controller übernimmt Navigation + _controller.HandleNavigateToLanding(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann nicht navigieren"); } } - catch (System.Exception ex) + catch (Exception ex) { - Logger.Log($"Fehler bei Navigation zurück: {ex.Message}"); + Logger.LogException(ex, "BackButton_Click"); } } /// - /// Event-Handler für Theme-Button - VEREINHEITLICHT mit anderen Seiten + /// Event-Handler für Theme-Button - SAUBERES MVC /// private void ThemeButton_Click(object? sender, RoutedEventArgs e) { try { - // GLEICHE LOGIK wie auf LandingPage und PeriodicTablePage - var app = Application.Current; - if (app != null) + if (_controller != null) { - var currentTheme = app.ActualThemeVariant; - app.RequestedThemeVariant = currentTheme == Avalonia.Styling.ThemeVariant.Dark - ? Avalonia.Styling.ThemeVariant.Light - : Avalonia.Styling.ThemeVariant.Dark; - - Logger.Log($"Theme gewechselt zu: {app.RequestedThemeVariant}"); + // Controller übernimmt Theme-Logik + _controller.HandleToggleTheme(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann Theme nicht wechseln"); } } catch (Exception ex) { - Logger.Log($"Fehler beim Theme-Wechsel: {ex.Message}"); + Logger.LogException(ex, "ThemeButton_Click"); } } } diff --git a/Project_Periodensystem.View/LandingPage.axaml.cs b/Project_Periodensystem.View/LandingPage.axaml.cs index 818b1f9..0679607 100644 --- a/Project_Periodensystem.View/LandingPage.axaml.cs +++ b/Project_Periodensystem.View/LandingPage.axaml.cs @@ -4,14 +4,18 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Project_Periodensystem.Model; using Project_Periodensystem.Persistence; +using Project_Periodensystem.Controller; namespace Project_Periodensystem.View { /// - /// Code-Behind für die Landing Page + /// Code-Behind für die Landing Page - SAUBERES MVC + /// Keine direkte Navigation mehr, nur Controller-Aufrufe /// public partial class LandingPage : UserControl { + private PeriodensystemController? _controller; + /// /// Konstruktor /// @@ -21,84 +25,80 @@ namespace Project_Periodensystem.View } /// - /// Event-Handler für Periodensystem-Button + /// Controller setzen (Dependency Injection für MVC) + /// + public void SetController(PeriodensystemController controller) + { + _controller = controller ?? throw new ArgumentNullException(nameof(controller)); + Logger.Log("LandingPage: Controller gesetzt (MVC-Pattern)"); + } + + /// + /// Event-Handler für Periodensystem-Button - SAUBERES MVC /// private void PeriodicTableButton_Click(object? sender, RoutedEventArgs e) { try { - var mainWindow = TopLevel.GetTopLevel(this) as Window; - if (mainWindow != null) + if (_controller != null) { - var periodicTablePage = new PeriodicTablePage(); - mainWindow.Content = periodicTablePage; - Logger.Log("Navigation zum Periodensystem"); + // Controller übernimmt Navigation (kein direkter View-Zugriff!) + _controller.HandleNavigateToPeriodicTable(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann nicht navigieren"); } } catch (Exception ex) { - Logger.Log($"Fehler bei Navigation zum Periodensystem: {ex.Message}"); + Logger.LogException(ex, "PeriodicTableButton_Click"); } } /// - /// Event-Handler für About-Button + /// Event-Handler für About-Button - SAUBERES MVC /// private void AboutButton_Click(object? sender, RoutedEventArgs e) { try { - var mainWindow = TopLevel.GetTopLevel(this) as Window; - if (mainWindow != null) + if (_controller != null) { - var aboutPage = new AboutPage(); - mainWindow.Content = aboutPage; - Logger.Log("Navigation zur About-Seite"); + // Controller übernimmt Navigation + _controller.HandleNavigateToAbout(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann nicht navigieren"); } } catch (Exception ex) { - Logger.Log($"Fehler bei Navigation zu About: {ex.Message}"); + Logger.LogException(ex, "AboutButton_Click"); } } /// - /// Event-Handler für Theme-Button (MIT SETTINGS-SPEICHERUNG) + /// Event-Handler für Theme-Button - SAUBERES MVC /// private void ThemeButton_Click(object? sender, RoutedEventArgs e) { try { - Logger.Log("Theme-Button geklickt"); - - var app = Application.Current; - if (app != null) + if (_controller != null) { - var currentTheme = app.ActualThemeVariant; - Logger.Log($"Aktuelles Theme: {currentTheme}"); - - var newTheme = currentTheme == Avalonia.Styling.ThemeVariant.Dark - ? Avalonia.Styling.ThemeVariant.Light - : Avalonia.Styling.ThemeVariant.Dark; - - app.RequestedThemeVariant = newTheme; - Logger.Log($"Theme gewechselt zu: {newTheme}"); - - // NEUE FUNKTION: Theme-Einstellung speichern - var settings = DataManager.LoadSettings(); - settings.LastTheme = newTheme.ToString(); - settings.LastUsed = DateTime.Now; - DataManager.SaveSettings(settings); - Logger.Log("Theme-Einstellung gespeichert"); + // Controller übernimmt Theme-Logik + _controller.HandleToggleTheme(); } else { - Logger.Log("Application.Current ist null!"); + Logger.LogError("Controller nicht gesetzt - kann Theme nicht wechseln"); } } catch (Exception ex) { - Logger.Log($"EXCEPTION in ThemeButton_Click: {ex.Message}"); + Logger.LogException(ex, "ThemeButton_Click"); } } } diff --git a/Project_Periodensystem.View/MainWindow.axaml.cs b/Project_Periodensystem.View/MainWindow.axaml.cs index 26e7050..1a91175 100644 --- a/Project_Periodensystem.View/MainWindow.axaml.cs +++ b/Project_Periodensystem.View/MainWindow.axaml.cs @@ -1,20 +1,34 @@ using Avalonia; using Avalonia.Controls; using Project_Periodensystem.Model; +using Project_Periodensystem.Controller; namespace Project_Periodensystem.View { /// - /// Vereinfachtes MainWindow - nur noch Container für Content + /// MainWindow mit sauberem MVC-Pattern und Interface-basierter Navigation /// public partial class MainWindow : Window { private ContentControl? mainContent; + private readonly PeriodensystemController _dataController; + private readonly NavigationService _navigationService; public MainWindow() { InitializeComponent(); mainContent = this.FindControl("MainContent"); + + // Erstelle Navigation Service + _navigationService = new NavigationService(this); + + // Controller mit Navigation Service initialisieren (Dependency Injection) + _dataController = new PeriodensystemController(_navigationService); + + // Data Controller an Navigation Service setzen + _navigationService.SetDataController(_dataController); + + // Landing Page anzeigen ShowLandingPage(); } @@ -25,41 +39,21 @@ namespace Project_Periodensystem.View { if (mainContent != null) { - mainContent.Content = new LandingPage(); - Logger.Log("Landing Page angezeigt"); + var landingPage = new LandingPage(); + landingPage.SetController(_dataController); + + mainContent.Content = landingPage; + Logger.Log("Landing Page angezeigt (mit Interface-basierter Navigation)"); } } /// - /// Zeigt das Periodensystem an + /// Cleanup beim Schließen /// - public void ShowPeriodicTable() + protected override void OnClosed(System.EventArgs e) { - Logger.Log("ShowPeriodicTable called"); - try - { - if (mainContent != null) - { - mainContent.Content = new PeriodicTablePage(); - Logger.Log("PeriodicTablePage created and set"); - } - } - catch (System.Exception ex) - { - Logger.Log($"Error in ShowPeriodicTable: {ex.Message}"); - } - } - - /// - /// Zeigt die About Page an - /// - public void ShowAboutPage() - { - if (mainContent != null) - { - mainContent.Content = new AboutPage(); - Logger.Log("About Page angezeigt"); - } + // NavigationService implementiert kein IDisposable mehr (keine Events) + base.OnClosed(e); } } } diff --git a/Project_Periodensystem.View/NavigationService.cs b/Project_Periodensystem.View/NavigationService.cs new file mode 100644 index 0000000..7913699 --- /dev/null +++ b/Project_Periodensystem.View/NavigationService.cs @@ -0,0 +1,163 @@ +using System; +using Avalonia; +using Avalonia.Controls; +using Project_Periodensystem.Model; +using Project_Periodensystem.Persistence; +using Project_Periodensystem.Controller; + +namespace Project_Periodensystem.View +{ + /// + /// Navigation Service Implementation im View-Layer + /// Implementiert INavigationService Interface vom Controller + /// SAUBERE TRENNUNG: Controller definiert WAS, View definiert WIE + /// + public class NavigationService : INavigationService + { + private readonly Window _mainWindow; + private PeriodensystemController? _dataController; + + /// + /// Konstruktor + /// + public NavigationService(Window mainWindow) + { + _mainWindow = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow)); + Logger.Log("NavigationService initialisiert - saubere Interface-Trennung"); + } + + /// + /// Data Controller setzen (löst zirkuläre Abhängigkeit) + /// + public void SetDataController(PeriodensystemController dataController) + { + _dataController = dataController ?? throw new ArgumentNullException(nameof(dataController)); + } + + /// + /// Navigation zum Periodensystem (Interface Implementation) + /// + public void NavigateToPeriodicTable() + { + try + { + if (_dataController == null) + { + Logger.LogError("DataController nicht gesetzt"); + return; + } + + var periodicTablePage = new PeriodicTablePage(); + periodicTablePage.SetController(_dataController); + + _mainWindow.Content = periodicTablePage; + Logger.Log("NavigationService: Navigation zum Periodensystem"); + } + catch (Exception ex) + { + Logger.LogException(ex, "NavigateToPeriodicTable"); + } + } + + /// + /// Navigation zur About-Seite (Interface Implementation) + /// + public void NavigateToAbout() + { + try + { + if (_dataController == null) + { + Logger.LogError("DataController nicht gesetzt"); + return; + } + + var aboutPage = new AboutPage(); + aboutPage.SetController(_dataController); + + _mainWindow.Content = aboutPage; + Logger.Log("NavigationService: Navigation zu About"); + } + catch (Exception ex) + { + Logger.LogException(ex, "NavigateToAbout"); + } + } + + /// + /// Navigation zur Landing Page (Interface Implementation) + /// + public void NavigateToLanding() + { + try + { + if (_dataController == null) + { + Logger.LogError("DataController nicht gesetzt"); + return; + } + + var landingPage = new LandingPage(); + landingPage.SetController(_dataController); + + _mainWindow.Content = landingPage; + Logger.Log("NavigationService: Navigation zur Landing Page"); + } + catch (Exception ex) + { + Logger.LogException(ex, "NavigateToLanding"); + } + } + + /// + /// Theme-Wechsel (Interface Implementation) + /// + 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"); + } + } + + /// + /// Export-Bestätigung anzeigen (Interface Implementation) + /// + 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"); + } + } + } +} diff --git a/Project_Periodensystem.View/PeriodicTablePage.axaml.cs b/Project_Periodensystem.View/PeriodicTablePage.axaml.cs index 2b2127c..2f35c3c 100644 --- a/Project_Periodensystem.View/PeriodicTablePage.axaml.cs +++ b/Project_Periodensystem.View/PeriodicTablePage.axaml.cs @@ -18,20 +18,26 @@ namespace Project_Periodensystem.View public partial class PeriodicTablePage : UserControl { private readonly Grid? periodicGrid; - private readonly PeriodensystemController _controller; + private PeriodensystemController? _controller; /// - /// Konstruktor - initialisiert UI und Controller + /// Konstruktor - initialisiert UI (Controller wird per SetController gesetzt) /// public PeriodicTablePage() { InitializeComponent(); - // Controller initialisieren (MVC-Pattern) - _controller = new PeriodensystemController(); - // Grid-Referenz für Element-Buttons periodicGrid = this.FindControl("PeriodicGrid"); + } + + /// + /// Controller setzen (Dependency Injection für MVC) + /// + public void SetController(PeriodensystemController controller) + { + _controller = controller ?? throw new ArgumentNullException(nameof(controller)); + Logger.Log("PeriodicTablePage: Controller gesetzt (MVC-Pattern)"); // Elemente laden und anzeigen LoadAndDisplayElements(); @@ -44,6 +50,12 @@ namespace Project_Periodensystem.View { try { + if (_controller == null) + { + Logger.LogError("Controller nicht gesetzt - kann Elemente nicht laden"); + return; + } + // Daten über Controller laden (nicht direkt!) var elements = _controller.GetAllElements(); @@ -153,49 +165,48 @@ namespace Project_Periodensystem.View } /// - /// Event-Handler für Theme-Button + /// Event-Handler für Theme-Button - SAUBERES MVC /// private void ThemeButton_Click(object? sender, RoutedEventArgs e) { try { - // Theme-Wechsel über Application - var app = Application.Current; - if (app != null) + if (_controller != null) { - var currentTheme = app.ActualThemeVariant; - app.RequestedThemeVariant = currentTheme == Avalonia.Styling.ThemeVariant.Dark - ? Avalonia.Styling.ThemeVariant.Light - : Avalonia.Styling.ThemeVariant.Dark; - - Logger.Log($"Theme gewechselt zu: {app.RequestedThemeVariant}"); + // Controller übernimmt Theme-Logik + _controller.HandleToggleTheme(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann Theme nicht wechseln"); } } catch (Exception ex) { - Logger.Log($"Fehler beim Theme-Wechsel: {ex.Message}"); + Logger.LogException(ex, "ThemeButton_Click"); } } /// - /// Event-Handler für About-Button + /// Event-Handler für About-Button - SAUBERES MVC /// private void AboutButton_Click(object? sender, RoutedEventArgs e) { try { - // Navigation zur About-Seite - var mainWindow = TopLevel.GetTopLevel(this) as Window; - if (mainWindow != null) + if (_controller != null) { - var aboutPage = new AboutPage(); - mainWindow.Content = aboutPage; - Logger.Log("Navigation zur About-Seite"); + // Controller übernimmt Navigation + _controller.HandleNavigateToAbout(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann nicht navigieren"); } } catch (Exception ex) { - Logger.Log($"Fehler bei Navigation zu About: {ex.Message}"); + Logger.LogException(ex, "AboutButton_Click"); } } @@ -221,22 +232,25 @@ namespace Project_Periodensystem.View } /// - /// Export-Button für Element-Daten (NEUE FUNKTION) + /// Export-Button für Element-Daten - SAUBERES MVC /// private void ExportButton_Click(object? sender, RoutedEventArgs e) { try { - var elements = _controller.GetAllElements(); - DataManager.SaveElements(elements); - Logger.Log($"Export: {elements.Count} Elemente als JSON gespeichert"); - - // Optional: Benutzer-Feedback - // ShowMessage("Daten erfolgreich exportiert!"); + if (_controller != null) + { + // Controller übernimmt Export-Logik + _controller.HandleExportData(); + } + else + { + Logger.LogError("Controller nicht gesetzt - kann nicht exportieren"); + } } catch (Exception ex) { - Logger.Log($"EXCEPTION in ExportButton_Click: {ex.Message}"); + Logger.LogException(ex, "ExportButton_Click"); } } } diff --git a/Project_Periodensystem.View/projektstruktur.txt b/Project_Periodensystem.View/projektstruktur.txt deleted file mode 100644 index f56239e..0000000 --- a/Project_Periodensystem.View/projektstruktur.txt +++ /dev/null @@ -1,253 +0,0 @@ -Auflistung der Ordnerpfade -Volumeseriennummer : 00C1-D40F -C:. -¦ AboutPage.axaml -¦ AboutPage.axaml.cs -¦ App.axaml -¦ App.axaml.cs -¦ app.manifest -¦ LandingPage.axaml -¦ LandingPage.axaml.cs -¦ logger.cs -¦ MainWindow.axaml -¦ MainWindow.axaml.cs -¦ PeriodicTablePage.axaml -¦ PeriodicTablePage.axaml.cs -¦ Program.cs -¦ Project_Periodensystem.View.csproj -¦ Project_Periodensystem.View.sln -¦ projektstruktur.txt -¦ -+---bin -¦ +---Debug -¦ +---net8.0 -¦ ¦ app_log.txt -¦ ¦ Avalonia.Base.dll -¦ ¦ Avalonia.Controls.ColorPicker.dll -¦ ¦ Avalonia.Controls.DataGrid.dll -¦ ¦ Avalonia.Controls.dll -¦ ¦ Avalonia.DesignerSupport.dll -¦ ¦ Avalonia.Desktop.dll -¦ ¦ Avalonia.Diagnostics.dll -¦ ¦ Avalonia.Dialogs.dll -¦ ¦ Avalonia.dll -¦ ¦ Avalonia.FreeDesktop.dll -¦ ¦ Avalonia.Markup.dll -¦ ¦ Avalonia.Markup.Xaml.dll -¦ ¦ Avalonia.Metal.dll -¦ ¦ Avalonia.MicroCom.dll -¦ ¦ Avalonia.Native.dll -¦ ¦ Avalonia.OpenGL.dll -¦ ¦ Avalonia.ReactiveUI.dll -¦ ¦ Avalonia.Remote.Protocol.dll -¦ ¦ Avalonia.Skia.dll -¦ ¦ Avalonia.Themes.Fluent.dll -¦ ¦ Avalonia.Themes.Simple.dll -¦ ¦ Avalonia.Win32.dll -¦ ¦ Avalonia.X11.dll -¦ ¦ DynamicData.dll -¦ ¦ HarfBuzzSharp.dll -¦ ¦ MicroCom.Runtime.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.dll -¦ ¦ Microsoft.CodeAnalysis.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.dll -¦ ¦ Microsoft.Win32.SystemEvents.dll -¦ ¦ Project_Periodensystem.Controller.dll -¦ ¦ Project_Periodensystem.Controller.pdb -¦ ¦ Project_Periodensystem.Model.dll -¦ ¦ Project_Periodensystem.Model.pdb -¦ ¦ Project_Periodensystem.Persistence.dll -¦ ¦ Project_Periodensystem.Persistence.pdb -¦ ¦ Project_Periodensystem.View.deps.json -¦ ¦ Project_Periodensystem.View.dll -¦ ¦ Project_Periodensystem.View.exe -¦ ¦ Project_Periodensystem.View.pdb -¦ ¦ Project_Periodensystem.View.runtimeconfig.json -¦ ¦ ReactiveUI.dll -¦ ¦ SkiaSharp.dll -¦ ¦ Splat.dll -¦ ¦ System.Drawing.Common.dll -¦ ¦ System.IO.Pipelines.dll -¦ ¦ System.Reactive.dll -¦ ¦ Tmds.DBus.Protocol.dll -¦ ¦ -¦ +---cs -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---de -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---es -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---fr -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---it -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---ja -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---ko -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---pl -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---pt-BR -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---ru -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---runtimes -¦ ¦ +---linux-arm -¦ ¦ ¦ +---native -¦ ¦ ¦ libHarfBuzzSharp.so -¦ ¦ ¦ libSkiaSharp.so -¦ ¦ ¦ -¦ ¦ +---linux-arm64 -¦ ¦ ¦ +---native -¦ ¦ ¦ libHarfBuzzSharp.so -¦ ¦ ¦ libSkiaSharp.so -¦ ¦ ¦ -¦ ¦ +---linux-musl-x64 -¦ ¦ ¦ +---native -¦ ¦ ¦ libHarfBuzzSharp.so -¦ ¦ ¦ libSkiaSharp.so -¦ ¦ ¦ -¦ ¦ +---linux-x64 -¦ ¦ ¦ +---native -¦ ¦ ¦ libHarfBuzzSharp.so -¦ ¦ ¦ libSkiaSharp.so -¦ ¦ ¦ -¦ ¦ +---osx -¦ ¦ ¦ +---native -¦ ¦ ¦ libAvaloniaNative.dylib -¦ ¦ ¦ libHarfBuzzSharp.dylib -¦ ¦ ¦ libSkiaSharp.dylib -¦ ¦ ¦ -¦ ¦ +---unix -¦ ¦ ¦ +---lib -¦ ¦ ¦ +---net6.0 -¦ ¦ ¦ System.Drawing.Common.dll -¦ ¦ ¦ -¦ ¦ +---win -¦ ¦ ¦ +---lib -¦ ¦ ¦ +---net6.0 -¦ ¦ ¦ Microsoft.Win32.SystemEvents.dll -¦ ¦ ¦ System.Drawing.Common.dll -¦ ¦ ¦ -¦ ¦ +---win-arm64 -¦ ¦ ¦ +---native -¦ ¦ ¦ av_libglesv2.dll -¦ ¦ ¦ libHarfBuzzSharp.dll -¦ ¦ ¦ libSkiaSharp.dll -¦ ¦ ¦ -¦ ¦ +---win-x64 -¦ ¦ ¦ +---native -¦ ¦ ¦ av_libglesv2.dll -¦ ¦ ¦ libHarfBuzzSharp.dll -¦ ¦ ¦ libSkiaSharp.dll -¦ ¦ ¦ -¦ ¦ +---win-x86 -¦ ¦ +---native -¦ ¦ av_libglesv2.dll -¦ ¦ libHarfBuzzSharp.dll -¦ ¦ libSkiaSharp.dll -¦ ¦ -¦ +---tr -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---zh-Hans -¦ ¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ ¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ ¦ Microsoft.CodeAnalysis.resources.dll -¦ ¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ ¦ -¦ +---zh-Hant -¦ Microsoft.CodeAnalysis.CSharp.resources.dll -¦ Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll -¦ Microsoft.CodeAnalysis.resources.dll -¦ Microsoft.CodeAnalysis.Scripting.resources.dll -¦ -+---Components -¦ ElementTile.axaml -¦ ElementTile.axaml.cs -¦ -+---Converters -¦ GridPositionConverters.cs -¦ SeriesToColorConverter.cs -¦ -+---obj - ¦ project.assets.json - ¦ project.nuget.cache - ¦ Project_Periodensystem.View.csproj.nuget.dgspec.json - ¦ Project_Periodensystem.View.csproj.nuget.g.props - ¦ Project_Periodensystem.View.csproj.nuget.g.targets - ¦ - +---Debug - +---net8.0 - ¦ .NETCoreApp,Version=v8.0.AssemblyAttributes.cs - ¦ apphost.exe - ¦ Project_.29B724C0.Up2Date - ¦ Project_Periodensystem.View.AssemblyInfo.cs - ¦ Project_Periodensystem.View.AssemblyInfoInputs.cache - ¦ Project_Periodensystem.View.assets.cache - ¦ Project_Periodensystem.View.csproj.AssemblyReference.cache - ¦ Project_Periodensystem.View.csproj.CoreCompileInputs.cache - ¦ Project_Periodensystem.View.csproj.FileListAbsolute.txt - ¦ Project_Periodensystem.View.dll - ¦ Project_Periodensystem.View.GeneratedMSBuildEditorConfig.editorconfig - ¦ Project_Periodensystem.View.genruntimeconfig.cache - ¦ Project_Periodensystem.View.pdb - ¦ - +---Avalonia - ¦ original.dll - ¦ original.pdb - ¦ original.ref.dll - ¦ references - ¦ resources - ¦ Resources.Inputs.cache - ¦ - +---ref - ¦ Project_Periodensystem.View.dll - ¦ - +---refint - Project_Periodensystem.View.dll -