Source code for silx.gui.plot3d.tools.GroupPropertiesWidget

# coding: utf-8
# /*##########################################################################
#
# Copyright (c) 2018 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
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# ###########################################################################*/
""":class:`GroupPropertiesWidget` allows to reset properties in a GroupItem."""

from __future__ import absolute_import

__authors__ = ["T. Vincent"]
__license__ = "MIT"
__date__ = "24/04/2018"

from ....gui import qt
from ....gui.colors import Colormap
from ....gui.dialog.ColormapDialog import ColormapDialog

from ..items import SymbolMixIn, ColormapMixIn


[docs]class GroupPropertiesWidget(qt.QWidget): """Set properties of all items in a :class:`GroupItem` :param QWidget parent: """ MAX_MARKER_SIZE = 20 """Maximum value for marker size""" MAX_LINE_WIDTH = 10 """Maximum value for line width""" def __init__(self, parent=None): super(GroupPropertiesWidget, self).__init__(parent) self._group = None self.setEnabled(False) # Set widgets layout = qt.QFormLayout(self) self.setLayout(layout) # Colormap colormapButton = qt.QPushButton('Set...') colormapButton.setToolTip("Set colormap for all items") colormapButton.clicked.connect(self._colormapButtonClicked) layout.addRow('Colormap', colormapButton) self._markerComboBox = qt.QComboBox(self) self._markerComboBox.addItems(SymbolMixIn.getSupportedSymbolNames()) # Marker markerButton = qt.QPushButton('Set') markerButton.setToolTip("Set marker for all items") markerButton.clicked.connect(self._markerButtonClicked) markerLayout = qt.QHBoxLayout() markerLayout.setContentsMargins(0, 0, 0, 0) markerLayout.addWidget(self._markerComboBox, 1) markerLayout.addWidget(markerButton, 0) layout.addRow('Marker', markerLayout) # Marker size self._markerSizeSlider = qt.QSlider() self._markerSizeSlider.setOrientation(qt.Qt.Horizontal) self._markerSizeSlider.setSingleStep(1) self._markerSizeSlider.setRange(1, self.MAX_MARKER_SIZE) self._markerSizeSlider.setValue(1) markerSizeButton = qt.QPushButton('Set') markerSizeButton.setToolTip("Set marker size for all items") markerSizeButton.clicked.connect(self._markerSizeButtonClicked) markerSizeLayout = qt.QHBoxLayout() markerSizeLayout.setContentsMargins(0, 0, 0, 0) markerSizeLayout.addWidget(qt.QLabel('1')) markerSizeLayout.addWidget(self._markerSizeSlider, 1) markerSizeLayout.addWidget(qt.QLabel(str(self.MAX_MARKER_SIZE))) markerSizeLayout.addWidget(markerSizeButton, 0) layout.addRow('Marker Size', markerSizeLayout) # Line width self._lineWidthSlider = qt.QSlider() self._lineWidthSlider.setOrientation(qt.Qt.Horizontal) self._lineWidthSlider.setSingleStep(1) self._lineWidthSlider.setRange(1, self.MAX_LINE_WIDTH) self._lineWidthSlider.setValue(1) lineWidthButton = qt.QPushButton('Set') lineWidthButton.setToolTip("Set line width for all items") lineWidthButton.clicked.connect(self._lineWidthButtonClicked) lineWidthLayout = qt.QHBoxLayout() lineWidthLayout.setContentsMargins(0, 0, 0, 0) lineWidthLayout.addWidget(qt.QLabel('1')) lineWidthLayout.addWidget(self._lineWidthSlider, 1) lineWidthLayout.addWidget(qt.QLabel(str(self.MAX_LINE_WIDTH))) lineWidthLayout.addWidget(lineWidthButton, 0) layout.addRow('Line Width', lineWidthLayout) self._colormapDialog = None # To store dialog self._colormap = Colormap()
[docs] def getGroup(self): """Returns the :class:`GroupItem` this widget is attached to. :rtype: Union[GroupItem, None] """ return self._group
[docs] def setGroup(self, group): """Set the :class:`GroupItem` this widget is attached to. :param GroupItem group: GroupItem to control (or None) """ self._group = group if group is not None: self.setEnabled(True)
def _colormapButtonClicked(self, checked=False): """Handle colormap button clicked""" group = self.getGroup() if group is None: return if self._colormapDialog is None: self._colormapDialog = ColormapDialog(self) self._colormapDialog.setColormap(self._colormap) previousColormap = self._colormapDialog.getColormap() if self._colormapDialog.exec_(): colormap = self._colormapDialog.getColormap() for item in group.visit(): if isinstance(item, ColormapMixIn): itemCmap = item.getColormap() cmapName = colormap.getName() if cmapName is not None: itemCmap.setName(colormap.getName()) else: itemCmap.setColormapLUT(colormap.getColormapLUT()) itemCmap.setNormalization(colormap.getNormalization()) itemCmap.setVRange(colormap.getVMin(), colormap.getVMax()) else: # Reset colormap self._colormapDialog.setColormap(previousColormap) def _markerButtonClicked(self, checked=False): """Handle marker set button clicked""" group = self.getGroup() if group is None: return marker = self._markerComboBox.currentText() for item in group.visit(): if isinstance(item, SymbolMixIn): item.setSymbol(marker) def _markerSizeButtonClicked(self, checked=False): """Handle marker size set button clicked""" group = self.getGroup() if group is None: return markerSize = self._markerSizeSlider.value() for item in group.visit(): if isinstance(item, SymbolMixIn): item.setSymbolSize(markerSize) def _lineWidthButtonClicked(self, checked=False): """Handle line width set button clicked""" group = self.getGroup() if group is None: return lineWidth = self._lineWidthSlider.value() for item in group.visit(): if hasattr(item, 'setLineWidth'): item.setLineWidth(lineWidth)