diff options
Diffstat (limited to 'silx/gui/plot/ColormapDialog.py')
-rw-r--r-- | silx/gui/plot/ColormapDialog.py | 78 |
1 files changed, 31 insertions, 47 deletions
diff --git a/silx/gui/plot/ColormapDialog.py b/silx/gui/plot/ColormapDialog.py index ad1425c..748dd72 100644 --- a/silx/gui/plot/ColormapDialog.py +++ b/silx/gui/plot/ColormapDialog.py @@ -1,7 +1,7 @@ # coding: utf-8 # /*########################################################################## # -# Copyright (c) 2004-2016 European Synchrotron Radiation Facility +# Copyright (c) 2004-2017 European Synchrotron Radiation Facility # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -42,7 +42,7 @@ Create the colormap dialog and set the colormap description and data range: Get the colormap description (compatible with :class:`Plot`) from the dialog: >>> cmap = dialog.getColormap() ->>> cmap['name'] +>>> cmap.getName() 'red' It is also possible to display an histogram of the image in the dialog. @@ -61,7 +61,7 @@ from __future__ import division __authors__ = ["V.A. Sole", "T. Vincent"] __license__ = "MIT" -__date__ = "29/03/2016" +__date__ = "02/10/2017" import logging @@ -69,37 +69,13 @@ import logging import numpy from .. import qt +from .Colormap import Colormap from . import PlotWidget - +from silx.gui.widgets.FloatEdit import FloatEdit _logger = logging.getLogger(__name__) -class _FloatEdit(qt.QLineEdit): - """Field to edit a float value. - - :param parent: See :class:`QLineEdit` - :param float value: The value to set the QLineEdit to. - """ - def __init__(self, parent=None, value=None): - qt.QLineEdit.__init__(self, parent) - self.setValidator(qt.QDoubleValidator()) - self.setAlignment(qt.Qt.AlignRight) - if value is not None: - self.setValue(value) - - def value(self): - """Return the QLineEdit current value as a float.""" - return float(self.text()) - - def setValue(self, value): - """Set the current value of the LineEdit - - :param float value: The value to set the QLineEdit to. - """ - self.setText('%g' % value) - - class ColormapDialog(qt.QDialog): """A QDialog widget to set the colormap. @@ -107,7 +83,7 @@ class ColormapDialog(qt.QDialog): :param str title: The QDialog title """ - sigColormapChanged = qt.Signal(dict) + sigColormapChanged = qt.Signal(Colormap) """Signal triggered when the colormap is changed. It provides a dict describing the colormap to the slot. @@ -122,10 +98,13 @@ class ColormapDialog(qt.QDialog): self._dataRange = None self._minMaxWasEdited = False - self._colormapList = ( + colormaps = [ 'gray', 'reversed gray', 'temperature', 'red', 'green', 'blue', 'jet', - 'viridis', 'magma', 'inferno', 'plasma') + 'viridis', 'magma', 'inferno', 'plasma'] + if 'hsv' in Colormap.getSupportedColormaps(): + colormaps.append('hsv') + self._colormapList = tuple(colormaps) # Make the GUI vLayout = qt.QVBoxLayout(self) @@ -172,14 +151,14 @@ class ColormapDialog(qt.QDialog): formLayout.addRow('Range:', self._rangeAutoscaleButton) # Min row - self._minValue = _FloatEdit(value=1.) + self._minValue = FloatEdit(parent=self, value=1.) self._minValue.setEnabled(False) self._minValue.textEdited.connect(self._minMaxTextEdited) self._minValue.editingFinished.connect(self._minEditingFinished) formLayout.addRow('\tMin:', self._minValue) # Max row - self._maxValue = _FloatEdit(value=10.) + self._maxValue = FloatEdit(parent=self, value=10.) self._maxValue.setEnabled(False) self._maxValue.textEdited.connect(self._minMaxTextEdited) self._maxValue.editingFinished.connect(self._maxEditingFinished) @@ -214,8 +193,8 @@ class ColormapDialog(qt.QDialog): """Init the plot to display the range and the values""" self._plot = PlotWidget() self._plot.setDataMargins(yMinMargin=0.125, yMaxMargin=0.125) - self._plot.setGraphXLabel("Data Values") - self._plot.setGraphYLabel("") + self._plot.getXAxis().setLabel("Data Values") + self._plot.getYAxis().setLabel("") self._plot.setInteractiveMode('select', zoomOnWheel=False) self._plot.setActiveCurveHandling(False) self._plot.setMinimumSize(qt.QSize(250, 200)) @@ -392,17 +371,22 @@ class ColormapDialog(qt.QDialog): self._plotUpdate() def getColormap(self): - """Return the colormap description as a dict. + """Return the colormap description as a :class:`.Colormap`. - See :class:`Plot` for documentation on the colormap dict. """ isNormLinear = self._normButtonLinear.isChecked() - colormap = { - 'name': str(self._comboBoxColormap.currentText()).lower(), - 'normalization': 'linear' if isNormLinear else 'log', - 'autoscale': self._rangeAutoscaleButton.isChecked(), - 'vmin': self._minValue.value(), - 'vmax': self._maxValue.value()} + if self._rangeAutoscaleButton.isChecked(): + vmin = None + vmax = None + else: + vmin = self._minValue.value() + vmax = self._maxValue.value() + norm = Colormap.LINEAR if isNormLinear else Colormap.LOGARITHM + colormap = Colormap( + name=str(self._comboBoxColormap.currentText()).lower(), + normalization=norm, + vmin=vmin, + vmax=vmax) return colormap def setColormap(self, name=None, normalization=None, @@ -423,9 +407,9 @@ class ColormapDialog(qt.QDialog): self._comboBoxColormap.setCurrentIndex(index) if normalization is not None: - assert normalization in ('linear', 'log') - self._normButtonLinear.setChecked(normalization == 'linear') - self._normButtonLog.setChecked(normalization == 'log') + assert normalization in Colormap.NORMALIZATIONS + self._normButtonLinear.setChecked(normalization == Colormap.LINEAR) + self._normButtonLog.setChecked(normalization == Colormap.LOGARITHM) if vmin is not None: self._minValue.setValue(vmin) |