main.py 3.19 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
"""

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

from PyQt5 import QtWidgets
15
from PyQt5.QtWidgets import QGraphicsBlurEffect, QApplication
16
from PyQt5.QtCore import QTime, Qt
Antoine Lima's avatar
Antoine Lima committed
17

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

class MainWin(QtWidgets.QMainWindow):
	def __init__(self, parent=None):
		QtWidgets.QWidget.__init__(self, parent)
		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)
29
		
30
31
32
33
34
35
36
		#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
37
38
		self.modules = [
			MenuModule(self),
39
40
			AuthQuickModule(self),
			AuthLeagueModule(self),
Antoine Lima's avatar
Antoine Lima committed
41
42
43
44
45
			GameModule(self),
			EndGameModule(self),
			LeaderboardModule(self),
			OptionsModule(self)
		]
46
47
		
		for mod in self.modules:
Antoine Lima's avatar
Antoine Lima committed
48
			self.ui.panels.addWidget(mod)
49
		
Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
50
		self.ui.panels.setCurrentIndex(0)
51
		self.ui.panels.currentWidget().setFocus()
Antoine Lima's avatar
Antoine Lima committed
52
		self.ui.panels.setFocusProxy(self.ui.panels.currentWidget())
53
		self.ui.panels.currentWidget().load()
Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
54
55
		self.displaySystemTime()
		self.startTimer(1000)
56
57
58
	
	#def eventFilter(target, event):
	#	return event.type()==QEvent.KeyPress and event.key() not in acceptedKeys
Antoine Lima's avatar
Antoine Lima committed
59

Antoine Lima's avatar
UI v0.3    
Antoine Lima committed
60
61
	def timerEvent(self, e):
		self.displaySystemTime()
Antoine Lima's avatar
Antoine Lima committed
62

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

	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]
	
70
71
72
73
74
75
	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
76
77
		for modIdx in modulesIdx:
			self.modules[modIdx].other(**msg)
78
79
80
81
82
	
	@staticmethod
	def getContent(path):
		contentFolder = join(dirname(dirname(abspath(__file__))), 'content')
		return join(contentFolder, path)
Antoine Lima's avatar
Base UI  
Antoine Lima committed
83

84
85
86
87
88
89
90
91
92
	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
93

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