#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# #! is a sha-bang. It tells that the Python interpreter should run this code

"""
ZetCode PyQt5 tutorial 

This example shows a tooltip on 
a window and a button.

Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""

import sys
import psutil
from PyQt5.QtWidgets import (QWidget, QToolTip, QMessageBox, QDesktopWidget,
    QPushButton, QApplication)
from PyQt5.QtGui import QFont  
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import *
from PyQt5.QtGui import *


from inputs import devices
for device in devices:
    print(devices.gamepads)

#from inputs import get_gamepad
#while 1:
#    events = get_gamepad()
#    for event in events:
#        print(event.ev_type, event.code, event.state)

class Dashboard(QWidget):

    angleChanged = pyqtSignal(float)

    def __init__(self, parent = None):
        super().__init__()

        QWidget.__init__(self, parent)
        
        self._angle = 34.0
        self._margins = 300
        self._pointText = {0: "N", 45: "NO", 90: "O", 135: "ZO", 180: "Z",
                           225: "ZW", 270: "W", 315: "NW"}
        self.initUI()
   
        
    def initUI(self):
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.setToolTip('Dit is een algemene <b>QWidget</b> widget')
        
        btn = QPushButton('Button', self)
        btn.setToolTip('Dit is een <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 100)       

        qbtn = QPushButton('Quit', self)
        qbtn.setToolTip('Klik op mij, dan stop ik er mee.')
        qbtn.clicked.connect(QApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.center()

        self.setWindowTitle('Robot dashboard')
        self.setWindowIcon(QIcon('/home/richard/py/logoUwVervoerder.png')) 
       
        self.showMaximized()

      
        
    def center(self):
        
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


    def closeEvent(self, event):
        
        reply = QMessageBox.question(self, 'Message',
            "Wil je echt stoppen?", QMessageBox.Yes | 
            QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()   


    
    def paintEvent(self, event):
    
        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing)
        
        painter.fillRect(event.rect(), self.palette().brush(QPalette.Window))
        self.drawMarkings(painter)
        self.drawNeedle(painter)
        
        painter.end()
    
    def drawMarkings(self, painter):
    
        painter.save()
        painter.translate(self.width()/2, self.height()/2)
        scale = min((self.width() - self._margins)/120.0,
                    (self.height() - self._margins)/120.0)
        painter.scale(scale, scale)
        
        font = QFont(self.font())
        font.setPixelSize(10)
        metrics = QFontMetricsF(font)
        
        painter.setFont(font)
        painter.setPen(self.palette().color(QPalette.Shadow))
        
        i = 0
        while i < 360:
        
            if i % 45 == 0:
                painter.drawLine(0, -40, 0, -50)
                painter.drawText(-metrics.width(self._pointText[i])/2.0, -52,
                                 self._pointText[i])
            else:
                painter.drawLine(0, -45, 0, -50)
            
            painter.rotate(15)
            i += 15
        
        painter.restore()
    
    def drawNeedle(self, painter):
    
        painter.save()
        painter.translate(self.width()/2, self.height()/2)
        painter.rotate(self._angle)
        scale = min((self.width() - self._margins)/120.0,
                    (self.height() - self._margins)/120.0)
        painter.scale(scale, scale)
        
        painter.setPen(QPen(Qt.NoPen))
        painter.setBrush(self.palette().brush(QPalette.Shadow))
        
        painter.drawPolygon(
            QPolygon([QPoint(-10, 0), QPoint(0, -45), QPoint(10, 0),
                      QPoint(0, 45), QPoint(-10, 0)])
            )
        
        painter.setBrush(self.palette().brush(QPalette.Highlight))
        
        painter.drawPolygon(
            QPolygon([QPoint(-5, -25), QPoint(0, -45), QPoint(5, -25),
                      QPoint(0, -30), QPoint(-5, -25)])
            )
        
        painter.restore()
    
    def sizeHint(self):
        return QSize(150, 150)
    
    def angle(self):
        return self._angle
    
    @pyqtSlot(float)
    def setAngle(self, angle):
    
        if angle != self._angle:
            self._angle = angle
            self.angleChanged.emit(angle)
            self.update()
    
    angle = pyqtProperty(float, angle, setAngle) 
     

        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Dashboard()
    sys.exit(app.exec_())




