tolto connect da ppi

This commit is contained in:
VALLONGOL 2025-10-24 08:29:29 +02:00
parent 03ac1c2ce5
commit 329d468794
3 changed files with 93 additions and 56 deletions

View File

@ -104,17 +104,39 @@ class MainView(tk.Tk):
self.h_pane = ttk.PanedWindow(v_pane, orient=tk.HORIZONTAL) self.h_pane = ttk.PanedWindow(v_pane, orient=tk.HORIZONTAL)
v_pane.add(self.h_pane, weight=4) v_pane.add(self.h_pane, weight=4)
# --- Right Pane (PPI) --- # --- Right Pane (connection panel + PPI) ---
self.ppi_widget = PPIDisplay( right_container = ttk.Frame(self.h_pane)
self.h_pane, max_range_nm=self.max_range, scan_limit_deg=self.scan_limit self.h_pane.add(right_container, weight=2)
)
self.h_pane.add(self.ppi_widget, weight=2)
# Wire the PPI's built-in connect toggle to the MainView connect handler # Connection panel sits above the PPI on the right side and shows
# current connection parameters and a centralized Connect/Disconnect button.
conn_panel = ttk.LabelFrame(right_container, text="Connection")
conn_panel.pack(side=tk.TOP, fill=tk.X, padx=5, pady=(5, 2))
# Display current connection summary (type / brief params)
self.conn_type_var = tk.StringVar(value=self.connection_config.get("target", {}).get("type", "-"))
self.conn_info_var = tk.StringVar(value=self._format_connection_summary(self.connection_config.get("target", {})))
ttk.Label(conn_panel, text="Type:").pack(side=tk.LEFT, padx=(6, 2))
ttk.Label(conn_panel, textvariable=self.conn_type_var, width=10).pack(side=tk.LEFT)
ttk.Label(conn_panel, textvariable=self.conn_info_var).pack(side=tk.LEFT, padx=(8, 4))
# Connect / Disconnect button centralised here
self.connect_button = ttk.Button(conn_panel, text="Connect", command=self._on_connect_button)
self.connect_button.pack(side=tk.RIGHT, padx=(4, 6))
# Open settings quick button
self.conn_settings_button = ttk.Button(conn_panel, text="Settings...", command=self._open_settings)
self.conn_settings_button.pack(side=tk.RIGHT, padx=(4, 0))
# Now the PPI widget below the connection panel
self.ppi_widget = PPIDisplay(
right_container, max_range_nm=self.max_range, scan_limit_deg=self.scan_limit
)
self.ppi_widget.pack(side=tk.TOP, fill=tk.BOTH, expand=True, padx=2, pady=(2, 5))
# Reflect initial connection state (likely disconnected)
try: try:
if hasattr(self.ppi_widget, "set_connect_callback"):
self.ppi_widget.set_connect_callback(self._on_connect_button)
# Reflect initial connection state (likely disconnected)
if hasattr(self.ppi_widget, "update_connect_state"): if hasattr(self.ppi_widget, "update_connect_state"):
self.ppi_widget.update_connect_state(False) self.ppi_widget.update_connect_state(False)
except Exception: except Exception:
@ -363,6 +385,34 @@ class MainView(tk.Tk):
else: else:
self.title(base_title) self.title(base_title)
def _format_connection_summary(self, cfg: dict) -> str:
"""Return a short human-readable summary of the target connection config.
This is used by the connection panel to show relevant info without
opening the full settings dialog.
"""
try:
t = cfg.get("type")
if not t:
return "-"
if t == "sfp":
sfp = cfg.get("sfp", {})
ip = sfp.get("ip") or sfp.get("host") or "?"
port = sfp.get("port") or sfp.get("remote_port") or "?"
return f"{ip}:{port}"
if t == "serial":
s = cfg.get("serial", {})
port = s.get("port") or s.get("device") or "?"
baud = s.get("baudrate") or s.get("baud") or "?"
return f"{port} @{baud}"
if t == "tftp":
tftp = cfg.get("tftp", {})
host = tftp.get("host") or tftp.get("server") or "?"
return f"{host}"
return "-"
except Exception:
return "-"
def _update_communicator_status(self, comm_name: str, is_connected: bool): def _update_communicator_status(self, comm_name: str, is_connected: bool):
canvas = ( canvas = (
self.target_status_canvas self.target_status_canvas
@ -377,8 +427,19 @@ class MainView(tk.Tk):
self.logger.info(f"MainView received connection state change: Connected={is_connected}") self.logger.info(f"MainView received connection state change: Connected={is_connected}")
self._update_communicator_status("Target", is_connected) self._update_communicator_status("Target", is_connected)
if hasattr(self.ppi_widget, 'update_connect_state'): # Update the PPI's internal state (visual only) and the debug window
self.ppi_widget.update_connect_state(is_connected) try:
if hasattr(self.ppi_widget, 'update_connect_state'):
self.ppi_widget.update_connect_state(is_connected)
except Exception:
pass
# Update centralized connect button text and status indicator
try:
if hasattr(self, 'connect_button') and self.connect_button:
self.connect_button.config(text="Disconnect" if is_connected else "Connect")
except Exception:
pass
# Also update the debug window if it's open # Also update the debug window if it's open
if self.sfp_debug_window and self.sfp_debug_window.winfo_exists(): if self.sfp_debug_window and self.sfp_debug_window.winfo_exists():
@ -440,6 +501,14 @@ class MainView(tk.Tk):
self.logger.info(f"Updating connection settings: {new_config}") self.logger.info(f"Updating connection settings: {new_config}")
self.connection_config = new_config self.connection_config = new_config
self.config_manager.save_connection_settings(new_config) self.config_manager.save_connection_settings(new_config)
# Refresh connection summary in the connection panel
try:
if hasattr(self, 'conn_type_var'):
self.conn_type_var.set(self.connection_config.get("target", {}).get("type", "-"))
if hasattr(self, 'conn_info_var'):
self.conn_info_var.set(self._format_connection_summary(self.connection_config.get("target", {})))
except Exception:
pass
self._initialize_communicators() self._initialize_communicators()
def _open_settings(self): def _open_settings(self):

View File

@ -84,11 +84,12 @@ class PPIDisplay(ttk.Frame):
self.range_selector.pack(side=tk.LEFT, padx=5) self.range_selector.pack(side=tk.LEFT, padx=5)
self.range_selector.bind("<<ComboboxSelected>>", self._on_range_selected) self.range_selector.bind("<<ComboboxSelected>>", self._on_range_selected)
# Connection toggle (Connect / Disconnect) for SFP # NOTE: Connection controls were removed from the PPI display to
# keep this widget purely visual. Connection state is still
# exposed via the API below so MainView or other windows can
# register callbacks or push state changes here.
self._connect_callback = None self._connect_callback = None
self._is_connected = False self._is_connected = False
self.connect_btn = ttk.Button(self.controls_frame, text="Connect", command=self._on_connect_btn)
self.connect_btn.pack(side=tk.RIGHT, padx=10)
# --- Display Options --- # --- Display Options ---
options_frame = ttk.LabelFrame(top_frame, text="Display Options") options_frame = ttk.LabelFrame(top_frame, text="Display Options")
@ -230,56 +231,23 @@ class PPIDisplay(ttk.Frame):
self.canvas.draw_idle() self.canvas.draw_idle()
# --- Connection toggle API --- # --- Connection state API (PPI remains visual only) ---
def _on_connect_btn(self):
if callable(self._connect_callback):
try:
self._connect_callback()
except Exception:
pass
def set_connect_callback(self, cb): def set_connect_callback(self, cb):
"""Register a callback to be executed when the PPI Connect button is pressed. """Register a callback. Kept for backward compatibility.
The callback should handle connecting/disconnecting logic at the application level. Note: the PPI no longer exposes a connect button. This method
only stores the callback so higher-level UI can reuse the same
handler if desired.
""" """
self._connect_callback = cb self._connect_callback = cb
def update_connect_state(self, is_connected: bool): def update_connect_state(self, is_connected: bool):
"""Update the Connect button label/state to reflect current connection status.""" """Update the internal connection state. Does not alter any widgets.
try:
self._is_connected = bool(is_connected)
if self._is_connected:
self.connect_btn.config(text="Disconnect")
else:
self.connect_btn.config(text="Connect")
except Exception:
pass
# --- Connection toggle API --- MainView is responsible for showing connect/disconnect controls.
def _on_connect_btn(self):
if callable(self._connect_callback):
try:
self._connect_callback()
except Exception:
# Allow caller to handle exceptions and update state
pass
def set_connect_callback(self, cb):
"""Register a callback to be executed when the PPI Connect button is pressed.
The callback should handle connecting/disconnecting logic at the application level.
""" """
self._connect_callback = cb
def update_connect_state(self, is_connected: bool):
"""Update the Connect button label/state to reflect current connection status."""
try: try:
self._is_connected = bool(is_connected) self._is_connected = bool(is_connected)
if self._is_connected:
self.connect_btn.config(text="Disconnect")
else:
self.connect_btn.config(text="Connect")
except Exception: except Exception:
pass pass

View File

@ -1,7 +1,7 @@
# cose da fare # cose da fare
## bachi ## bachi
togliere il tasto connect dalla ppi e metterlo da un'altra parte della finestra perchè non centra niente con la ppi
## sviluppi ## sviluppi