Clean up and simplify settings screen connection tab; remove duplicate/test code and fix UI issues
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user