Update GUI 2.0.2 from local

chiyu
ken910606 1 month ago
parent a1efcf5664
commit 989d3ad2d2

@ -33,7 +33,7 @@ from mission_group import (
# ================================================================================ # ================================================================================
class ControlStationUI(QMainWindow): class ControlStationUI(QMainWindow):
VERSION = '2.0.1' VERSION = '2.0.2'
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -1045,16 +1045,69 @@ class ControlStationUI(QMainWindow):
# ================================================================================ # ================================================================================
def handle_group_selection(self, socket_id, state): def handle_group_selection(self, socket_id, state):
"""處理 socket 群組 checkbox 的勾選/取消勾選
這個方法在用戶點擊 socket 群組的 checkbox 時被調用
需要同時更新
1. socket 下所有無人機的 checkbox
2. self.monitor.selected_drones用於控制面板同步
3. 右侧活躍群組的無人機分配新增
參數
socket_id: socket ID (str)
state: Qt.CheckState 的整數值 (0=Unchecked, 1=PartiallyChecked, 2=Checked)
"""
print(f"\n📢 [GUI] handle_group_selection 被調用", flush=True)
print(f" socket_id: {socket_id}, state: {state}", flush=True)
print(f" state 類型: {type(state)}", flush=True)
# 獲取該 socket 下所有無人機
group_drones = [did for did in self.drones.keys() if self.get_socket_id(did) == socket_id] group_drones = [did for did in self.drones.keys() if self.get_socket_id(did) == socket_id]
is_checked = state == Qt.CheckState.Checked.value print(f" 該 socket 下的無人機: {group_drones}", flush=True)
# 判斷是否勾選(只有 state == 2 時才是 Checked
is_checked = (state == 2) # Qt.CheckState.Checked.value == 2
print(f" is_checked: {is_checked}", flush=True)
# 更新該 socket 下所有無人機的 checkbox 狀態
for drone_id in group_drones: for drone_id in group_drones:
checkbox = self.drones[drone_id].get_checkbox() checkbox = self.drones[drone_id].get_checkbox()
if checkbox: if checkbox:
print(f" └─ 更新 {drone_id}: setChecked({is_checked})", flush=True)
checkbox.blockSignals(True) checkbox.blockSignals(True)
checkbox.setChecked(is_checked) checkbox.setChecked(is_checked)
checkbox.blockSignals(False) checkbox.blockSignals(False)
if is_checked: self.monitor.selected_drones.add(drone_id)
else: self.monitor.selected_drones.discard(drone_id) # 同時更新 monitor.selected_drones 以同步控制面板
if is_checked:
self.monitor.selected_drones.add(drone_id)
else:
self.monitor.selected_drones.discard(drone_id)
# 👇 新增:同步更新右侧活躍群組的無人機分配
if self.active_group_id:
group = self.mission_groups.get(self.active_group_id)
panel = self.group_panels.get(self.active_group_id)
if group and panel:
print(f" ├─ 同步右侧群組 {self.active_group_id}", flush=True)
if is_checked:
# 勾選時:將該 socket 下的無人機添加到活躍群組
for drone_id in group_drones:
group.drone_ids.add(drone_id)
print(f" │ └─ 添加到群組: {group_drones}", flush=True)
else:
# 取消勾選時:從活躍群組移除該 socket 下的無人機
for drone_id in group_drones:
group.drone_ids.discard(drone_id)
print(f" │ └─ 從群組移除: {group_drones}", flush=True)
# 更新右側群組面板的顯示
panel.update_drone_list()
panel.update_status()
print(f" │ └─ 已更新右侧群組面板", flush=True)
print(f" 最終 selected_drones: {self.monitor.selected_drones}", flush=True)
print(f"✓ handle_group_selection 完成\n", flush=True)
def handle_drone_selection(self, drone_id, state): def handle_drone_selection(self, drone_id, state):
is_checked = state == Qt.CheckState.Checked.value is_checked = state == Qt.CheckState.Checked.value

Loading…
Cancel
Save