|
|
|
@ -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
|
|
|
|
|