autocal: 测试序列页与几何与安装页共用 2D 平面图和 3D 预览

- FingerPanel 新增 release_views/restore_views,把表面选点图和三维预览
  整体借出,不复制,已拾取的点、传感器包和 GL 视图仍是同一份状态
- SequencePanel 用共用视图替换“仿真阶段实现”的占位框(adopt_views/release_views)
- 主窗口按当前标签页把两个视图挂到序列页或几何页
- 新增 tests/test_shared_views.py
- 序列页借用视图时给两个框固定最小高度并隐藏长图例,修复 3D 视图下按钮与勾选框叠压
This commit is contained in:
ykcheungab
2026-10-19 10:35:04 +08:00
parent a225905b49
commit 566f1bf390
4 changed files with 165 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
"""The surface picker and 3D preview are one set of widgets shared by two pages."""
from __future__ import annotations
def _inside(widget, page) -> bool:
while widget is not None:
if widget is page:
return True
widget = widget.parentWidget()
return False
def test_the_views_follow_the_open_tab(make_window):
window = make_window()
finger, sequence = window.finger_panel, window.sequence_panel
preview, picker = finger.preview, finger.view
window.workspace.set_current_key("sequence")
assert _inside(preview, sequence) and _inside(picker, sequence)
assert not sequence.preview_label.isVisibleTo(sequence)
assert finger.views_lent
window.workspace.set_current_key("finger")
assert _inside(preview, finger) and _inside(picker, finger)
assert sequence.preview_label.isVisibleTo(sequence) or not sequence.has_views
assert not finger.views_lent
# Going back and forth never creates a second copy.
window.workspace.set_current_key("sequence")
window.workspace.set_current_key("axes")
assert finger.preview is preview and finger.view is picker
assert _inside(preview, finger)
window.close()
def test_a_point_picked_on_the_sequence_page_is_the_geometry_pages_point(make_window):
window = make_window()
window.workspace.set_current_key("sequence")
seen: list[tuple[int, int]] = []
window.finger_panel.pickRequested.connect(lambda x, y: seen.append((x, y)))
window.finger_panel.view.pixelPicked.emit(10, 20)
assert seen == [(10, 20)]
window.close()
def test_the_sequence_page_gives_the_views_room_and_drops_the_long_legend(make_window):
window = make_window()
finger, sequence = window.finger_panel, window.sequence_panel
window.workspace.set_current_key("sequence")
assert finger.preview.parentWidget().minimumHeight() >= 400
assert not finger.legend_label.isVisibleTo(finger.legend_label.parentWidget())
window.workspace.set_current_key("finger")
assert finger.preview.parentWidget().minimumHeight() == 0
assert not finger.legend_label.isHidden()
window.close()