better modern header
This commit is contained in:
@ -397,7 +397,7 @@ class GiteaUpdate:
|
|||||||
|
|
||||||
class NetworkChecker:
|
class NetworkChecker:
|
||||||
@staticmethod
|
@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"""
|
"""Check if internet connection is available"""
|
||||||
try:
|
try:
|
||||||
socket.setdefaulttimeout(timeout)
|
socket.setdefaulttimeout(timeout)
|
||||||
@ -407,7 +407,7 @@ class NetworkChecker:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@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"""
|
"""Check if repository is accessible"""
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen(url, timeout=timeout)
|
urllib.request.urlopen(url, timeout=timeout)
|
||||||
@ -1116,7 +1116,7 @@ class LXToolsGUI:
|
|||||||
|
|
||||||
# Create notebook (tabs)
|
# Create notebook (tabs)
|
||||||
self.notebook = ttk.Notebook(self.root)
|
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
|
# Create tabs
|
||||||
self._create_projects_tab()
|
self._create_projects_tab()
|
||||||
@ -1134,29 +1134,89 @@ class LXToolsGUI:
|
|||||||
return self.root
|
return self.root
|
||||||
|
|
||||||
def _create_header(self):
|
def _create_header(self):
|
||||||
"""Create header section"""
|
"""Create clean header"""
|
||||||
header_frame = tk.Frame(self.root, bg=self.colors["bg"])
|
# HEADER
|
||||||
header_frame.pack(fill="x", padx=15, pady=15)
|
header_frame = tk.Frame(self.root, bg="#2c3e50", height=70)
|
||||||
|
header_frame.pack(fill="x", pady=(0, 0))
|
||||||
|
header_frame.pack_propagate(False)
|
||||||
|
|
||||||
# Title
|
# Content
|
||||||
title_label = tk.Label(
|
content = tk.Frame(header_frame, bg="#2c3e50")
|
||||||
header_frame,
|
content.pack(fill="both", expand=True, padx=15, pady=12)
|
||||||
text=f"{LXToolsAppConfig.APP_NAME} v{LXToolsAppConfig.VERSION}",
|
|
||||||
font=("Helvetica", 16, "bold"),
|
|
||||||
bg=self.colors["bg"],
|
|
||||||
fg=self.colors["text"],
|
|
||||||
)
|
|
||||||
title_label.pack()
|
|
||||||
|
|
||||||
# OS info
|
# LINKE SEITE: Icon + App Info
|
||||||
os_label = tk.Label(
|
left_side = tk.Frame(content, bg="#2c3e50")
|
||||||
header_frame,
|
left_side.pack(side="left", anchor="w")
|
||||||
text=f"Detected OS: {self.detected_os}",
|
|
||||||
font=("Helvetica", 10),
|
icon_text_frame = tk.Frame(left_side, bg="#2c3e50")
|
||||||
bg=self.colors["bg"],
|
icon_text_frame.pack(anchor="w")
|
||||||
fg="#7f8c8d",
|
|
||||||
|
# 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 ###################
|
################### Teil 12 - GUI Projects Tab ###################
|
||||||
def _create_projects_tab(self):
|
def _create_projects_tab(self):
|
||||||
@ -1604,6 +1664,7 @@ class LXToolsGUI:
|
|||||||
|
|
||||||
self.update_progress("Status refresh completed.")
|
self.update_progress("Status refresh completed.")
|
||||||
self.log_message("=== Status refresh completed ===")
|
self.log_message("=== Status refresh completed ===")
|
||||||
|
self.check_ready_status()
|
||||||
|
|
||||||
################### Teil 17 - GUI Action Methods ###################
|
################### Teil 17 - GUI Action Methods ###################
|
||||||
def install_selected(self):
|
def install_selected(self):
|
||||||
@ -1613,7 +1674,7 @@ class LXToolsGUI:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Check internet connection
|
# Check internet connection
|
||||||
if not NetworkChecker.check_internet():
|
if not NetworkChecker.check_internet_connection():
|
||||||
self.update_download_icon("error")
|
self.update_download_icon("error")
|
||||||
messagebox.showerror(
|
messagebox.showerror(
|
||||||
"Network Error",
|
"Network Error",
|
||||||
@ -1621,7 +1682,7 @@ class LXToolsGUI:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
if not NetworkChecker.check_repository():
|
if not NetworkChecker.check_repository_access():
|
||||||
self.update_download_icon("error")
|
self.update_download_icon("error")
|
||||||
messagebox.showerror(
|
messagebox.showerror(
|
||||||
"Repository Error", "Cannot access repository.\nPlease try again later."
|
"Repository Error", "Cannot access repository.\nPlease try again later."
|
||||||
|
Reference in New Issue
Block a user