main.py 3.24 KB
Newer Older
Antoine Lima's avatar
Base UI  
Antoine Lima committed
1
2
3
4
5
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 18 18:34:40 2018

Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
6
@author: Antoine Lima, Leo Reynaert, Domitille Jehenne
Antoine Lima's avatar
Base UI  
Antoine Lima committed
7
8
"""

9
10
11
import os
OnRasp = os.uname()[1] == 'raspberrypi'

Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
12
13
import sys
import logging
Antoine Lima's avatar
Antoine Lima committed
14
import threading
Antoine Lima's avatar
Antoine Lima committed
15
from os.path import dirname, abspath, join
Antoine Lima's avatar
Base UI  
Antoine Lima committed
16
17

from PyQt5 import QtWidgets
18
from PyQt5.QtWidgets import QGraphicsBlurEffect, QApplication
19
from PyQt5.QtCore import QTime, Qt
Antoine Lima's avatar
Antoine Lima committed
20

21
22
from ui.main_ui import Ui_MainWindow
from modules import *
Antoine Lima's avatar
Antoine Lima committed
23
from player import Side
24
from input import GPIOThread
Antoine Lima's avatar
Antoine Lima committed
25
from database import Database
Antoine Lima's avatar
Base UI  
Antoine Lima committed
26
27
28
29
30
31

class MainWin(QtWidgets.QMainWindow):
	def __init__(self, parent=None):
		QtWidgets.QWidget.__init__(self, parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
32
		
33
34
35
36
37
38
39
		#Background blur
		bgBlur = QGraphicsBlurEffect()
		bgBlur.setBlurHints(QGraphicsBlurEffect.QualityHint)
		#bgBlur.setBlurRadius(5)
		#self.ui.panels.setGraphicsEffect(bgBlur)
		
		# Module loading
Antoine Lima's avatar
Antoine Lima committed
40
41
		self.modules = [
			MenuModule(self),
42
43
			AuthQuickModule(self),
			AuthLeagueModule(self),
Antoine Lima's avatar
Antoine Lima committed
44
45
46
47
48
			GameModule(self),
			EndGameModule(self),
			LeaderboardModule(self),
			OptionsModule(self)
		]
49
50
		
		for mod in self.modules:
Antoine Lima's avatar
Antoine Lima committed
51
			self.ui.panels.addWidget(mod)
52
		
Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
53
		self.ui.panels.setCurrentIndex(0)
54
		self.ui.panels.currentWidget().setFocus()
Antoine Lima's avatar
Antoine Lima committed
55
		self.ui.panels.setFocusProxy(self.ui.panels.currentWidget())
56
		self.ui.panels.currentWidget().load()
Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
57
58
		self.displaySystemTime()
		self.startTimer(1000)
59
60
61
	
	#def eventFilter(target, event):
	#	return event.type()==QEvent.KeyPress and event.key() not in acceptedKeys
Antoine Lima's avatar
Antoine Lima committed
62

Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
63
64
	def timerEvent(self, e):
		self.displaySystemTime()
Antoine Lima's avatar
Antoine Lima committed
65

Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
66
67
	def displaySystemTime(self):
		self.ui.lcdTime.display(QTime.currentTime().toString("hh:mm:ss"))
Antoine Lima's avatar
Antoine Lima committed
68
69
70
71
72

	def findMod(self, type):
		mod_idx = [i for i, x in enumerate(self.modules) if isinstance(x, type)]
		return -1 if len(mod_idx)==0 else mod_idx[0]
	
73
74
75
76
77
78
	def dispatchMessage(self, msg, toType=None, toAll=False):
		if toType!=None:
                    modulesIdx = [self.findMod(toType)]
		else:
                    modulesIdx = self.modules if toAll else [self.findMod(type(self.ui.panels.currentWidget()))]			
		
Antoine Lima's avatar
Antoine Lima committed
79
80
		for modIdx in modulesIdx:
			self.modules[modIdx].other(**msg)
81
82
83
84
85
	
	@staticmethod
	def getContent(path):
		contentFolder = join(dirname(dirname(abspath(__file__))), 'content')
		return join(contentFolder, path)
Antoine Lima's avatar
Base UI  
Antoine Lima committed
86

87
88
89
90
91
92
93
94
95
	def _refreshAfterSettings(self):
		from settings import Settings
		
		if Settings.ui['fullscreen']:
			self.showFullScreen()
			QApplication.setOverrideCursor(Qt.BlankCursor);
		else:
			self.showNormal()
			QApplication.setOverrideCursor(Qt.ArrowCursor);
Antoine Lima's avatar
Antoine Lima committed
96

Antoine Lima's avatar
Base UI  
Antoine Lima committed
97
if __name__=='__main__':
Antoine Lima's avatar
Antoine Lima committed
98
	from settings import Settings
99
	from replay import Replay as ReplayThread
Antoine Lima's avatar
Antoine Lima committed
100
	
101
102
103
104
105
106
107
	try:
		#logging.basicConfig(filename='babyfoot.log', level=logging.DEBUG)
		logging.basicConfig(level=logging.DEBUG)
		
		app = QtWidgets.QApplication(sys.argv)
		myapp = MainWin()
		
108
109
110
111
		if ReplayThread.isCamAvailable():
			threadReplay = ReplayThread(Side.Left)
			threadReplay.start()
			myapp.dispatchMessage({'replayThread': threadReplay}, toType=GameModule)
112
113
114
115
116
117
118
119
120
		
		threadGPIO = GPIOThread(myapp)
		threadGPIO.start()
		
		myapp.show()
		app.exec_()
		
		threadGPIO.stop()
		
121
122
123
		if ReplayThread.isCamAvailable():
			threadReplay.stop()
			threadReplay.join()
124
125
126
127
128
		
		threadGPIO.join()
		
	finally:
		GPIOThread.clean()
Antoine Lima's avatar
Antoine Lima committed
129
		Database.instance().close()