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."