Clean up and simplify settings screen connection tab; remove duplicate/test code and fix UI issues

This commit is contained in:
2025-08-23 17:45:03 +03:00
parent e2afbee438
commit 751a781634

View File

@@ -172,40 +172,125 @@ class SettingsWindow:
scrollable_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
# Server connection card
server_card = self.create_settings_card(scrollable_frame, "🖥️ Server Connection",
"Configure your signage server connection details")
# Server IP/Domain
self.create_input_field(server_card, "Server IP/Domain:", "server_ip_var",
placeholder="e.g., digi-server.example.com")
# Port
self.create_input_field(server_card, "Port:", "port_var", width=15,
placeholder="8880")
# Device settings card
device_card = self.create_settings_card(scrollable_frame, "📱 Device Settings",
"Identify this display device")
# Screen/Device name
self.create_input_field(device_card, "Device Name:", "screen_name_var",
placeholder="e.g., lobby-display-01")
# QuickConnect key
self.create_input_field(device_card, "QuickConnect Key:", "quickconnect_var",
password=True, placeholder="Enter your access key")
# Connection testing card
test_card = self.create_settings_card(scrollable_frame, "🔗 Connection Test",
"Test your server connection")
test_btn_frame = tk.Frame(test_card, bg=self.colors['bg_tertiary'])
test_btn_frame.pack(fill=tk.X, pady=10)
test_btn = self.create_action_button(test_btn_frame, "🔗 Test Connection",
self.test_connection, self.colors['accent'])
# Pack canvas and scrollbar so content is visible
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# --- Compact Server Connection Section (no card, all fields labeled, test button visible) ---
config = load_config()
server_val = config.get('server_ip', '')
port_val = config.get('port', '')
connect_section = tk.Frame(scrollable_frame, bg=self.colors['bg_tertiary'])
connect_section.pack(fill=tk.X, pady=10, padx=10)
# Server and Port row
server_port_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary'])
server_port_row.pack(fill=tk.X, pady=6)
if not hasattr(self, 'server_ip_var'):
self.server_ip_var = tk.StringVar(value=server_val)
server_label = tk.Label(server_port_row, text="Server:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=10, anchor='w')
server_label.pack(side=tk.LEFT, padx=(0, 2))
server_entry = TouchOptimizedEntry(server_port_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.server_ip_var, width=28, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10)
server_entry.pack(side=tk.LEFT, padx=(0, 8), pady=5)
self.add_placeholder(server_entry, "e.g., digi-server.example.com")
if not hasattr(self, 'port_var'):
self.port_var = tk.StringVar(value=port_val)
port_label = tk.Label(server_port_row, text="Port:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=6, anchor='w')
port_label.pack(side=tk.LEFT, padx=(0, 2))
port_entry = TouchOptimizedEntry(server_port_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.port_var, width=8, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10)
port_entry.pack(side=tk.LEFT, pady=5)
self.add_placeholder(port_entry, "8880")
# Logic: enable port only if server is IP (not ending with .com)
def update_port_state(*args):
server_val = self.server_ip_var.get().strip()
if server_val.endswith('.com') or ('.' in server_val and not server_val.replace('.', '').isdigit()):
port_entry.config(state='disabled')
else:
port_entry.config(state='normal')
self.server_ip_var.trace_add('write', update_port_state)
update_port_state()
# Device Name row (compact)
device_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary'])
device_row.pack(fill=tk.X, pady=6)
screen_name_val = config.get('screen_name', '')
if not hasattr(self, 'screen_name_var'):
self.screen_name_var = tk.StringVar(value=screen_name_val)
screen_label = tk.Label(device_row, text="Device Name:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=14, anchor='w')
screen_label.pack(side=tk.LEFT, padx=(0, 2))
screen_entry = TouchOptimizedEntry(device_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.screen_name_var, width=22, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10, state='readonly')
screen_entry.pack(side=tk.LEFT, padx=(0, 8), pady=5)
self.add_placeholder(screen_entry, "e.g., lobby-display-01")
# QuickConnect Key row (compact)
quickconnect_val = config.get('quickconnect_key', '')
if not hasattr(self, 'quickconnect_var'):
self.quickconnect_var = tk.StringVar(value=quickconnect_val)
quick_label = tk.Label(device_row, text="QuickConnect Key:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=16, anchor='w')
quick_label.pack(side=tk.LEFT, padx=(0, 2))
quick_entry = TouchOptimizedEntry(device_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.quickconnect_var, width=18, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10, state='readonly')
quick_entry.pack(side=tk.LEFT, pady=5)
quick_entry.configure(show='*')
self.add_placeholder(quick_entry, "Enter your access key")
# Make device fields editable by default (no Edit button)
screen_entry.config(state='normal')
quick_entry.config(state='normal', show='')
# --- Row for Test Connection and Save Settings buttons ---
btn_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary'])
btn_row.pack(fill=tk.X, pady=(10, 0))
# Test Connection button
test_btn = self.create_action_button(btn_row, "🔗 Test Connection", self.test_connection, self.colors['accent'])
test_btn.pack(side=tk.LEFT, padx=(0, 10))
# Save Settings button with color logic
save_btn_color = self.colors['accent']
save_btn = tk.Button(
btn_row, text="💾 Save Settings", font=('Segoe UI', 12, 'bold'),
bg=save_btn_color, fg=self.colors['text_primary'],
activebackground=save_btn_color, activeforeground=self.colors['text_primary'],
relief=tk.RAISED, bd=2, padx=16, pady=6, cursor='hand2',
)
save_btn.pack(side=tk.LEFT)
def set_save_btn_color(color):
save_btn.config(bg=color, activebackground=color)
def save_settings_and_test():
# Save current values to config
config['server_ip'] = self.server_ip_var.get().strip()
config['port'] = self.port_var.get().strip()
config['screen_name'] = self.screen_name_var.get().strip()
config['quickconnect_key'] = self.quickconnect_var.get().strip()
# Save to app_config.txt
try:
with open(APP_CONFIG_PATH, 'w') as f:
for k, v in config.items():
f.write(f"{k}={v}\n")
except Exception as e:
set_save_btn_color('red')
return
# Test server availability
import requests
server = config['server_ip']
port = config['port']
url = f"http://{server}:{port}/api/playlist/version"
try:
resp = requests.get(url, timeout=3)
if resp.status_code == 200:
set_save_btn_color('green')
else:
set_save_btn_color('red')
except Exception:
set_save_btn_color('red')
save_btn.config(command=save_settings_and_test)
test_btn.pack(side=tk.LEFT, padx=5)
canvas.pack(side="left", fill="both", expand=True, padx=20, pady=20)