summaryrefslogtreecommitdiff
path: root/silx/gui/plot/tools/profile/ScatterProfileToolBar.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/gui/plot/tools/profile/ScatterProfileToolBar.py')
-rw-r--r--silx/gui/plot/tools/profile/ScatterProfileToolBar.py179
1 files changed, 13 insertions, 166 deletions
diff --git a/silx/gui/plot/tools/profile/ScatterProfileToolBar.py b/silx/gui/plot/tools/profile/ScatterProfileToolBar.py
index 0d30651..44187ef 100644
--- a/silx/gui/plot/tools/profile/ScatterProfileToolBar.py
+++ b/silx/gui/plot/tools/profile/ScatterProfileToolBar.py
@@ -30,20 +30,11 @@ __license__ = "MIT"
__date__ = "28/06/2018"
-import logging
-import weakref
+from silx.utils import deprecation
+from . import toolbar
-import numpy
-from ._BaseProfileToolBar import _BaseProfileToolBar
-from ... import items
-from ....utils.concurrent import submitToQtMainThread
-
-
-_logger = logging.getLogger(__name__)
-
-
-class ScatterProfileToolBar(_BaseProfileToolBar):
+class ScatterProfileToolBar(toolbar.ProfileToolBar):
"""QToolBar providing scatter plot profiling tools
:param parent: See :class:`QToolBar`.
@@ -51,157 +42,13 @@ class ScatterProfileToolBar(_BaseProfileToolBar):
:param str title: See :class:`QToolBar`.
"""
- def __init__(self, parent=None, plot=None, title='Scatter Profile'):
- super(ScatterProfileToolBar, self).__init__(parent, plot, title)
-
- self.__nPoints = 1024
- self.__scatterRef = None
- self.__futureInterpolator = None
-
- plot = self.getPlotWidget()
- if plot is not None:
- self._setScatterItem(plot._getActiveItem(kind='scatter'))
- plot.sigActiveScatterChanged.connect(self.__activeScatterChanged)
-
- def __activeScatterChanged(self, previous, legend):
- """Handle change of active scatter
-
- :param Union[str,None] previous:
- :param Union[str,None] legend:
- """
- plot = self.getPlotWidget()
- if plot is None or legend is None:
- scatter = None
- else:
- scatter = plot.getScatter(legend)
- self._setScatterItem(scatter)
-
- def _getScatterItem(self):
- """Returns the scatter item currently handled by this tool.
-
- :rtype: ~silx.gui.plot.items.Scatter
- """
- return None if self.__scatterRef is None else self.__scatterRef()
-
- def _setScatterItem(self, scatter):
- """Set the scatter tracked by this tool
-
- :param Union[None,silx.gui.plot.items.Scatter] scatter:
- """
- self.__futureInterpolator = None # Reset currently expected future
-
- previousScatter = self._getScatterItem()
- if previousScatter is not None:
- previousScatter.sigItemChanged.disconnect(
- self.__scatterItemChanged)
-
- if scatter is None:
- self.__scatterRef = None
- else:
- self.__scatterRef = weakref.ref(scatter)
- scatter.sigItemChanged.connect(self.__scatterItemChanged)
-
- # Refresh profile
- self.updateProfile()
-
- def __scatterItemChanged(self, event):
- """Handle update of active scatter plot item
-
- :param ItemChangedType event:
- """
- if event == items.ItemChangedType.DATA:
- self.updateProfile() # Refresh profile
-
- def hasPendingOperations(self):
- """Returns True if waiting for an interpolator to be ready
-
- :rtype: bool
- """
- return (self.__futureInterpolator is not None and
- not self.__futureInterpolator.done())
-
- # Number of points
-
- def getNPoints(self):
- """Returns the number of points of the profiles
-
- :rtype: int
- """
- return self.__nPoints
-
- def setNPoints(self, npoints):
- """Set the number of points of the profiles
-
- :param int npoints:
- """
- npoints = int(npoints)
- if npoints < 1:
- raise ValueError("Unsupported number of points: %d" % npoints)
- elif npoints != self.__nPoints:
- self.__nPoints = npoints
- self.updateProfile()
-
- # Overridden methods
-
- def computeProfileTitle(self, x0, y0, x1, y1):
- """Compute corresponding plot title
-
- :param float x0: Profile start point X coord
- :param float y0: Profile start point Y coord
- :param float x1: Profile end point X coord
- :param float y1: Profile end point Y coord
- :return: Title to use
- :rtype: str
- """
- if self.hasPendingOperations():
- return 'Pre-processing data...'
- else:
- return super(ScatterProfileToolBar, self).computeProfileTitle(
- x0, y0, x1, y1)
-
- def __futureDone(self, future):
- """Handle completion of the interpolator creation"""
- if future is self.__futureInterpolator:
- # Only handle future callbacks for the current one
- submitToQtMainThread(self.updateProfile)
-
- def computeProfile(self, x0, y0, x1, y1):
- """Compute corresponding profile
-
- :param float x0: Profile start point X coord
- :param float y0: Profile start point Y coord
- :param float x1: Profile end point X coord
- :param float y1: Profile end point Y coord
- :return: (points, values) profile data or None
- """
- scatter = self._getScatterItem()
- if scatter is None or self.hasPendingOperations():
- return None
-
- # Lazy async request of the interpolator
- future = scatter._getInterpolator()
- if future is not self.__futureInterpolator:
- # First time we request this interpolator
- self.__futureInterpolator = future
- if not future.done():
- future.add_done_callback(self.__futureDone)
- return None
-
- if future.cancelled() or future.exception() is not None:
- return None # Something went wrong
-
- interpolator = future.result()
- if interpolator is None:
- return None # Cannot init an interpolator
-
- nPoints = self.getNPoints()
- points = numpy.transpose((
- numpy.linspace(x0, x1, nPoints, endpoint=True),
- numpy.linspace(y0, y1, nPoints, endpoint=True)))
-
- values = interpolator(points)
-
- if not numpy.any(numpy.isfinite(values)):
- return None # Profile outside convex hull
-
- return points, values
+ def __init__(self, parent=None, plot=None, title=None):
+ super(ScatterProfileToolBar, self).__init__(parent, plot)
+ if title is not None:
+ deprecation.deprecated_warning("Attribute",
+ name="title",
+ reason="removed",
+ since_version="0.13.0",
+ only_once=True,
+ skip_backtrace_count=1)
+ self.setScheme("scatter")