From 4bdf63f613c7c5628193555dada84b5c10239bef Mon Sep 17 00:00:00 2001
From: punix <polunga40@unity-mail.de>
Date: Fri, 6 Jun 2025 01:14:23 +0200
Subject: [PATCH] better modern header

---
 lxtools_installerv3.py | 111 +++++++++++++++++++++++++++++++----------
 1 file changed, 86 insertions(+), 25 deletions(-)

diff --git a/lxtools_installerv3.py b/lxtools_installerv3.py
index 2d530cf..2bfc91f 100755
--- a/lxtools_installerv3.py
+++ b/lxtools_installerv3.py
@@ -397,7 +397,7 @@ class GiteaUpdate:
 
 class NetworkChecker:
     @staticmethod
-    def check_internet(host="8.8.8.8", port=53, timeout=3):
+    def check_internet_connection(host="8.8.8.8", port=53, timeout=3):
         """Check if internet connection is available"""
         try:
             socket.setdefaulttimeout(timeout)
@@ -407,7 +407,7 @@ class NetworkChecker:
             return False
 
     @staticmethod
-    def check_repository(url="https://git.ilunix.de", timeout=5):
+    def check_repository_access(url="https://git.ilunix.de", timeout=5):
         """Check if repository is accessible"""
         try:
             urllib.request.urlopen(url, timeout=timeout)
@@ -1116,7 +1116,7 @@ class LXToolsGUI:
 
         # Create notebook (tabs)
         self.notebook = ttk.Notebook(self.root)
-        self.notebook.pack(fill="both", expand=True, padx=15, pady=(0, 10))
+        self.notebook.pack(fill="both", expand=True, padx=15, pady=(10, 10))
 
         # Create tabs
         self._create_projects_tab()
@@ -1134,29 +1134,89 @@ class LXToolsGUI:
         return self.root
 
     def _create_header(self):
-        """Create header section"""
-        header_frame = tk.Frame(self.root, bg=self.colors["bg"])
-        header_frame.pack(fill="x", padx=15, pady=15)
+        """Create clean header"""
+        # HEADER
+        header_frame = tk.Frame(self.root, bg="#2c3e50", height=70)
+        header_frame.pack(fill="x", pady=(0, 0))
+        header_frame.pack_propagate(False)
 
-        # Title
-        title_label = tk.Label(
-            header_frame,
-            text=f"{LXToolsAppConfig.APP_NAME} v{LXToolsAppConfig.VERSION}",
-            font=("Helvetica", 16, "bold"),
-            bg=self.colors["bg"],
-            fg=self.colors["text"],
-        )
-        title_label.pack()
+        # Content
+        content = tk.Frame(header_frame, bg="#2c3e50")
+        content.pack(fill="both", expand=True, padx=15, pady=12)
 
-        # OS info
-        os_label = tk.Label(
-            header_frame,
-            text=f"Detected OS: {self.detected_os}",
-            font=("Helvetica", 10),
-            bg=self.colors["bg"],
-            fg="#7f8c8d",
+        # LINKE SEITE: Icon + App Info
+        left_side = tk.Frame(content, bg="#2c3e50")
+        left_side.pack(side="left", anchor="w")
+
+        icon_text_frame = tk.Frame(left_side, bg="#2c3e50")
+        icon_text_frame.pack(anchor="w")
+
+        # Werkzeug-Icon
+        tk.Label(
+            icon_text_frame, text="🔧", font=("Helvetica", 18), bg="#2c3e50", fg="white"
+        ).pack(side="left", padx=(0, 8))
+
+        # App Name und Version
+        text_frame = tk.Frame(icon_text_frame, bg="#2c3e50")
+        text_frame.pack(side="left")
+
+        tk.Label(
+            text_frame,
+            text="Lx Tools Installer",
+            font=("Helvetica", 14, "bold"),
+            fg="white",
+            bg="#2c3e50",
+        ).pack(anchor="w")
+
+        tk.Label(
+            text_frame,
+            text=f"v{LXToolsAppConfig.VERSION} • Linux Application Installer",
+            font=("Helvetica", 9),
+            fg="#bdc3c7",
+            bg="#2c3e50",
+        ).pack(anchor="w")
+
+        # RECHTE SEITE: System + Dynamischer Status
+        right_side = tk.Frame(content, bg="#2c3e50")
+        right_side.pack(side="right", anchor="e")
+
+        tk.Label(
+            right_side,
+            text=f"System: {self.detected_os}",
+            font=("Helvetica", 11),
+            fg="#ecf0f1",
+            bg="#2c3e50",
+        ).pack(anchor="e")
+
+        # DYNAMISCHER Status (anfangs leer)
+        self.header_status_label = tk.Label(
+            right_side, text="", font=("Helvetica", 10), bg="#2c3e50"  # Anfangs leer
         )
-        os_label.pack()
+        self.header_status_label.pack(anchor="e", pady=(2, 0))
+
+        # Trennlinie
+        separator = tk.Frame(self.root, height=1, bg="#34495e")
+        separator.pack(fill="x", pady=0)
+
+    def update_header_status(self, message="", color="#1abc9c"):
+        """Update status in header"""
+        if hasattr(self, "header_status_label"):
+            self.header_status_label.config(text=message, fg=color)
+
+    def check_ready_status(self):
+        """Check if system is ready for installation"""
+        # Prüfungen:
+        internet_ok = NetworkChecker.check_internet_connection()
+        repo_ok = NetworkChecker.check_repository_access()
+
+        if internet_ok and repo_ok:
+            self.update_header_status("Ready for installation", "#1abc9c")  # Grün
+        elif not internet_ok:
+            self.update_header_status("No internet connection", "#e74c3c")  # Rot
+        elif not repo_ok:
+            self.update_header_status("Repository unavailable", "#f39c12")  # Orange
+        else:
+            self.update_header_status("System checking...", "#3498db")  # Blau
 
     ################### Teil 12 - GUI Projects Tab ###################
     def _create_projects_tab(self):
@@ -1604,6 +1664,7 @@ class LXToolsGUI:
 
         self.update_progress("Status refresh completed.")
         self.log_message("=== Status refresh completed ===")
+        self.check_ready_status()
 
     ################### Teil 17 - GUI Action Methods ###################
     def install_selected(self):
@@ -1613,7 +1674,7 @@ class LXToolsGUI:
             return
 
         # Check internet connection
-        if not NetworkChecker.check_internet():
+        if not NetworkChecker.check_internet_connection():
             self.update_download_icon("error")
             messagebox.showerror(
                 "Network Error",
@@ -1621,7 +1682,7 @@ class LXToolsGUI:
             )
             return
 
-        if not NetworkChecker.check_repository():
+        if not NetworkChecker.check_repository_access():
             self.update_download_icon("error")
             messagebox.showerror(
                 "Repository Error", "Cannot access repository.\nPlease try again later."