magscope.ui.panel_layout#
Shared helpers for draggable control panel layouts.
Attributes#
Classes#
Convert title-area drags into wrapper move operations. |
|
Wrap a panel widget and make its title initiate drag-and-drop. |
|
Vertical column of draggable panels with drop support. |
|
Coordinate draggable panel columns and persist their layout. |
Module Contents#
- class magscope.ui.panel_layout._TitleDragFilter(wrapper: PanelWrapper, target: PyQt6.QtWidgets.QWidget)[source]#
Bases:
PyQt6.QtCore.QObjectConvert title-area drags into wrapper move operations.
- class magscope.ui.panel_layout.PanelWrapper(manager: PanelLayoutManager, panel_id: str, widget: PyQt6.QtWidgets.QWidget, *, draggable: bool = True)[source]#
Bases:
PyQt6.QtWidgets.QFrameWrap a panel widget and make its title initiate drag-and-drop.
- column: ReorderableColumn | None = None[source]#
- _drag_filters: list[_TitleDragFilter] = [][source]#
- class magscope.ui.panel_layout.ReorderableColumn(name: str, pinned_ids: Iterable[str] | None = None)[source]#
Bases:
PyQt6.QtWidgets.QWidgetVertical column of draggable panels with drop support.
- _manager: PanelLayoutManager | None = None[source]#
- set_manager(manager: PanelLayoutManager | None) None[source]#
- panels() list[PanelWrapper][source]#
- add_panel(wrapper: PanelWrapper, index: int | None = None) None[source]#
- remove_panel(wrapper: PanelWrapper) None[source]#
- begin_drag(wrapper: PanelWrapper) int[source]#
- cancel_drag(wrapper: PanelWrapper, index: int) None[source]#
- _constrain_index(wrapper: PanelWrapper, index: int) int[source]#
- _constrained_drop_index(wrapper: PanelWrapper, cursor_y: float) int[source]#
- _update_placeholder(wrapper: PanelWrapper | None, cursor_y: float) None[source]#
- _wrapper_from_event(event) PanelWrapper | None[source]#
- class magscope.ui.panel_layout.PanelLayoutManager(settings: QSettings | None, settings_group: str, columns: dict[str, ReorderableColumn] | Iterable[tuple[str, ReorderableColumn]], *, on_layout_changed: Callable[[dict[str, list[str]]], None] | None = None, on_drag_active_changed: Callable[[bool], None] | None = None)[source]#
Coordinate draggable panel columns and persist their layout.
- _wrappers: dict[str, PanelWrapper][source]#
- wrapper_for_id(panel_id: str) PanelWrapper | None[source]#
- register_panel(panel_id: str, widget: PyQt6.QtWidgets.QWidget, default_column: str, *, draggable: bool = True) PanelWrapper[source]#
- add_column(name: str, column: ReorderableColumn, index: int | None = None) None[source]#