"""
overlay_panel
デバッグ表示の切替チェックボックスを提供するパネル
"""
from PySide6.QtCore import Signal
from PySide6.QtWidgets import QCheckBox, QVBoxLayout
from pc.gui.panels.collapsible_group_box import (
CollapsibleGroupBox,
)
from pc.vision.overlay import OverlayFlags
class OverlayPanel(CollapsibleGroupBox):
"""デバッグ表示の切替チェックボックス群"""
overlay_flags_changed = Signal()
def __init__(
self, flags: OverlayFlags | None = None,
) -> None:
super().__init__("デバッグ表示")
self._flags = flags or OverlayFlags()
self._setup_ui()
def _setup_ui(self) -> None:
"""UI を構築する"""
layout = QVBoxLayout()
self.setLayout(layout)
items = [
("二値化画像", "binary"),
("検出領域", "detect_region"),
("フィッティング曲線", "poly_curve"),
("行中心点", "row_centers"),
("Theil-Sen直線", "theil_sen"),
("中心線", "center_line"),
("パシュート目標点", "pursuit_points"),
]
for label, attr in items:
cb = QCheckBox(label)
cb.setChecked(getattr(self._flags, attr))
cb.toggled.connect(
lambda checked, a=attr: self._on_toggled(
a, checked,
),
)
layout.addWidget(cb)
def _on_toggled(
self, attr: str, checked: bool,
) -> None:
"""チェックボックスの切替を反映してシグナルを発火する"""
setattr(self._flags, attr, checked)
self.overlay_flags_changed.emit()
def get_flags(self) -> OverlayFlags:
"""現在のオーバーレイフラグを返す"""
return self._flags