Source code for sas.qtgui.Utilities.FrameSelect
# pylint: disable=C0103, I1101
"""
FrameSelect class describes behaviour of the FrameSelect dialog
"""
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from .UI.FrameSelectUI import Ui_FrameSelect
[docs]class FrameSelect(QtWidgets.QDialog, Ui_FrameSelect):
"""
Class to describe the behaviour of the Frame Selector widget
"""
[docs] def __init__(self, parent=None, frames=1, isBSL=True):
super(FrameSelect, self).__init__(parent)
self.setupUi(self)
self.n_frames = frames
self.isBSL = isBSL
self.firstFrame = None
self.lastFrame = None
self.increment = None
self.setWindowTitle("Frame Select")
self.addState()
self.addSlots()
self.addText()
[docs] def addText(self):
"""
Initialize view
"""
instructions = ("The file you've selected has {} frames. "
"Please select a subset of frames to convert to CanSAS "
"format").format(self.n_frames)
self.lblDescription.setText(instructions)
self.lblDescription.setWordWrap(True)
self.updateDisplay()
if self.isBSL:
self.chkSeparateFiles.setVisible(False)
self.chkSeparateFiles.setEnabled(False)
[docs] def addState(self):
"""
Minor bookkeeping
"""
self.firstFrame = 0
self.lastFrame = self.n_frames-1
self.increment = 1
self.updateDisplay()
[docs] def addSlots(self):
"""
Describe behaviour of OK and Cancel buttons
"""
self.cmdOK.clicked.connect(self.accept)
self.cmdCancel.clicked.connect(self.reject)
self.txtFirstFrame.setValidator(QtGui.QIntValidator(0, self.n_frames-1))
self.txtLastFrame.setValidator(QtGui.QIntValidator(0, self.n_frames-1))
self.txtIncrement.setValidator(QtGui.QIntValidator())
self.txtFirstFrame.editingFinished.connect(self.onFirstChanged)
self.txtLastFrame.editingFinished.connect(self.onLastChanged)
self.txtIncrement.editingFinished.connect(self.onIncrementChanged)
[docs] def updateDisplay(self):
"""
manage model-view sync
"""
self.txtFirstFrame.setText(str(self.firstFrame))
self.txtLastFrame.setText(str(self.lastFrame))
self.txtIncrement.setText(str(self.increment))
[docs] def onFirstChanged(self):
"""
Manage view-model sync
"""
self.cmdOK.setEnabled(False)
try:
frame = int(self.txtFirstFrame.text())
except ValueError:
return
if frame > self.lastFrame:
return
if frame < 0:
return
self.firstFrame = frame
self.cmdOK.setEnabled(True)
[docs] def onLastChanged(self):
"""
Manage view-model sync
"""
self.cmdOK.setEnabled(False)
try:
frame = int(self.txtLastFrame.text())
except ValueError:
return
if frame < self.firstFrame:
return
if frame < 0:
return
self.lastFrame = frame
self.cmdOK.setEnabled(True)
[docs] def onIncrementChanged(self):
"""
Manage view-model sync
"""
self.cmdOK.setEnabled(False)
try:
inc = int(self.txtIncrement.text())
except ValueError:
return
if inc < 0:
return
self.increment = inc
self.cmdOK.setEnabled(True)
[docs] def getFrames(self):
"""
Accessor for state values
"""
return (self.firstFrame, self.lastFrame, self.increment)