using DatenDB; using Deckungsbeitrag.Properties; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.LinkLabel; namespace Deckungsbeitrag.AA_Forms { public partial class FormOnBoarding : Form { private Dictionary OnBoardingText; private string userid; private OnboardingSchritt onBoardingArt; private static string savePath = ConfigurationManager.AppSettings["DateiSavePfad"]; private string[] schritte; private int Schritt = 0; private int MaxSchritte; private bool retour = false; public FormOnBoarding() { InitializeComponent(); } public FormOnBoarding(string userid, OnboardingSchritt OnBoardingArt) : this() { // Wenn der Aufruf von Main kommt ist die userid die BenutzerRolle als string. this.userid = userid; this.onBoardingArt = OnBoardingArt; } private void FormOnBoarding_Load(object sender, EventArgs e) { GetDictionary(); if (OnBoardingText != null) { MaxSchritte = OnBoardingText.Count; schritte = OnBoardingText.Keys.ToArray(); LoadControls(Schritt); } } /// /// Buttons Vor und Zurück werden erstellt. /// /// private void LoadControls(int schritt) { if (MaxSchritte == (Schritt + 1)) { this.buttonNext.Enabled = false; this.buttonFertig.Enabled = true; } else { this.buttonNext.Enabled = true; this.buttonFertig.Enabled = false; } if (Schritt == 0) this.buttonPrevious.Enabled = false; else this.buttonPrevious.Enabled = true; if (retour) { this.labelHeader.Text = $"Dein OnBoarding für {onBoardingArt}"; this.pictureBoxScreen.Image = OnBoardingText[schritte[Schritt]].bild; } else { this.labelHeader.Text = $"Dein OnBoarding für {onBoardingArt}"; this.pictureBoxScreen.Image = OnBoardingText[schritte[schritt]].bild; this.labelText.Text += OnBoardingText[schritte[schritt]].text; } } private void GetDictionary() { switch (onBoardingArt) { case OnboardingSchritt.NeuerAuftrag: switch (userid) { case var u when u == "fahrer": OnBoardingText = LoadDictionary("FahrerNeuerAuftrag"); break; case var u when u == "admin": break; case var u when u == "verwaltung": break; case var u when u == "expedit": break; default: break; } break; case OnboardingSchritt.Main: // Unterscheidung zwischen UserID da Main unterschiedliche OnBoardings für User hat. (Unterschiedliche Buttons und GroupBoxen zu erklären) switch (userid) { case var u when u == "fahrer": OnBoardingText = LoadDictionary("FahrerMain"); break; case var u when u == "admin": break; case var u when u == "verwaltung": break; default: break; } break; case OnboardingSchritt.Expedit: break; case OnboardingSchritt.Tourenplanung: break; default: OnBoardingText = LoadDictionary("Login"); break; } } private Dictionary LoadDictionary(string art) { string path = Path.Combine(savePath, "OnBoarding"); string txtFile = "onboarding.txt"; Dictionary dictionary = new Dictionary(); if (!File.Exists(Path.Combine(path, txtFile))) { MessageBox.Show($"Onboarding-Datei nicht gefunden: {txtFile}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Warning); Program.AddFehler(null, $"Onboarding-Datei nicht gefunden: {Path.Combine(path, txtFile)}", string.Empty, null); return null; // oder Fallback-Daten laden } string[] lines = File.ReadAllLines(Path.Combine(path, "onboarding.txt")); int i = 0; foreach (string line in lines) { try { if (!line.StartsWith(art)) continue; var parts = line.Split('|'); string key = parts[0].Trim(); string text = parts[1].Trim(); string imagePath = Path.Combine(path, key + ".png"); if (File.Exists(imagePath)) dictionary.Add(key, (i > 0 ? Environment.NewLine + text : text, Image.FromFile(imagePath))); } catch (Exception ex) { // Loggen oder MessageBox in WinForms Console.WriteLine($"Fehler bei Zeile '{line}': {ex.Message}"); Program.AddFehler(null, $"Fehler bei Zeile '{line}': {ex.Message}", ex.StackTrace, null); } i++; } return dictionary; } private void buttonNext_Click(object sender, EventArgs e) { if (MaxSchritte == (Schritt + 1)) return; this.SuspendLayout(); Schritt++; LoadControls(Schritt); this.ResumeLayout(); } private void buttonPrevious_Click(object sender, EventArgs e) { if (Schritt == 0) return; retour = true; this.SuspendLayout(); Schritt--; LoadControls(Schritt); this.ResumeLayout(); } private void button_EnabledChanged(object sender, EventArgs e) { Button btn = (Button)sender; if (!btn.Enabled) btn.Visible = false; else btn.Visible = true; } private void buttonFertig_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); } private void buttonFertig_EnabledChanged(object sender, EventArgs e) { Button btn = (Button)sender; if (!btn.Enabled) { btn.BackColor = Color.Gray; btn.ForeColor = Color.White; } else { btn.BackColor = Color.Green; btn.ForeColor = Color.White; } } private void FormOnBoarding_Resize(object sender, EventArgs e) { this.labelText.MaximumSize = new Size(this.Width, 0); this.pictureBoxScreen.Height = this.panelButtons.Top - this.labelText.Bottom; this.pictureBoxScreen.Dock = DockStyle.Bottom; } private void FormOnBoarding_Shown(object sender, EventArgs e) { this.labelText.MaximumSize = new Size(this.Width, this.pictureBoxScreen.Top); } private void labelText_Resize(object sender, EventArgs e) { if (this.labelText.Bottom <= this.pictureBoxScreen.Top) return; this.pictureBoxScreen.Height = this.panelButtons.Top - this.labelText.Bottom; this.pictureBoxScreen.Dock = DockStyle.Bottom; } } }