Source code for sas.qtgui.Plotting.SlicerModel
from PyQt5 import QtGui
from PyQt5 import QtCore
import sas.qtgui.Utilities.GuiUtils as GuiUtils
[docs]class SlicerModel(object):
[docs] def __init__(self):
# Model representation of local parameters
self._model = QtGui.QStandardItemModel()
self.update_model = True
self._model.itemChanged.connect(self.setParamsFromModelItem)
[docs] def setModelFromParams(self):
"""
Set up the Qt model for data handling between controls
"""
parameters = self.getParams()
self._model.removeRows(0, self._model.rowCount())
# Crete/overwrite model items
for parameter in list(parameters.keys()):
item1 = QtGui.QStandardItem(parameter)
if isinstance(parameters[parameter], bool):
item2 = QtGui.QStandardItem(parameters[parameter])
item2.setCheckable(True)
item2.setCheckState(QtCore.Qt.Checked if parameters[parameter] else QtCore.Qt.Unchecked)
else:
item2 = QtGui.QStandardItem(GuiUtils.formatNumber(parameters[parameter]))
self._model.appendRow([item1, item2])
self._model.setHeaderData(0, QtCore.Qt.Horizontal, "Parameter")
self._model.setHeaderData(1, QtCore.Qt.Horizontal, "Value")
[docs] def setParamsFromModel(self):
"""
Set up the params dictionary based on the current model content.
"""
params = self.getParams()
for row_index in range(self._model.rowCount()):
# index = self._model.indexFromItem(item)
# row_index = index.row()
param_name = str(self._model.item(row_index, 0).text())
if self._model.item(row_index, 1).isCheckable():
params[param_name] = True if self._model.item(row_index, 1).checkState() == QtCore.Qt.Checked else False
else:
params[param_name] = float(self._model.item(row_index, 1).text())
self.update_model = False
self.setParams(params)
self.update_model = True
[docs] def setParamsFromModelItem(self, item):
"""
Set up the params dictionary for the parameter in item.
"""
params = self.getParams()
index = self._model.indexFromItem(item)
row_index = index.row()
param_name = str(self._model.item(row_index, 0).text())
if self._model.item(row_index, 1).isCheckable():
params[param_name] = True if self._model.item(row_index, 1).checkState() == QtCore.Qt.Checked else False
else:
params[param_name] = float(self._model.item(row_index, 1).text())
self.update_model = False
self.setParams(params)
self.update_model = True
[docs] def model(self):
'''getter for the model'''
return self._model
[docs] def getParams(self):
''' pure virtual '''
raise NotImplementedError("Parameter getter must be implemented in derived class.")
[docs] def setParams(self):
''' pure virtual '''
raise NotImplementedError("Parameter setter must be implemented in derived class.")
[docs] def validate(self):
''' pure virtual '''
raise NotImplementedError("Validator must be implemented in derived class.")