theme works
This commit is contained in:
@ -19,9 +19,9 @@ from datetime import datetime
|
|||||||
|
|
||||||
################### Teil 2 - LXTools App Configuration ###################
|
################### Teil 2 - LXTools App Configuration ###################
|
||||||
class LXToolsAppConfig:
|
class LXToolsAppConfig:
|
||||||
VERSION = "1.0.9"
|
VERSION = "1.1.3"
|
||||||
APP_NAME = "LX Tools Installer"
|
APP_NAME = "LX Tools Installer"
|
||||||
WINDOW_WIDTH = 600
|
WINDOW_WIDTH = 500
|
||||||
WINDOW_HEIGHT = 700
|
WINDOW_HEIGHT = 700
|
||||||
|
|
||||||
# Working directory
|
# Working directory
|
||||||
@ -124,6 +124,89 @@ class LXToolsAppConfig:
|
|||||||
_ = LXToolsAppConfig.setup_translations()
|
_ = LXToolsAppConfig.setup_translations()
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Color Manager Class (NEU für einheitliche Farben)
|
||||||
|
# ----------------------------
|
||||||
|
class ColorManager:
|
||||||
|
@staticmethod
|
||||||
|
def get_system_colors(root):
|
||||||
|
"""Get system colors that work across different themes"""
|
||||||
|
try:
|
||||||
|
# Versuche system-spezifische Farben zu ermitteln
|
||||||
|
default_bg = root.cget("bg")
|
||||||
|
|
||||||
|
# Teste verschiedene Farbnamen
|
||||||
|
test_colors = ["#f0f0f0", "#e1e1e1", "#d9d9d9", "lightgray"]
|
||||||
|
working_bg = default_bg
|
||||||
|
|
||||||
|
for color in test_colors:
|
||||||
|
try:
|
||||||
|
# Teste ob die Farbe funktioniert
|
||||||
|
test_label = tk.Label(root, bg=color)
|
||||||
|
working_bg = color
|
||||||
|
test_label.destroy()
|
||||||
|
break
|
||||||
|
except tk.TclError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return {
|
||||||
|
"default_bg": working_bg,
|
||||||
|
"card_bg": "#f8f9fa", # Hellerer Hintergrund für Cards
|
||||||
|
"hover_bg": "#e6f3ff",
|
||||||
|
"selected_bg": "#cce7ff",
|
||||||
|
"border_color": "#cccccc",
|
||||||
|
"header_bg": "#2c3e50", # Dunkler Header
|
||||||
|
"header_fg": "white", # Weiße Schrift im Header
|
||||||
|
"progress_bg": "#f1f3f4", # Wie Progress Label
|
||||||
|
}
|
||||||
|
except:
|
||||||
|
# Fallback Farben
|
||||||
|
return {
|
||||||
|
"default_bg": "#f0f0f0",
|
||||||
|
"card_bg": "#f8f9fa",
|
||||||
|
"hover_bg": "#e6f3ff",
|
||||||
|
"selected_bg": "#cce7ff",
|
||||||
|
"border_color": "#cccccc",
|
||||||
|
"header_bg": "#2c3e50",
|
||||||
|
"header_fg": "white",
|
||||||
|
"progress_bg": "#f1f3f4",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Theme Manager Class
|
||||||
|
# ----------------------------
|
||||||
|
class ThemeManager:
|
||||||
|
@staticmethod
|
||||||
|
def apply_light_theme(root):
|
||||||
|
"""Apply light theme"""
|
||||||
|
try:
|
||||||
|
theme_dir = LXToolsAppConfig.THEMES_DIR
|
||||||
|
water_theme_path = os.path.join(theme_dir, "water.tcl")
|
||||||
|
|
||||||
|
if os.path.exists(water_theme_path):
|
||||||
|
try:
|
||||||
|
root.tk.call("source", water_theme_path)
|
||||||
|
root.tk.call("set_theme", "light")
|
||||||
|
return True
|
||||||
|
except tk.TclError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# System theme fallback
|
||||||
|
try:
|
||||||
|
style = ttk.Style()
|
||||||
|
if "clam" in style.theme_names():
|
||||||
|
style.theme_use("clam")
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
################### Teil 3 - OS Detection und System Manager ###################
|
################### Teil 3 - OS Detection und System Manager ###################
|
||||||
class OSDetector:
|
class OSDetector:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -1017,16 +1100,17 @@ class LXToolsGUI:
|
|||||||
self.root.geometry(
|
self.root.geometry(
|
||||||
f"{LXToolsAppConfig.WINDOW_WIDTH}x{LXToolsAppConfig.WINDOW_HEIGHT}"
|
f"{LXToolsAppConfig.WINDOW_WIDTH}x{LXToolsAppConfig.WINDOW_HEIGHT}"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.root.configure(bg=self.colors["bg"])
|
self.root.configure(bg=self.colors["bg"])
|
||||||
|
|
||||||
# Try to set icon
|
# Try to set icon
|
||||||
try:
|
try:
|
||||||
icon = self.image_manager.load_image("app_icon")
|
icon = self.image_manager.load_image("download_icon")
|
||||||
if icon:
|
if icon:
|
||||||
self.root.iconphoto(False, icon)
|
self.root.iconphoto(False, icon)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
ThemeManager.apply_light_theme(self.root)
|
||||||
# Create header
|
# Create header
|
||||||
self._create_header()
|
self._create_header()
|
||||||
|
|
||||||
@ -1329,7 +1413,7 @@ class LXToolsGUI:
|
|||||||
progress_container.pack(fill="x")
|
progress_container.pack(fill="x")
|
||||||
|
|
||||||
# Download Icon (left)
|
# Download Icon (left)
|
||||||
self.download_icon_label = tk.Label(progress_container, text="", width=4)
|
self.download_icon_label = tk.Label(progress_container, text="", width=50)
|
||||||
self.download_icon_label.pack(side="left", padx=(0, 10))
|
self.download_icon_label.pack(side="left", padx=(0, 10))
|
||||||
|
|
||||||
# Progress Text (right, expandable)
|
# Progress Text (right, expandable)
|
||||||
@ -1462,7 +1546,7 @@ class LXToolsGUI:
|
|||||||
if self.app_manager.is_installed(project_key):
|
if self.app_manager.is_installed(project_key):
|
||||||
installed_version = self.app_manager.get_installed_version(project_key)
|
installed_version = self.app_manager.get_installed_version(project_key)
|
||||||
status_label.config(
|
status_label.config(
|
||||||
text=f"✅ Installed (v{installed_version})", fg="green"
|
text=f"✅ Installed ({installed_version})", fg="green"
|
||||||
)
|
)
|
||||||
self.log_message(
|
self.log_message(
|
||||||
f"{project_info['name']}: Installed v{installed_version}"
|
f"{project_info['name']}: Installed v{installed_version}"
|
||||||
@ -1474,7 +1558,7 @@ class LXToolsGUI:
|
|||||||
if latest_version != "Unknown":
|
if latest_version != "Unknown":
|
||||||
if installed_version != latest_version:
|
if installed_version != latest_version:
|
||||||
version_label.config(
|
version_label.config(
|
||||||
text=f"Latest: v{latest_version} (Update available)",
|
text=f"Latest: v {latest_version} (Update available)",
|
||||||
fg="orange",
|
fg="orange",
|
||||||
)
|
)
|
||||||
self.log_message(
|
self.log_message(
|
||||||
@ -1482,7 +1566,7 @@ class LXToolsGUI:
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
version_label.config(
|
version_label.config(
|
||||||
text=f"Latest: v{latest_version} (Up to date)",
|
text=f"Latest: v {latest_version} (Up to date)",
|
||||||
fg="green",
|
fg="green",
|
||||||
)
|
)
|
||||||
self.log_message(f"{project_info['name']}: Up to date")
|
self.log_message(f"{project_info['name']}: Up to date")
|
||||||
@ -1505,10 +1589,10 @@ class LXToolsGUI:
|
|||||||
latest_version = self.app_manager.get_latest_version(project_key)
|
latest_version = self.app_manager.get_latest_version(project_key)
|
||||||
if latest_version != "Unknown":
|
if latest_version != "Unknown":
|
||||||
version_label.config(
|
version_label.config(
|
||||||
text=f"Available: v{latest_version}", fg="blue"
|
text=f"Available: v {latest_version}", fg="blue"
|
||||||
)
|
)
|
||||||
self.log_message(
|
self.log_message(
|
||||||
f"{project_info['name']}: Available v{latest_version}"
|
f"{project_info['name']}: Available v {latest_version}"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
version_label.config(text="Available: Unknown", fg="gray")
|
version_label.config(text="Available: Unknown", fg="gray")
|
||||||
@ -1557,8 +1641,8 @@ class LXToolsGUI:
|
|||||||
|
|
||||||
dialog_text = (
|
dialog_text = (
|
||||||
f"{project_info['name']} is already installed.\n\n"
|
f"{project_info['name']} is already installed.\n\n"
|
||||||
f"Installed version: v{installed_version}\n"
|
f"Installed version: {installed_version}\n"
|
||||||
f"Latest version: v{latest_version}\n\n"
|
f"Latest version: v {latest_version}\n\n"
|
||||||
f"YES = Update (reinstall all files)\n"
|
f"YES = Update (reinstall all files)\n"
|
||||||
f"NO = Uninstall\n"
|
f"NO = Uninstall\n"
|
||||||
f"Cancel = Do nothing"
|
f"Cancel = Do nothing"
|
||||||
|
Reference in New Issue
Block a user