Kommentare
This commit is contained in:
parent
16fcf6ce53
commit
73bd118e8b
@ -3,15 +3,19 @@ using AquaCare.Persistence;
|
||||
|
||||
namespace AquaCare.Controller
|
||||
{
|
||||
// Controller-Klasse für die Verwaltung und Speicherung von Pflegemaßnahmen und Messwerten
|
||||
public class PflegeController
|
||||
{
|
||||
// Referenz auf die Datenbank
|
||||
private readonly Datenbank _db;
|
||||
|
||||
// Konstruktor: Übergibt die Datenbankinstanz
|
||||
public PflegeController(Datenbank db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
// Speichert einen neuen Pflege- bzw. Werte-Eintrag in der Datenbank
|
||||
public bool SavePflegeTask(DateTime datum, bool gefuettert, bool filterReinigen,
|
||||
bool wasserWechseln, double temperatur, double phWert, double nitrat, double ammoniak)
|
||||
{
|
||||
@ -29,15 +33,16 @@ namespace AquaCare.Controller
|
||||
Ammoniak = ammoniak
|
||||
};
|
||||
|
||||
_db.AddValue(wert);
|
||||
_db.AddValue(wert); // Eintrag in die Datenbank speichern
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
return false; // Fehler beim Speichern
|
||||
}
|
||||
}
|
||||
|
||||
// Gibt alle gespeicherten Werte als Liste zurück
|
||||
public List<Werte> GetAllWerte()
|
||||
{
|
||||
return _db.GetValuesAsObjects();
|
||||
|
||||
@ -3,15 +3,19 @@ using AquaCare.Persistence;
|
||||
|
||||
namespace AquaCare.Controller
|
||||
{
|
||||
// Controller-Klasse für das Laden der gespeicherten Werte aus der Datenbank
|
||||
public class WerteController
|
||||
{
|
||||
// Referenz auf die Datenbank
|
||||
private readonly Datenbank _db;
|
||||
|
||||
// Konstruktor: Übergibt die Datenbankinstanz
|
||||
public WerteController(Datenbank db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
// Lädt alle gespeicherten Werte als Liste
|
||||
public List<Werte> LoadWerte()
|
||||
{
|
||||
return _db.GetValuesAsObjects();
|
||||
|
||||
@ -1,14 +1,23 @@
|
||||
namespace AquaCare.Model
|
||||
{
|
||||
// Modellklasse für einen Messwert- bzw. Pflegeeintrag
|
||||
public class Werte
|
||||
{
|
||||
// Datum und Uhrzeit des Eintrags
|
||||
public DateTime Datum { get; set; }
|
||||
// Wurde gefüttert?
|
||||
public bool Gefuettert { get; set; }
|
||||
// Wurde der Filter gereinigt?
|
||||
public bool FilterReinigen { get; set; }
|
||||
// Wurde Wasser gewechselt?
|
||||
public bool WasserWechseln { get; set; }
|
||||
// Temperatur in °C
|
||||
public double Temperatur { get; set; }
|
||||
// pH-Wert
|
||||
public double PhWert { get; set; }
|
||||
// Nitratwert in mg/l
|
||||
public double Nitrat { get; set; }
|
||||
// Ammoniakwert in mg/l
|
||||
public double Ammoniak { get; set; }
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!--
|
||||
Projektdatei für das AquaCare.Persistence-Projekt.
|
||||
Enthält Einstellungen für das Ziel-Framework, Nullable, Projektabhängigkeiten und NuGet-Pakete.
|
||||
-->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Verweis auf das Model-Projekt -->
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AquaCare.Model\AquaCare.Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- NuGet-Paket für SQLite-Datenbankzugriff -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -6,24 +6,30 @@ using AquaCare.Model;
|
||||
|
||||
namespace AquaCare.Persistence
|
||||
{
|
||||
// Klasse für den Datenbankzugriff (SQLite)
|
||||
public class Datenbank
|
||||
{
|
||||
// Pfad zum Ordner, in dem die Datenbank liegt
|
||||
private static readonly string PersistencePath = Path.GetDirectoryName(
|
||||
typeof(Datenbank).Assembly.Location) ?? throw new InvalidOperationException("Assembly location not found");
|
||||
|
||||
// Pfad zur SQLite-Datenbankdatei
|
||||
private static readonly string DbPath = Path.Combine(
|
||||
PersistencePath,
|
||||
"..", "..", "..", "..",
|
||||
"AquaCare.Persistence",
|
||||
"AquaCareDatenbank.db");
|
||||
|
||||
// Verbindungszeichenfolge für SQLite
|
||||
private string ConnectionString => $"Data Source={DbPath}";
|
||||
|
||||
// Konstruktor: Prüft, ob die Datenbank existiert, und legt sie ggf. an
|
||||
public Datenbank()
|
||||
{
|
||||
EnsureDatabaseExists();
|
||||
}
|
||||
|
||||
// Stellt sicher, dass die Datenbank und der Ordner existieren
|
||||
private void EnsureDatabaseExists()
|
||||
{
|
||||
var directory = Path.GetDirectoryName(DbPath);
|
||||
@ -38,6 +44,7 @@ namespace AquaCare.Persistence
|
||||
}
|
||||
}
|
||||
|
||||
// Legt eine neue Datenbank mit der Tabelle "Werte" an
|
||||
private void InitializeNewDatabase()
|
||||
{
|
||||
using var connection = new SqliteConnection(ConnectionString);
|
||||
@ -58,6 +65,7 @@ namespace AquaCare.Persistence
|
||||
command.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
// Fügt einen neuen Werte-Datensatz in die Datenbank ein
|
||||
public void AddValue(Werte wert)
|
||||
{
|
||||
using var connection = new SqliteConnection(ConnectionString);
|
||||
@ -85,6 +93,7 @@ namespace AquaCare.Persistence
|
||||
command.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
// Gibt alle Werte als Liste von Objekten zurück
|
||||
public List<Werte> GetValuesAsObjects()
|
||||
{
|
||||
var werte = new List<Werte>();
|
||||
|
||||
@ -4,15 +4,19 @@ using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace AquaCare.View;
|
||||
|
||||
// Einstiegspunkt für die Avalonia-Anwendung
|
||||
public partial class App : Application
|
||||
{
|
||||
// Initialisiert die Anwendung und lädt die XAML-Ressourcen
|
||||
public override void Initialize()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
// Wird nach Abschluss der Framework-Initialisierung aufgerufen
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
// Setzt das Hauptfenster, wenn die Anwendung als klassische Desktop-App läuft
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
desktop.MainWindow = new MainWindow();
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- NuGet-Pakete für Avalonia, Datenbank und MessageBox -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="11.3.0" />
|
||||
<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.3.0" />
|
||||
@ -22,23 +23,19 @@
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Verweise auf andere Projekte der Lösung -->
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AquaCare.Controller\AquaCare.Controller.csproj" />
|
||||
<ProjectReference Include="..\AquaCare.Model\AquaCare.Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Einbindung von Ressourcen (Bilder, Icons, etc.) -->
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Include="Ressourcen\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Einbindung der zentralen Style-Datei -->
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Include="Style.xaml" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Project>
|
||||
|
||||
@ -2,11 +2,13 @@ using Avalonia.Controls;
|
||||
|
||||
namespace AquaCare.View
|
||||
{
|
||||
// Fenster für die Einstellungen der Anwendung
|
||||
public partial class EinstellungenWindow : Window
|
||||
{
|
||||
// Konstruktor: Initialisiert das Einstellungsfenster
|
||||
public EinstellungenWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitializeComponent(); // Initialisiert die UI-Komponenten
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,7 @@
|
||||
<!--
|
||||
Hauptfenster der Anwendung.
|
||||
Zeigt einen Willkommensbildschirm mit Hintergrundbild, Einstellungen-Button und zentralen Navigationsbuttons.
|
||||
-->
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="AquaCare.View.MainWindow"
|
||||
@ -6,12 +10,12 @@
|
||||
Icon="Ressourcen/Bilder/ProgrammIcon.ico">
|
||||
|
||||
<Grid>
|
||||
|
||||
<!-- Hintergrundbild für das Hauptfenster -->
|
||||
<Grid.Background>
|
||||
<ImageBrush Source="avares://AquaCare.View/Ressourcen/Bilder/WillkommenHintergrund.png" Stretch="UniformToFill"/>
|
||||
</Grid.Background>
|
||||
|
||||
<!-- Grid-Aufteilung -->
|
||||
<!-- Grid-Aufteilung für Layout -->
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
@ -27,29 +31,28 @@
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill"/>
|
||||
</Button>
|
||||
|
||||
<!-- Zentrierter Inhalt -->
|
||||
<!-- Zentrierter Inhalt: Überschrift und Navigationsbuttons -->
|
||||
<StackPanel Grid.Row="1" Grid.ColumnSpan="2"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Spacing="30">
|
||||
|
||||
<!-- Überschrift -->
|
||||
<TextBlock Text="Willkommen bei AquaCare" HorizontalAlignment="Center" Classes="ÜberschriftText"/>
|
||||
|
||||
|
||||
<!-- Button für Pflegemaßnahmen -->
|
||||
<Button Classes="ImageButton" Click="buttonPflegeClick" Width="300" Height="100" HorizontalAlignment="Center">
|
||||
<Image Source="avares://AquaCare.View/Ressourcen/Bilder/pflegebutton.png"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill"/>
|
||||
</Button>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Button für Werteübersicht -->
|
||||
<Button Classes="ImageButton" Click="buttonWerteClick" Width="300" Height="100" HorizontalAlignment="Center">
|
||||
<Image Source="avares://AquaCare.View/Ressourcen/Bilder/wertebutton.png"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill"/>
|
||||
</Button>
|
||||
|
||||
|
||||
<!-- Button für Tutorials -->
|
||||
<Button Classes="ImageButton" Click="buttonTutorialsClick" Width="300" Height="100" HorizontalAlignment="Center">
|
||||
<Image Source="avares://AquaCare.View/Ressourcen/Bilder/tutorialsbutton.png"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Fill"/>
|
||||
|
||||
@ -5,37 +5,41 @@ using AquaCare.View;
|
||||
|
||||
namespace AquaCare.View
|
||||
{
|
||||
// Hauptfenster der Anwendung – Einstiegspunkt für den Nutzer
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
// Konstruktor: Initialisiert das Hauptfenster
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
// Öffnet das Fenster für Pflegemaßnahmen
|
||||
private void buttonPflegeClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var pflegeWindow = new PflegeWindow();
|
||||
pflegeWindow.ShowDialog(this);
|
||||
}
|
||||
|
||||
// Öffnet das Fenster zur Anzeige der Messwerte
|
||||
private void buttonWerteClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var werteWindow = new WerteWindow(); // Neues Werte-Fenster instanziieren
|
||||
werteWindow.ShowDialog(this); // Fenster als Dialog öffnen
|
||||
}
|
||||
|
||||
// Öffnet das Fenster für Tutorials
|
||||
private void buttonTutorialsClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var tutorialsWindow = new TutorialsWindow();
|
||||
tutorialsWindow.ShowDialog(this); // Dialog für Tutorial-Fenster
|
||||
}
|
||||
|
||||
|
||||
// Öffnet ein einfaches Einstellungsfenster (Platzhalter)
|
||||
private void buttonEinstellungenClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var dialog = new Window { Title = "Einstellungen" };
|
||||
dialog.ShowDialog(this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,7 @@
|
||||
<!--
|
||||
Fenster zur Eingabe und Speicherung von Pflegemaßnahmen und Messwerten.
|
||||
Enthält Felder für Datum, Checkboxen für Aktionen, Eingabefelder für Werte und einen Speichern-Button.
|
||||
-->
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/express/blend/2008"
|
||||
@ -7,54 +11,55 @@
|
||||
Width="600" Height="500"
|
||||
Icon="Ressourcen/Bilder/ProgrammIcon.ico">
|
||||
<Grid>
|
||||
<!-- Hintergrundbild ins äußere Grid verschieben -->
|
||||
<!-- Hintergrundbild für das Fenster -->
|
||||
<Grid.Background>
|
||||
<ImageBrush Source="avares://AquaCare.View/Ressourcen/Bilder/PflegeHintergrund.png"
|
||||
Stretch="Fill"/>
|
||||
</Grid.Background>
|
||||
|
||||
<!-- Haupt-Grid für die Eingabefelder und Buttons -->
|
||||
<Grid RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto"
|
||||
ColumnDefinitions="Auto,*"
|
||||
Margin="20"
|
||||
RowSpacing="10"
|
||||
ColumnSpacing="20">
|
||||
|
||||
<!-- Datum -->
|
||||
<!-- Datumsauswahl -->
|
||||
<TextBlock Text="Datum:" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<DatePicker x:Name="DatumPicker" Width="300" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
|
||||
<!-- Gefüttert -->
|
||||
<!-- Checkbox: Gefüttert -->
|
||||
<TextBlock Text="Gefüttert:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<CheckBox x:Name="GefuettertCheckBox" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
|
||||
<!-- Filter reinigen -->
|
||||
<!-- Checkbox: Filter gereinigt -->
|
||||
<TextBlock Text="Filter gereinigt:" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<CheckBox x:Name="FilterReinigenCheckBox" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
|
||||
<!-- Wasser wechseln -->
|
||||
<!-- Checkbox: Wasser gewechselt -->
|
||||
<TextBlock Text="Wasser gewechselt:" Grid.Row="3" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<CheckBox x:Name="WasserWechselnCheckBox" Grid.Row="3" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
|
||||
<!-- Temperatur -->
|
||||
<!-- Eingabefeld: Temperatur -->
|
||||
<TextBlock Text="Temperatur (°C):" Grid.Row="4" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="TemperaturBox" Height="30" Grid.Row="4" Grid.Column="1" Width="100"/>
|
||||
|
||||
<!-- pH-Wert -->
|
||||
<!-- Eingabefeld: pH-Wert -->
|
||||
<TextBlock Text="pH-Wert:" Grid.Row="5" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="PhBox" Grid.Row="5" Grid.Column="1" Width="100"/>
|
||||
|
||||
<!-- Nitrat -->
|
||||
<!-- Eingabefeld: Nitrat -->
|
||||
<TextBlock Text="Nitrat (mg/l):" Grid.Row="6" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="NitratBox" Grid.Row="6" Grid.Column="1" Width="100"/>
|
||||
|
||||
<!-- Ammoniak -->
|
||||
<!-- Eingabefeld: Ammoniak -->
|
||||
<TextBlock Text="Ammoniak (mg/l):" Grid.Row="7" Grid.Column="0" VerticalAlignment="Center"/>
|
||||
<TextBox x:Name="AmmoniakBox" Grid.Row="7" Grid.Column="1" Width="100"/>
|
||||
|
||||
<!-- Speichern-Button -->
|
||||
<Button Content="Speichern" Grid.Row="8" Grid.Column="1" Margin="0,20,0,0" HorizontalAlignment="Right" Click="SaveClick"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
<!-- Mindestbreite für die zweite Spalte -->
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
|
||||
@ -8,25 +8,31 @@ using System;
|
||||
|
||||
namespace AquaCare.View
|
||||
{
|
||||
// Fenster zur Eingabe und Speicherung von Pflegemaßnahmen und Messwerten
|
||||
public partial class PflegeWindow : Window
|
||||
{
|
||||
// Controller für die Logik und Datenzugriffe
|
||||
private readonly PflegeController _controller;
|
||||
|
||||
// Konstruktor: Initialisiert das Fenster und den Controller
|
||||
public PflegeWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
_controller = new PflegeController(new Datenbank());
|
||||
InitializeComponent(); // Initialisiert die UI-Komponenten
|
||||
_controller = new PflegeController(new Datenbank()); // Erstellt Controller mit Datenbank
|
||||
}
|
||||
|
||||
// Initialisiert die XAML-Komponenten
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
// Event-Handler für den Speichern-Button
|
||||
private void SaveClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Prüft, ob alle Felder korrekt ausgefüllt sind und Werte gültig sind
|
||||
if (DatumPicker.SelectedDate.HasValue &&
|
||||
double.TryParse(TemperaturBox.Text, out double temperatur) &&
|
||||
double.TryParse(PhBox.Text, out double phWert) &&
|
||||
@ -39,6 +45,7 @@ namespace AquaCare.View
|
||||
return;
|
||||
}
|
||||
|
||||
// Speichert die Werte über den Controller
|
||||
var success = _controller.SavePflegeTask(
|
||||
DatumPicker.SelectedDate.Value.DateTime,
|
||||
GefuettertCheckBox.IsChecked ?? false,
|
||||
@ -54,7 +61,7 @@ namespace AquaCare.View
|
||||
{
|
||||
Console.WriteLine("Erfolg: Werte erfolgreich gespeichert.");
|
||||
|
||||
// Eingabefelder zurücksetzen
|
||||
// Setzt die Eingabefelder zurück
|
||||
DatumPicker.SelectedDate = null;
|
||||
GefuettertCheckBox.IsChecked = false;
|
||||
FilterReinigenCheckBox.IsChecked = false;
|
||||
@ -80,9 +87,10 @@ namespace AquaCare.View
|
||||
}
|
||||
}
|
||||
|
||||
// Event-Handler für den Abbrechen-Button
|
||||
private void CancelClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Close();
|
||||
Close(); // Schließt das Fenster
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,11 @@
|
||||
<Style xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
|
||||
<!--
|
||||
Style.xaml: Zentrale Datei für das Aussehen der Anwendung.
|
||||
Enthält globale Styles für Buttons, TextBlöcke und Fenster.
|
||||
-->
|
||||
|
||||
<!-- Allgemeiner Button-Style -->
|
||||
<Style Selector="Button">
|
||||
<Setter Property="FontSize" Value="30"/>
|
||||
@ -13,7 +18,7 @@
|
||||
<Setter Property="CornerRadius" Value="10"/> <!-- Fügt abgerundete Ecken hinzu -->
|
||||
</Style>
|
||||
|
||||
<!-- Image Button-Style -->
|
||||
<!-- Style für Buttons, die nur ein Bild enthalten -->
|
||||
<Style Selector="Button.ImageButton">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
@ -38,7 +43,7 @@
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
</Style>
|
||||
|
||||
<!--Default Hintergrundfarbe-->
|
||||
<!-- Standard-Hintergrundfarbe für Fenster -->
|
||||
<Style Selector="Window">
|
||||
<Setter Property="Background" Value="#1E1E1E"/>
|
||||
</Style>
|
||||
|
||||
@ -1,3 +1,7 @@
|
||||
<!--
|
||||
Fenster zur Anzeige von Schritt-für-Schritt-Tutorials.
|
||||
Enthält Auswahl-Buttons, ein Bildfeld, einen Hinweistext, Bildnavigation und einen Schließen-Button.
|
||||
-->
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="AquaCare.View.TutorialsWindow"
|
||||
@ -6,40 +10,43 @@
|
||||
Icon="Ressourcen/Bilder/ProgrammIcon.ico">
|
||||
|
||||
<Grid>
|
||||
<!-- Hintergrundbild für das Fenster -->
|
||||
<Grid.Background>
|
||||
<ImageBrush Source="avares://AquaCare.View/Ressourcen/Bilder/TutorialsHintergrund.png" Stretch="UniformToFill"/>
|
||||
</Grid.Background>
|
||||
|
||||
<!-- Zeilenaufteilung für Überschrift, Buttons und Inhalt -->
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/> <!-- Überschrift (optional) -->
|
||||
<RowDefinition Height="Auto"/> <!-- Buttons -->
|
||||
<RowDefinition Height="Auto"/> <!-- Hauptinhalt -->
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Buttons für Tutorials -->
|
||||
<!-- Buttons für die Auswahl des Tutorials -->
|
||||
<StackPanel Grid.Row="1"
|
||||
Orientation="Horizontal"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,5,0,0"> <!-- Unteres Margin reduziert -->
|
||||
Margin="0,5,0,0">
|
||||
<Button Content="Fische füttern" Width="300" Height="50" Click="FischeFütternClick"/>
|
||||
<Button Content="Wasser wechseln" Width="300" Height="50" Click="WasserWechselnClick"/>
|
||||
<Button Content="Filter reinigen" Width="300" Height="50" Click="FilterReinigenClick"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Inhalte mittig -->
|
||||
<!-- Hauptinhalt: Bild, Text, Navigation -->
|
||||
<StackPanel Grid.Row="2"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Top"
|
||||
Spacing="2">
|
||||
|
||||
<!-- StackPanel für Tutorial-Inhalt -->
|
||||
<!-- Tutorial-Inhalt: Bild und Hinweistext -->
|
||||
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Spacing="5">
|
||||
<!-- Container für Bild und initialen Text -->
|
||||
<Grid Height="450" Width="500" Margin="0,0,0,0"> <!-- Höhe reduziert -->
|
||||
<Grid Height="450" Width="500" Margin="0,0,0,0">
|
||||
<!-- Bildanzeige für das Tutorial -->
|
||||
<Image x:Name="tutorialImage"
|
||||
Stretch="Uniform"
|
||||
IsVisible="False"/>
|
||||
<!-- Hinweistext, wenn kein Tutorial ausgewählt ist -->
|
||||
<TextBlock x:Name="initialText"
|
||||
Text="Wähle oben, was du nicht kannst!"
|
||||
FontSize="30"
|
||||
@ -48,19 +55,20 @@
|
||||
VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Bildindex-Text -->
|
||||
<!-- Anzeige des aktuellen Bildindexes -->
|
||||
<TextBlock x:Name="imageIndexTextBlock"
|
||||
Text=""
|
||||
FontSize="18"
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0,2,0,2"/> <!-- Margins reduziert -->
|
||||
Margin="0,2,0,2"/>
|
||||
|
||||
<!-- Navigation unter dem Bild -->
|
||||
<!-- Navigations-Buttons unter dem Bild -->
|
||||
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" Spacing="5">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="10">
|
||||
<Button Content="Zurück" Click="PreviousImageClick" />
|
||||
<Button Content="Weiter" Click="NextImageClick" />
|
||||
</StackPanel>
|
||||
<!-- Schließen-Button -->
|
||||
<Button Content="Schließen"
|
||||
Click="CloseClick"
|
||||
Width="200"
|
||||
|
||||
@ -6,13 +6,19 @@ using System;
|
||||
|
||||
namespace AquaCare.View
|
||||
{
|
||||
// Fenster zur Anzeige von Schritt-für-Schritt-Tutorials mit Bildern
|
||||
public partial class TutorialsWindow : Window
|
||||
{
|
||||
// Liste der Bildpfade für das aktuelle Tutorial
|
||||
private List<string> _images;
|
||||
// TextBlock zur Anzeige des aktuellen Bildindexes
|
||||
private TextBlock? _imageIndexTextBlock;
|
||||
// TextBlock für den Starttext
|
||||
private TextBlock? _initialText;
|
||||
// Index des aktuell angezeigten Bildes
|
||||
private int _currentImageIndex;
|
||||
|
||||
// Dictionary mit der Anzahl der Bilder pro Tutorial-Ordner
|
||||
private readonly Dictionary<string, int> _imageCountPerFolder = new()
|
||||
{
|
||||
{"Fische füttern", 3},
|
||||
@ -20,17 +26,20 @@ namespace AquaCare.View
|
||||
{"Filter reinigen", 8}
|
||||
};
|
||||
|
||||
// Konstruktor: Initialisiert das Fenster und sucht die UI-Elemente
|
||||
public TutorialsWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitializeComponent(); // Initialisiert die UI-Komponenten
|
||||
_images = new List<string>();
|
||||
|
||||
// Sucht die Textblöcke anhand ihres Namens in der XAML
|
||||
_imageIndexTextBlock = this.Find<TextBlock>("imageIndexTextBlock")
|
||||
?? throw new InvalidOperationException("imageIndexTextBlock not found");
|
||||
_initialText = this.Find<TextBlock>("initialText")
|
||||
?? throw new InvalidOperationException("initialText not found");
|
||||
}
|
||||
|
||||
// Lädt die Bilder für das gewählte Tutorial
|
||||
private void LoadTutorialImages(string folderName)
|
||||
{
|
||||
if (_initialText == null || tutorialImage == null) return;
|
||||
@ -51,6 +60,7 @@ namespace AquaCare.View
|
||||
UpdateTutorialContent();
|
||||
}
|
||||
|
||||
// Aktualisiert das angezeigte Bild und den Index-Text
|
||||
private void UpdateTutorialContent()
|
||||
{
|
||||
try
|
||||
@ -77,6 +87,7 @@ namespace AquaCare.View
|
||||
}
|
||||
}
|
||||
|
||||
// Navigiert zum nächsten oder vorherigen Bild
|
||||
private void NavigateImages(bool forward)
|
||||
{
|
||||
if (forward)
|
||||
@ -90,7 +101,7 @@ namespace AquaCare.View
|
||||
UpdateTutorialContent();
|
||||
}
|
||||
|
||||
// Event Handler
|
||||
// Event Handler für die Tutorial-Auswahl
|
||||
private void FischeFütternClick(object? sender, RoutedEventArgs e)
|
||||
=> LoadTutorialImages("Fische füttern");
|
||||
|
||||
@ -100,12 +111,14 @@ namespace AquaCare.View
|
||||
private void FilterReinigenClick(object? sender, RoutedEventArgs e)
|
||||
=> LoadTutorialImages("Filter reinigen");
|
||||
|
||||
// Event Handler für die Navigation durch die Bilder
|
||||
private void NextImageClick(object? sender, RoutedEventArgs e)
|
||||
=> NavigateImages(true);
|
||||
|
||||
private void PreviousImageClick(object? sender, RoutedEventArgs e)
|
||||
=> NavigateImages(false);
|
||||
|
||||
// Event Handler zum Schließen des Fensters
|
||||
private void CloseClick(object? sender, RoutedEventArgs e)
|
||||
=> Close();
|
||||
}
|
||||
|
||||
@ -1,3 +1,7 @@
|
||||
<!--
|
||||
Fenster zur Anzeige der Messwerte.
|
||||
Enthält eine Überschrift, Beispielwerte, eine Liste, ein DataGrid und einen Schließen-Button.
|
||||
-->
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="AquaCare.View.WerteWindow"
|
||||
@ -6,15 +10,16 @@
|
||||
Icon="Ressourcen/Bilder/ProgrammIcon.ico">
|
||||
|
||||
<Grid>
|
||||
|
||||
<!-- Hintergrundbild für das Fenster -->
|
||||
<Grid.Background>
|
||||
<ImageBrush Source="avares://AquaCare.View/Ressourcen/Bilder/WerteHintergrund.png" Stretch="UniformToFill"/>
|
||||
</Grid.Background>
|
||||
|
||||
|
||||
<!-- Zeilenaufteilung: Überschrift, Hauptinhalt, Schließen-Button -->
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/> <!-- Überschrift -->
|
||||
<RowDefinition Height="*"/> <!-- Hauptinhalt -->
|
||||
<RowDefinition Height="*"/> <!-- Hauptinhalt (Beispielwerte + DataGrid) -->
|
||||
<RowDefinition Height="Auto"/> <!-- Schließen-Button -->
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Überschrift -->
|
||||
@ -24,21 +29,24 @@
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0,10,0,10"/>
|
||||
|
||||
<!-- Hauptinhalt -->
|
||||
<!-- Hauptinhalt: Beispielwerte und DataGrid -->
|
||||
<StackPanel Grid.Row="1" Margin="20" Spacing="10">
|
||||
<ListBox x:Name="ValuesList" Grid.Row="1" Margin="20" />
|
||||
<!-- Beispielwerte -->
|
||||
<TextBlock Text="Temperatur: 25°C" FontSize="18"/>
|
||||
<TextBlock Text="pH-Wert: 7.5" FontSize="18"/>
|
||||
<TextBlock Text="Nitrat: 10 mg/L" FontSize="18"/>
|
||||
<TextBlock Text="Ammoniak: 0 mg/L" FontSize="18"/>
|
||||
|
||||
<Grid>
|
||||
<DataGrid x:Name="WerteDataGrid" AutoGenerateColumns="True" />
|
||||
</Grid>
|
||||
|
||||
<!-- Schließen-Button -->
|
||||
<Button Content="Schließen" HorizontalAlignment="Center" Width="100" Click="CloseWindowClick"/>
|
||||
<!-- DataGrid -->
|
||||
<DataGrid x:Name="WerteDataGrid"
|
||||
AutoGenerateColumns="True"
|
||||
Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Schließen-Button immer ganz unten -->
|
||||
<Button Grid.Row="2"
|
||||
Content="Schließen"
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0,10,0,10"
|
||||
Click="CloseWindowClick"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
@ -6,36 +6,42 @@ using System;
|
||||
|
||||
namespace AquaCare.View
|
||||
{
|
||||
// Fenster zur Anzeige und Verwaltung von Messwerten
|
||||
public partial class WerteWindow : Window
|
||||
{
|
||||
// Controller für die Logik und Datenzugriffe
|
||||
private readonly WerteController _controller;
|
||||
|
||||
// Konstruktor: Initialisiert das Fenster und lädt die Daten
|
||||
public WerteWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
_controller = new WerteController(new Datenbank());
|
||||
LoadData();
|
||||
InitializeComponent(); // Initialisiert die UI-Komponenten
|
||||
_controller = new WerteController(new Datenbank()); // Erstellt Controller mit Datenbank
|
||||
LoadData(); // Lädt die Messwerte
|
||||
}
|
||||
|
||||
// Lädt die Messwerte aus der Datenbank und bindet sie an das DataGrid
|
||||
private void LoadData()
|
||||
{
|
||||
try
|
||||
{
|
||||
var werte = _controller.LoadWerte();
|
||||
var werte = _controller.LoadWerte(); // Holt die Werte aus dem Controller
|
||||
WerteDataGrid.ItemsSource = werte; // Bindet die Werte an das DataGrid
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Gibt eine Fehlermeldung aus, falls das Laden fehlschlägt
|
||||
Console.WriteLine($"Fehler beim Laden der Werte: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Event-Handler zum Schließen des Fensters
|
||||
private void CloseWindowClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
// Direkte Benutzerinteraktion ohne MessageBox
|
||||
// Hinweis für den Benutzer (hier nur Konsolenausgabe)
|
||||
Console.WriteLine("Möchten Sie das Fenster wirklich schließen? (Ja/Nein)");
|
||||
|
||||
// Simuliere eine Benutzeraktion (z. B. durch eine UI-Komponente oder Konsoleninteraktion)
|
||||
// Simuliert eine Benutzerbestätigung (hier immer 'Ja')
|
||||
bool userConfirmed = true; // Setze dies basierend auf der Benutzeraktion
|
||||
|
||||
if (userConfirmed)
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user