Pose state moved to Frames
This commit is contained in:
@@ -41,10 +41,10 @@ class Photobooth:
|
|||||||
if (config.getBool('Photobooth', 'show_preview')
|
if (config.getBool('Photobooth', 'show_preview')
|
||||||
and self._cap.hasPreview):
|
and self._cap.hasPreview):
|
||||||
logging.info('Countdown with preview activated')
|
logging.info('Countdown with preview activated')
|
||||||
self._show_counter = self.showCounterPreview
|
self._show_counter = self.showCountdownPreview
|
||||||
else:
|
else:
|
||||||
logging.info('Countdown without preview activated')
|
logging.info('Countdown without preview activated')
|
||||||
self._show_counter = self.showCounterNoPreview
|
self._show_counter = self.showCountdownNoPreview
|
||||||
|
|
||||||
def initGpio(self, config):
|
def initGpio(self, config):
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ class Photobooth:
|
|||||||
raise TeardownException()
|
raise TeardownException()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def showCounter(self):
|
def showCountdown(self):
|
||||||
|
|
||||||
return self._show_counter
|
return self._show_counter
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ class Photobooth:
|
|||||||
if self._cap.hasIdle:
|
if self._cap.hasIdle:
|
||||||
self._cap.setIdle()
|
self._cap.setIdle()
|
||||||
|
|
||||||
def showCounterPreview(self):
|
def showCountdownPreview(self):
|
||||||
|
|
||||||
self._conn.send(gui.CountdownState())
|
self._conn.send(gui.CountdownState())
|
||||||
|
|
||||||
@@ -157,28 +157,28 @@ class Photobooth:
|
|||||||
|
|
||||||
self.recvAck()
|
self.recvAck()
|
||||||
|
|
||||||
def showCounterNoPreview(self):
|
def showCountdownNoPreview(self):
|
||||||
|
|
||||||
self._conn.send(gui.CountdownState())
|
self._conn.send(gui.CountdownState())
|
||||||
self.recvAck()
|
self.recvAck()
|
||||||
|
|
||||||
def showPose(self):
|
def showPose(self, num_picture):
|
||||||
|
|
||||||
self._conn.send(gui.PoseState())
|
self._conn.send(gui.PoseState(num_picture))
|
||||||
|
|
||||||
def captureSinglePicture(self):
|
def captureSinglePicture(self, num_picture):
|
||||||
|
|
||||||
self.showCounter()
|
self.showCountdown()
|
||||||
self.setCameraIdle()
|
self.setCameraIdle()
|
||||||
self.showPose()
|
self.showPose(num_picture)
|
||||||
picture = self._cap.getPicture()
|
picture = self._cap.getPicture()
|
||||||
self.setCameraActive()
|
self.setCameraActive()
|
||||||
return picture
|
return picture
|
||||||
|
|
||||||
def capturePictures(self):
|
def capturePictures(self):
|
||||||
|
|
||||||
return [self.captureSinglePicture()
|
return [self.captureSinglePicture(i+1)
|
||||||
for _ in range(self._pic_dims.totalNumPictures)]
|
for i in range(self._pic_dims.totalNumPictures)]
|
||||||
|
|
||||||
def assemblePictures(self, pictures):
|
def assemblePictures(self, pictures):
|
||||||
|
|
||||||
|
|||||||
@@ -103,10 +103,25 @@ class GreeterState(GuiState):
|
|||||||
|
|
||||||
class PoseState(GuiState):
|
class PoseState(GuiState):
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, num_picture, **kwargs):
|
||||||
|
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
self.num_picture = num_picture
|
||||||
|
|
||||||
|
@property
|
||||||
|
def num_picture(self):
|
||||||
|
|
||||||
|
return self._num_picture
|
||||||
|
|
||||||
|
@num_picture.setter
|
||||||
|
def num_picture(self, num_picture):
|
||||||
|
|
||||||
|
if not isinstance(num_picture, int):
|
||||||
|
raise ValueError('Picture number must be an integer')
|
||||||
|
|
||||||
|
self._num_picture = num_picture
|
||||||
|
|
||||||
|
|
||||||
class AssembleState(GuiState):
|
class AssembleState(GuiState):
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ class PyQt5Gui(Gui):
|
|||||||
elif isinstance(state, GreeterState):
|
elif isinstance(state, GreeterState):
|
||||||
global cfg
|
global cfg
|
||||||
self._p.handleKeypressEvent = self.handleKeypressEventNoTrigger
|
self._p.handleKeypressEvent = self.handleKeypressEventNoTrigger
|
||||||
self._p.setCentralWidget( PyQt5GreeterMessage(
|
# self._p.setCentralWidget( PyQt5GreeterMessage(
|
||||||
|
self._p.setCentralWidget( Frames.GreeterMessage(
|
||||||
cfg.getInt('Picture', 'num_x'), cfg.getInt('Picture', 'num_y') ) )
|
cfg.getInt('Picture', 'num_x'), cfg.getInt('Picture', 'num_y') ) )
|
||||||
QtCore.QTimer.singleShot(cfg.getInt('Photobooth', 'greeter_time') * 1000, self.sendAck)
|
QtCore.QTimer.singleShot(cfg.getInt('Photobooth', 'greeter_time') * 1000, self.sendAck)
|
||||||
|
|
||||||
@@ -126,7 +127,9 @@ class PyQt5Gui(Gui):
|
|||||||
self._p.centralWidget().update()
|
self._p.centralWidget().update()
|
||||||
|
|
||||||
elif isinstance(state, PoseState):
|
elif isinstance(state, PoseState):
|
||||||
self._p.setCentralWidget(PyQt5PoseMessage())
|
# self._p.setCentralWidget(PyQt5PoseMessage())
|
||||||
|
self._p.setCentralWidget(Frames.PoseMessage(state.num_picture,
|
||||||
|
cfg.getInt('Picture', 'num_x'), cfg.getInt('Picture', 'num_y')))
|
||||||
|
|
||||||
elif isinstance(state, AssembleState):
|
elif isinstance(state, AssembleState):
|
||||||
self._p.setCentralWidget(Frames.WaitMessage('Processing picture...'))
|
self._p.setCentralWidget(Frames.WaitMessage('Processing picture...'))
|
||||||
@@ -312,45 +315,6 @@ class PyQt5MainWindow(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PyQt5GreeterMessage(QtWidgets.QFrame):
|
|
||||||
|
|
||||||
def __init__(self, num_x, num_y):
|
|
||||||
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
self._num_x = num_x
|
|
||||||
self._num_y = num_y
|
|
||||||
self._title = 'Get ready!'
|
|
||||||
self._text = 'We will capture {} pictures!'.format(num_x * num_y)
|
|
||||||
|
|
||||||
self.initFrame()
|
|
||||||
|
|
||||||
|
|
||||||
def initFrame(self):
|
|
||||||
|
|
||||||
self.setStyleSheet('background-color: black; color: white;')
|
|
||||||
|
|
||||||
|
|
||||||
def paintEvent(self, event):
|
|
||||||
|
|
||||||
painter = QtGui.QPainter(self)
|
|
||||||
f = self.font()
|
|
||||||
|
|
||||||
f.setPixelSize(self.height() / 5)
|
|
||||||
painter.setFont(f)
|
|
||||||
rect = QtCore.QRect(0, self.height() * 1 / 5, self.width(), self.height() * 3 / 10)
|
|
||||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._title)
|
|
||||||
|
|
||||||
f.setPixelSize(self.height() / 8)
|
|
||||||
painter.setFont(f)
|
|
||||||
rect = QtCore.QRect(0, self.height() * 3 / 5, self.width(), self.height() * 3 / 10)
|
|
||||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
|
|
||||||
|
|
||||||
painter.end()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PyQt5CountdownMessage(QtWidgets.QFrame):
|
class PyQt5CountdownMessage(QtWidgets.QFrame):
|
||||||
|
|
||||||
def __init__(self, time, action):
|
def __init__(self, time, action):
|
||||||
@@ -448,35 +412,6 @@ class PyQt5CountdownMessage(QtWidgets.QFrame):
|
|||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PyQt5PoseMessage(QtWidgets.QFrame):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
self.initFrame()
|
|
||||||
|
|
||||||
|
|
||||||
def initFrame(self):
|
|
||||||
|
|
||||||
self.setStyleSheet('background-color: black; color: white;')
|
|
||||||
|
|
||||||
|
|
||||||
def paintEvent(self, event):
|
|
||||||
|
|
||||||
painter = QtGui.QPainter(self)
|
|
||||||
|
|
||||||
f = self.font()
|
|
||||||
f.setPixelSize(self.height() / 3)
|
|
||||||
painter.setFont(f)
|
|
||||||
|
|
||||||
painter.drawText(event.rect(), QtCore.Qt.AlignCenter, 'Pose!')
|
|
||||||
|
|
||||||
painter.end()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PyQt5PictureMessage(QtWidgets.QFrame):
|
class PyQt5PictureMessage(QtWidgets.QFrame):
|
||||||
|
|
||||||
def __init__(self, picture):
|
def __init__(self, picture):
|
||||||
|
|||||||
@@ -64,6 +64,77 @@ class IdleMessage(QtWidgets.QFrame):
|
|||||||
painter.end()
|
painter.end()
|
||||||
|
|
||||||
|
|
||||||
|
class GreeterMessage(QtWidgets.QFrame):
|
||||||
|
|
||||||
|
def __init__(self, num_x, num_y):
|
||||||
|
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self._title = 'Get ready!'
|
||||||
|
if num_x * num_y > 1:
|
||||||
|
self._text = ('Capturing {} pictures...'.format(num_x * num_y))
|
||||||
|
else:
|
||||||
|
self._text = 'Starting the countdown...'
|
||||||
|
|
||||||
|
def _paintMessage(self, painter):
|
||||||
|
|
||||||
|
f = self.font()
|
||||||
|
|
||||||
|
f.setPixelSize(self.height() / 5)
|
||||||
|
painter.setFont(f)
|
||||||
|
rect = QtCore.QRect(0, self.height() * 1 / 5,
|
||||||
|
self.width(), self.height() * 3 / 10)
|
||||||
|
painter.drawText(rect, QtCore.Qt.AlignCenter, self._title)
|
||||||
|
|
||||||
|
f.setPixelSize(self.height() / 8)
|
||||||
|
painter.setFont(f)
|
||||||
|
rect = QtCore.QRect(0, self.height() * 3 / 5,
|
||||||
|
self.width(), self.height() * 3 / 10)
|
||||||
|
painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
|
||||||
|
|
||||||
|
def paintEvent(self, event):
|
||||||
|
|
||||||
|
painter = QtGui.QPainter(self)
|
||||||
|
self._paintMessage(painter)
|
||||||
|
painter.end()
|
||||||
|
|
||||||
|
|
||||||
|
class PoseMessage(QtWidgets.QFrame):
|
||||||
|
|
||||||
|
def __init__(self, num_picture, num_x, num_y):
|
||||||
|
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self._title = 'Pose!'
|
||||||
|
if num_x * num_y > 1:
|
||||||
|
self._text = 'Picture {} of {}...'.format(num_picture,
|
||||||
|
num_x * num_y)
|
||||||
|
else:
|
||||||
|
self._text = 'Taking a photo...'
|
||||||
|
|
||||||
|
def _paintMessage(self, painter):
|
||||||
|
|
||||||
|
f = self.font()
|
||||||
|
|
||||||
|
f.setPixelSize(self.height() / 5)
|
||||||
|
painter.setFont(f)
|
||||||
|
rect = QtCore.QRect(0, self.height() * 1 / 5,
|
||||||
|
self.width(), self.height() * 3 / 10)
|
||||||
|
painter.drawText(rect, QtCore.Qt.AlignCenter, self._title)
|
||||||
|
|
||||||
|
f.setPixelSize(self.height() / 8)
|
||||||
|
painter.setFont(f)
|
||||||
|
rect = QtCore.QRect(0, self.height() * 3 / 5,
|
||||||
|
self.width(), self.height() * 3 / 10)
|
||||||
|
painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
|
||||||
|
|
||||||
|
def paintEvent(self, event):
|
||||||
|
|
||||||
|
painter = QtGui.QPainter(self)
|
||||||
|
self._paintMessage(painter)
|
||||||
|
painter.end()
|
||||||
|
|
||||||
|
|
||||||
class WaitMessage(QtWidgets.QFrame):
|
class WaitMessage(QtWidgets.QFrame):
|
||||||
# With spinning wait clock, inspired by
|
# With spinning wait clock, inspired by
|
||||||
# https://wiki.python.org/moin/PyQt/A%20full%20widget%20waiting%20indicator
|
# https://wiki.python.org/moin/PyQt/A%20full%20widget%20waiting%20indicator
|
||||||
|
|||||||
Reference in New Issue
Block a user