Source code for cdl.core.gui.panel.signal

# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.

"""
.. Signal panel (see parent package :mod:`cdl.core.gui.panel`)
"""

# pylint: disable=invalid-name  # Allows short reference names like x, y, ...

from __future__ import annotations

from typing import TYPE_CHECKING, Type

from plotpy.tools import (
    HCursorTool,
    HRangeTool,
    LabelTool,
    RectangleTool,
    SegmentTool,
    VCursorTool,
    XCursorTool,
)

from cdl.config import _
from cdl.core.gui import roieditor
from cdl.core.gui.actionhandler import SignalActionHandler
from cdl.core.gui.panel.base import BaseDataPanel
from cdl.core.gui.plothandler import SignalPlotHandler
from cdl.core.gui.processor.signal import SignalProcessor
from cdl.core.io.signal import SignalIORegistry
from cdl.core.model.signal import (
    CURVESTYLES,
    SignalObj,
    SignalROI,
    create_signal_from_param,
    new_signal_param,
)

if TYPE_CHECKING:
    import guidata.dataset as gds
    from qtpy import QtWidgets as QW

    from cdl.core.gui.docks import DockablePlotWidget
    from cdl.core.model.signal import NewSignalParam


[docs] class SignalPanel(BaseDataPanel[SignalObj, SignalROI, roieditor.SignalROIEditor]): """Object handling the item list, the selected item properties and plot, specialized for Signal objects""" PANEL_STR = _("Signal Panel") PANEL_STR_ID = "signal" PARAMCLASS = SignalObj # The following tools are used to create annotations on signals. The annotation # items are created using PlotPy's default settings. Those appearance settings # may be modified in the configuration (see `cdl.config`). ANNOTATION_TOOLS = ( LabelTool, VCursorTool, HCursorTool, XCursorTool, SegmentTool, RectangleTool, HRangeTool, ) IO_REGISTRY = SignalIORegistry H5_PREFIX = "DataLab_Sig" # pylint: disable=duplicate-code
[docs] @staticmethod def get_roieditor_class() -> Type[roieditor.SignalROIEditor]: """Return ROI editor class""" return roieditor.SignalROIEditor
def __init__( self, parent: QW.QWidget, dockableplotwidget: DockablePlotWidget, panel_toolbar: QW.QToolBar, ) -> None: super().__init__(parent) self.plothandler = SignalPlotHandler(self, dockableplotwidget.plotwidget) self.processor = SignalProcessor(self, dockableplotwidget.plotwidget) view_toolbar = dockableplotwidget.toolbar self.acthandler = SignalActionHandler(self, panel_toolbar, view_toolbar) # ------Creating, adding, removing objects------------------------------------------
[docs] def get_newparam_from_current( self, newparam: NewSignalParam | None = None, title: str | None = None ) -> NewSignalParam | None: """Get new object parameters from the current object. Args: newparam (guidata.dataset.DataSet): new object parameters. If None, create a new one. title: new object title. If None, use the current object title, or the default title. Returns: New object parameters """ curobj: SignalObj = self.objview.get_current_object() if newparam is None: newparam = new_signal_param(title=title) if curobj is not None: newparam.size = len(curobj.data) newparam.xmin = curobj.x.min() newparam.xmax = curobj.x.max() return newparam
[docs] def new_object( self, newparam: NewSignalParam | None = None, addparam: gds.DataSet | None = None, edit: bool = True, add_to_panel: bool = True, ) -> SignalObj | None: """Create a new object (signal). Args: newparam (guidata.dataset.DataSet): new object parameters addparam (guidata.dataset.DataSet): additional parameters edit (bool): Open a dialog box to edit parameters (default: True) add_to_panel (bool): Add the new object to the panel (default: True) Returns: New object """ if not self.mainwindow.confirm_memory_state(): return None newparam = self.get_newparam_from_current(newparam) signal = create_signal_from_param( newparam, addparam=addparam, edit=edit, parent=self.parent() ) if signal is None: return None if add_to_panel: self.add_object(signal) return signal
# ------Plotting--------------------------------------------------------------------
[docs] def toggle_anti_aliasing(self, state: bool) -> None: """Toggle anti-aliasing on/off Args: state: state of the anti-aliasing """ self.plothandler.toggle_anti_aliasing(state)
[docs] def reset_curve_styles(self) -> None: """Reset curve styles""" CURVESTYLES.reset_styles()