# -*- coding: utf-8 -*-
"""
Simple example of loading UI template created with Qt Designer.

This example uses uic.loadUiType to parse and load the ui at runtime. It is also
possible to pre-compile the .ui file using pyuic (see VideoSpeedTest and 
ScatterPlotSpeedTest examples; these .ui files have been compiled with the
tools/rebuildUi.py script).

Heavily modified to support EyeRIS camera UI

"""
#import initExample ## Add path to library (just for examples; you do not need this)

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import os

pg.mkQApp()

## Define main window class from template
path = os.path.dirname(os.path.abspath(__file__))
uiFile = os.path.join(path, 'EyeRISCameraUI.ui')
WindowTemplate, TemplateBaseClass = pg.Qt.loadUiType(uiFile)

class MainWindow(TemplateBaseClass):  
    def __init__(self):
        TemplateBaseClass.__init__(self)
        self.setWindowTitle('pyqtgraph example: Qt Designer')
        
        self.recording = False
        self.rawImageDisplayScale = 255
        
        self.imgs = []
        
        for i in range(0,10):
            self.imgs.append((40*np.random.random((1024,1024))).astype(np.uint8))
        self.imageIndex = 0
        
        # Create the main window
        self.ui = WindowTemplate()
        self.ui.setupUi(self)
        self.ui.recordButton.clicked.connect(self.record)
        
        self.imgUpdateTimer = QtCore.QTimer()
        self.imgUpdateTimer.timeout.connect(self.update)
        self.imgUpdateTimer.start(13)
        
        self.ui.rawDisplayScale.valueChanged.connect(self.setScale)
    
        
        vb = pg.ViewBox()
        self.ui.graphicsView.setCentralItem(vb)
        vb.setAspectLocked()
        self.rawimg = pg.ImageItem()
        vb.addItem(self.rawimg)
        vb.setRange(QtCore.QRectF(0, 0, 512, 512))
        
        self.show()
        
    def record(self):
        if self.recording:
            print('Stopping recording.')
            self.recording = False
            self.ui.recordButton.setStyleSheet("")
        else:
            print('Starting recording.')
            self.recording = True
            self.ui.recordButton.setStyleSheet("background-color: red")
            
    def setScale(self):
        self.rawImageDisplayScale = self.ui.rawDisplayScale.value()
        # print(self.rawImageDisplayScale)
            
    def update(self):
    
        scale = [0,self.rawImageDisplayScale]
        
        self.rawimg.setImage(self.imgs[self.imageIndex].astype(np.uint8),autoLevels=False, levels=scale, autoDownsample=False)
        self.imageIndex = (self.imageIndex + 1) % 10
        
    
        
        
win = MainWindow()




## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()