Esempio n. 1
0
class Ui_MainWindow(object):
    def setupLog(self):
        self.log = LogWriter()
        self.log.resetLog()


    #sets up basic ui with buttons: manual, graphs, settings and info
    def setupUi(self, mainWindow):

        stylesheetFile = "Stylesheet.css"       #styling
        fh = open(stylesheetFile)
        qstr = str(fh.read())

        self.MainWindow = mainWindow            #assign mainwindow
        self.MainWindow.setStyleSheet(qstr)

        self.MainWindow.setObjectName("MainWindow")
        self.MainWindow.resize(1000, 650)

        #setup basic variables
        self.devices = []
        self.currentDevice = None
        self.setupLog()
        self.mainQueue = Queue()
        self.lang = Language(0)


        #fill mainwindow
        self.centralwidget = QtWidgets.QWidget(self.MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 90, 650))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("buttonBar")

        spacerItem = QtWidgets.QSpacerItem(20, 50, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem)

        self.addADevice = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.addADevice.setObjectName("addADevice")
        self.addADevice.setFixedSize(90, 90)
        self.verticalLayout.addWidget(self.addADevice)

        self.Manual = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Manual.setObjectName("Manual")
        self.Manual.setFixedSize(90, 90)
        self.verticalLayout.addWidget(self.Manual)

        self.Graphs = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Graphs.setObjectName("Graphs")
        self.Graphs.setFixedSize(90, 90)
        self.verticalLayout.addWidget(self.Graphs)

        self.Settings = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Settings.setObjectName("Settings")
        self.Settings.setFixedSize(90, 90)
        self.verticalLayout.addWidget(self.Settings)

        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem1)

        self.Info = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.Info.setObjectName("Info")
        self.Info.setFixedSize(90, 90)
        self.verticalLayout.addWidget(self.Info)

        spacerItem2 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem2)

        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(90, 0, 910, 50))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")

        self.Logo = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.Logo.setEnabled(True)

        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.Logo.sizePolicy().hasHeightForWidth())

        self.Logo.setSizePolicy(sizePolicy)
        self.Logo.setMinimumSize(QtCore.QSize(0, 0))
        self.Logo.setMaximumSize(QtCore.QSize(250, 50))

        font = QtGui.QFont()
        font.setFamily("Calibri")
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.Logo.setFont(font)
        self.Logo.setAutoFillBackground(True)
        self.Logo.setFrameShape(QtWidgets.QFrame.Box)
        self.Logo.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Logo.setObjectName("Logo")
        pic = QPixmap('rsz_1aerosdev')
        self.Logo.setPixmap(pic)
        self.horizontalLayout_2.addWidget(self.Logo)

        spacerItem3 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem3)

        self.fSkyTemp = QtWidgets.QFrame(self.horizontalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.fSkyTemp.sizePolicy().hasHeightForWidth())
        self.fSkyTemp.setSizePolicy(sizePolicy)
        self.fSkyTemp.setMinimumSize(QtCore.QSize(180, 100))
        self.fSkyTemp.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.fSkyTemp.setFrameShadow(QtWidgets.QFrame.Raised)
        self.fSkyTemp.setObjectName("fSkyTemp")

        self.Sky = QtWidgets.QLabel(self.fSkyTemp)
        self.Sky.setGeometry(QtCore.QRect(10, 20, 75, 13))
        self.Sky.setObjectName("Sky")

        self.TempUp = QtWidgets.QLabel(self.fSkyTemp)
        self.TempUp.setGeometry(QtCore.QRect(100, 20, 75, 13))

        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.TempUp.sizePolicy().hasHeightForWidth())

        self.TempUp.setSizePolicy(sizePolicy)
        self.TempUp.setMinimumSize(QtCore.QSize(60, 0))
        self.TempUp.setObjectName("TempUp")

        self.horizontalLayout_2.addWidget(self.fSkyTemp)

        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem4)

        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(90, 50, 910, 600))
        # self.stackedWidget.setMinimumSize(QtCore.QSize(600, 600)) #400, 400
        # self.stackedWidget.move(100,100)
        # self.stackedWidget.setStyleSheet("background-color: black")

        # sets up maingrid and adds it to stacked widget
        self.page0 = QtWidgets.QWidget(self.MainWindow)
        self.mainGrid = MainGrid(self.page0, self.devices)
        self.stackedWidget.addWidget(self.mainGrid.page0)

        #sets up pages
        self.setupSettingsWindow()
        self.setupEnterDevice()
        self.setupGraphsWindow()
        self.setupManual()

        #sets starting page
        self.stackedWidget.setCurrentIndex(0)

        #binds functions to mainwindow buttons
        self.addADevice.clicked.connect(lambda: self.setIndex(2))
        self.Manual.clicked.connect(lambda: self.setIndex(4))
        self.Graphs.clicked.connect(lambda: self.setIndex(3))
        self.Settings.clicked.connect(lambda: self.setIndex(1))
        self.Info.clicked.connect(self.showInfo)
        QtCore.QMetaObject.connectSlotsByName(self.MainWindow)

        self.MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(0)

    def setIndex(self, index):
        try:
            self.stackedWidget.setCurrentIndex(index)

            # update devices
            # empty devicesBox
            self.devicesBox.clear()
            self.devicesBoxGraphs.clear()
            self.devicesBoxManual.clear()

            # fill devicesBox
            for device in self.devices:
                self.devicesBox.addItem(device.name)
                self.devicesBoxGraphs.addItem(device.name)
                self.devicesBoxManual.addItem(device.name)

            #assign function to startRoll button if a device exist
            if len(self.devices) > 0:
                self.startRoll.setDisabled(False)
                if self.currentDevice.status == 1:
                    self.startRoll.clicked.connect(lambda: self.rollOut)
                    self.startRoll.setText(self.lang.but_StartRollOut)
                elif self.currentDevice.status == 0:
                    self.startRoll.clicked.connect(lambda: self.rollUp)
                    self.startRoll.setText(self.lang.but_startRollUp)
        except Exception as e:
            print(e)

    #set the selected sensortype
    def setSensorType(self, type):
        self.sensorType = type

    #change the minimum value of the current device
    def changeMinVal(self, minVal):
        try:
            if self.checkStringForNumber(minVal):
                self.currentDevice.minVal = int(minVal)
                self.log.writeInLog("i", "Minimum value from " + self.currentDevice.name + " changed to " + minVal)
            else:
                if minVal == "aeros development":
                    self.showPopup("e", self.lang.pop_TitleEasterEgg, self.lang.pop_TextEasterEgg)
                    self.log.writeInLog("i", "EASTER EGG FOUND!!!")
                self.showPopup("e", self.lang.pop_TitleNotValidNumber, self.lang.pop_TextNotValidNumber)
        except:
            self.showPopup("e", self.lang.pop_TitleDevNotAttached, self.lang.pop_TextDevNotAttached)


    def checkStringForNumber(self, string):
        numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
        chrs = list(string)
        if len([chr for chr in chrs if chr not in numbers]) > 0: return False
        return True

    # sets up settingswidget that shows the settings
    def setupSettingsWindow(self):
        try:
            self.page1 = QtWidgets.QWidget()
            self.settingsWindowWidget = QtWidgets.QWidget(self.page1)
            self.settingsWindowWidget.setMinimumSize(QtCore.QSize(400, 160))
            self.settingsWindowWidget.setMaximumSize(QtCore.QSize(400, 160))

            layout = QtWidgets.QFormLayout(self.settingsWindowWidget)
            # self.minLight = QtWidgets.QLineEdit(self.settingsWindowWidget)
            # self.minTemp = QtWidgets.QLineEdit(self.settingsWindowWidget)
            self.minVal = QtWidgets.QLineEdit(self.settingsWindowWidget)
            self.minVal.setText("0")

            self.chgMinVal = QtWidgets.QPushButton(self.settingsWindowWidget)
            self.chgMinVal.setText(self.lang.but_ChgMinVal)
            self.chgMinVal.clicked.connect(lambda: self.changeMinVal(self.minVal.text()))

            self.goBack = QtWidgets.QPushButton(self.settingsWindowWidget)
            self.goBack.setText(self.lang.but_Ok)
            self.goBack.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0))

            self.devicesBox = QtWidgets.QComboBox(self.settingsWindowWidget)
            for device in self.devices:
                self.devicesBox.addItem(device.name)
            self.devicesBox.activated[str].connect(self.setCurrentDevice)

            self.languageBox = QtWidgets.QComboBox(self.settingsWindowWidget)
            self.languageBox.addItem("English")
            self.languageBox.addItem("Nederlands")
                #could add more languages
            self.languageBox.activated[str].connect(self.changeLanguage)

            layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.minVal)
            # layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.minTemp)
            layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.chgMinVal)
            # layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.chgMinTemp)
            layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.goBack)
            layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.devicesBox)
            layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.languageBox)

            # self.stackedWidget.insertWidget(1,self.page_1)
            self.stackedWidget.addWidget(self.page1)
            self.log.writeInLog("i", "Page 1: settings window created")
        except Exception as e:
            print(e)
            self.log.writeInLog("w", "Could not create page 1: settings window")

    #change the language,
    def changeLanguage(self, lang):
        if lang == "English":
            self.retranslateUi(0)
        elif lang == "Nederlands":
            self.retranslateUi(1)

    #setup page3 containing the graph
    def setupGraphsWindow(self):
        try:
            self.page3 = QtWidgets.QWidget()
            self.graphWidget = QtWidgets.QWidget(self.page3)
            self.graphWidget.setGeometry(QtCore.QRect(50, 50, 400, 500))
            self.graphWidget.setMinimumSize(QtCore.QSize(600, 600))
            self.canvas = PlotCanvas(self.graphWidget)

            self.goBack2 = QtWidgets.QPushButton(self.graphWidget)
            self.goBack2.setText(self.lang.but_Ok)
            self.goBack2.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(0))
            self.goBack2.move(450, 400)

            self.update = QtWidgets.QPushButton(self.graphWidget)
            self.update.setText(self.lang.but_Update)
            self.update.clicked.connect(self.fillGraph)
            self.update.move(450, 375)

            self.devicesBoxGraphs = QtWidgets.QComboBox(self.graphWidget)
            for device in self.devices:
                self.devicesBoxGraphs.addItem(device.name)
            self.devicesBoxGraphs.move(450, 0)
            self.devicesBoxGraphs.activated[str].connect(self.setCurrentDevice)

            self.stackedWidget.addWidget(self.page3)
            self.log.writeInLog("i", "Page 3: graphs window created")
        except:
            self.log.writeInLog("w", "Could not create page 3: graphs window")
    #fill graph
    def fillGraph(self):
        dataList = []
        try:
            q = self.currentDevice.getQueue()
        except:# Exception as e:
            #print(e)
            self.showPopup("e", self.lang.pop_TitleDevNotAttached, self.lang.pop_TextDevNotAttached)
            return
        # fill graph
        #print("test1")
        #print("test2")
        #print(self.currentDevice.queue.get())
        transmis = None
        try:
            for i in range(10):
               #transmis = q.get(True, 2)
                if transmis == None:
                    if self.currentDevice.sensorType == "Light":
                        dataList.append(random.uniform(50,100))
                    elif self.currentDevice.sensorType == "Temperature":
                        dataList.append(random.uniform(20,25))
                else:
                    self.log.writeInLog("i", "Data from " + self.currentDevice.name + " received: " + str(transmis))
                    dataList.append(transmis)
                #time.sleep(1)
        except:
            pass
        try:
            #print("test6")
            self.canvas.plot(dataList, self.currentDevice.sensorType)
            #time.sleep(1)
        except Exception as e:
            print(e)

    #setup page2 containing the settingswindow
    def setupEnterDevice(self):
        try:
            self.page2 = QtWidgets.QWidget()
            self.sensorType = ""

            self.enterDeviceWidget = QtWidgets.QWidget(self.page2)
            self.enterDeviceWidget.setMinimumSize(QtCore.QSize(400, 300))
            self.enterDeviceWidget.setMaximumSize(QtCore.QSize(400, 300))

            layout = QtWidgets.QFormLayout(self.enterDeviceWidget)
            namelabel = QLabel(self.lang.lab_Name)
            # lightlabel = QLabel("Min light")
            # templabel = QLabel("Min temp")
            valuelabel = QLabel(self.lang.lab_MinVal)
            maxRollLengthLabel = QLabel(self.lang.lab_MaxRollLength)
            portlabel = QLabel(self.lang.lab_PortNum)
            sensorlabel = QLabel(self.lang.lab_SensorType)

            self.name = QtWidgets.QLineEdit(self.enterDeviceWidget)  # .setText("")
            # self.light = QtWidgets.QLineEdit(self.enterDeviceWidget)#.setText("0")
            # self.temp = QtWidgets.QLineEdit(self.enterDeviceWidget)#.setText("0")
            self.port = QtWidgets.QLineEdit(self.enterDeviceWidget)  # .setText("COM0")
            self.value = QtWidgets.QLineEdit(self.enterDeviceWidget)
            self.maxRollLength = QtWidgets.QLineEdit(self.enterDeviceWidget)

            self.name.setText("")
            # self.light.setText("0")
            # self.temp.setText("0")
            self.maxRollLength.setText("0")
            self.value.setText("0")
            self.port.setText("COM0")

            self.name.setMaximumSize(QtCore.QSize(100, 200))
            # self.light.setMaximumSize(QtCore.QSize(100,200))
            # self.temp.setMaximumSize(QtCore.QSize(100,200))
            self.value.setMaximumSize(QtCore.QSize(100, 200))
            self.maxRollLength.setMaximumSize(QtCore.QSize(100, 200))
            self.port.setMaximumSize(QtCore.QSize(100, 200))

            self.sensor = QtWidgets.QComboBox(self.enterDeviceWidget)
            self.sensor.addItem(self.lang.selBox_light)
            self.sensor.addItem(self.lang.selBox_temp)
            self.sensor.setMaximumSize(QtCore.QSize(100, 200))
            self.sensor.activated[str].connect(self.setSensorType)

            self.addDevice = QtWidgets.QPushButton(self.enterDeviceWidget)
            self.addDevice.setText(self.lang.but_AddDevice)
            self.addDevice.setMaximumSize(QtCore.QSize(120, 300))
            self.addDevice.clicked.connect(self.addDeviceNoPar)

            self.goBack3 = QtWidgets.QPushButton(self.enterDeviceWidget)
            self.goBack3.setText(self.lang.but_Ok)
            self.goBack3.setMaximumSize(QtCore.QSize(100, 200))
            self.goBack3.clicked.connect(lambda: self.setIndex(0))

            layout.addRow(namelabel, self.name)
            # layout.addRow(lightlabel, self.light)
            # layout.addRow(templabel, self.temp)
            layout.addRow(valuelabel, self.value)
            layout.addRow(maxRollLengthLabel, self.maxRollLength)
            layout.addRow(portlabel, self.port)
            layout.addRow(sensorlabel, self.sensor)
            layout.addRow(self.addDevice, self.goBack3)
            # self.stackedWidget.insertWidget(2,self.page_2)

            self.setSensorType("Light")
            self.stackedWidget.addWidget(self.page2)
            self.log.writeInLog("i", "Page 2: enter device window created")
        except:
            self.log.writeInLog("w", "Could not create Page 2: enter device window")

            # makes inputdialog in which you can enter a percentage
    #setup page4 containing the manual mode window
    def setupManual(self):
        try:
            self.page4 = QtWidgets.QWidget()
            self.manualWidget = QtWidgets.QWidget(self.page4)
            layout = QtWidgets.QFormLayout(self.manualWidget)

            self.startRoll = QtWidgets.QPushButton(self.manualWidget)
            self.startRoll.setText(self.lang.but_StartRoll)
            self.startRoll.setDisabled(True)


            self.devicesBoxManual = QtWidgets.QComboBox(self.manualWidget)
            for device in self.devices:
                self.devicesBoxManual.addItem(device.name)
            self.devicesBoxManual.activated[str].connect(self.setCurrentDevice)

            self.ok = QtWidgets.QPushButton(self.manualWidget)
            self.ok.setText(self.lang.but_Ok)
            self.ok.setMaximumSize(QtCore.QSize(100, 200))
            self.ok.clicked.connect(lambda: self.setIndex(0))

            layout.addRow(self.devicesBoxManual, self.startRoll)
            layout.addRow(self.ok, self.ok)

            self.manualWidget.setLayout(layout)
            self.stackedWidget.addWidget(self.page4)
            self.log.writeInLog("i", "Page 4: manual window created")
        except Exception as e:
            print(e)
            self.log.writeInLog("w", "Could not create Page 4: manual window")

    #roll out the selected device
    def rollOut(self):
        self.showPopup("i", self.lang.pop_TitleRollOut, self.currentDevice.name + self.lang.pop_TextRollOut)
        self.log.writeInLog("i", self.currentDevice.name + " rolled out")
        self.currentDevice.rollDown()
        self.currentDevice.status = 0
        self.updateMaingrid(self.MainWindow)

    #roll up the selected device
    def rollUp(self):
        self.showPopup("i", self.lang.pop_TitleRollUp, self.currentDevice.name + self.lang.pop_TextRollUp)
        self.log.writeInLog("i", self.currentDevice.name + " rolled up")
        self.currentDevice.rollUp()
        self.currentDevice.status = 1
        self.updateMaingrid(self.MainWindow)

    #connect to the device and add it to the dashboard
    def addDeviceNoPar(self):
        if not self.checkStringForNumber(self.name.text()):
            nameRes = self.name.text()
        else:
            self.showPopup("e", self.lang.pop_TitleNotValidName, self.lang.pop_TextNotValidName)
            self.name.setText("")
            return

        if "COM" in self.port.text():
            portRes = self.port.text()
        else:
            self.showPopup("e", self.lang.pop_TitleNotValidPort, self.lang.pop_TextNotValidPort)
            self.port.setText("COM0")
            return

        if self.checkStringForNumber(self.value.text()):
            valRes = int(self.value.text())
        else:
            self.showPopup("e", self.lang.pop_TitleNotValidNumber, self.lang.pop_TextNotValidNumber)
            self.value.setText("0")
            return

        try:
            maxRollRes = float(self.maxRollLength.text())
        except:
            self.showPopup("e", self.lang.pop_TitleNotValidNumber, self.lang.pop_TextNotValidNumber)
            self.maxRollLength.setText("0")
            return

        self.name.setText("")
        self.port.setText("COM0")
        self.value.setText("0")
        self.maxRollLength.setText("0")

        if nameRes == "":
            self.showPopup("e", self.lang.pop_TitleNoName, self.lang.pop_TextNoName)
            return

        for device in self.devices:
            if device.name == nameRes:
                self.showPopup("e", self.lang.pop_TitleDupNames, self.lang.pop_TextDupNames)
                self.name.setText("")
                return
        try:
            newDevice = Device(nameRes, portRes, self.sensorType, valRes, maxRollRes, self.mainQueue)  # lightRes, tempRes)
            self.devices.append(newDevice)
            self.setCurrentDevice(self.devices[0].name)
            try:
                receiving = Thread(target=self.currentDevice.receive)
                receiving.daemon = True
                receiving.start()
            except Exception as e:
                print(e)
            self.log.writeInLog("i",
                                "New device added: name: " + nameRes + " | Port: " + portRes + " | Sensor type: " + self.sensorType + " | Minimum value: " + str(
                                    valRes) + " | Max roll length: " + str(maxRollRes))
            self.showPopup("i", self.lang.pop_TitleNewDevice, self.lang.pop_TextNewDevice_1  + nameRes + self.lang.pop_TextNewDevice_2)
            try:
                self.updateMaingrid(self.MainWindow)
            except Exception as e:
                print(e)
        except Exception as e:
            print(e)
            self.log.writeInLog("w", "Could not add device: " + nameRes)
            self.showPopup("e", self.lang.pop_TitleNoNewDevice, self.lang.pop_TextNoNewDevice)
            newDevice = None

    #show a popup, can be error or info
    def showPopup(self, type, popupText, popupIText):
        popup = QMessageBox()
        if type == "e":
            popup.setIcon(QMessageBox.Critical)
            popup.setWindowTitle("Error")
            self.log.writeInLog("w", "Error popup shown: " + popupText + " | " + popupIText)
        elif type == "i":
            popup.setIcon(QMessageBox.Information)
            popup.setWindowTitle("Info")
            self.log.writeInLog("i", "Information popup shown: " + popupText + " | " + popupIText)

        popup.setText(popupText)
        popup.setInformativeText(popupIText)

        popup.exec()

    #set the current selected device
    def setCurrentDevice(self, name):
        for device in self.devices:
            if device.name == name:
                self.currentDevice = device

    # sets te text in the given language
    def retranslateUi(self, type):
        # choose language
        self.lang.setLang(type)
        _translate = QtCore.QCoreApplication.translate
        self.MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.addADevice.setText(_translate("MainWindow", self.lang.but_AddADevice))
        self.Manual.setText(_translate("MainWindow", self.lang.but_Manual))
        self.Graphs.setText(_translate("MainWindow", self.lang.but_Graphs))
        self.Settings.setText(_translate("MainWindow", self.lang.but_Settings))
        self.Info.setText(_translate("MainWindow", self.lang.but_Info))
        self.Sky.setText(_translate("MainWindow", self.lang.lab_Sky))
        self.TempUp.setText(_translate("MainWindow", self.lang.lab_Temp))
        self.startRoll.setText("Roll out")
        self.startRoll.setText("Roll up")
        self.goBack.setText(self.lang.but_Ok)
        self.chgMinVal.setText(self.lang.but_ChgMinVal)
        self.goBack2.setText(self.lang.but_Ok)
        self.update.setText(self.lang.but_Update)
        self.addDevice.setText(self.lang.but_AddDevice)
        self.sensor.clear()
        self.sensor.addItem(self.lang.selBox_light)
        self.sensor.addItem(self.lang.selBox_temp)
        self.goBack3.setText(self.lang.but_Ok)
        self.startRoll.setText(self.lang.but_StartRoll)
        self.ok.setText(self.lang.but_Ok)

    # Makes popup with info
    def showInfo(self):
        self.showPopup("i", self.lang.pop_TitleInfo, self.lang.pop_TextInfo)

    #update the maingrid
    def updateMaingrid(self, MainWindow):
        self.page0.setParent(None)
        self.page0 = QtWidgets.QWidget(MainWindow)
        self.mainGrid = MainGrid(self.page0, self.devices)
        self.stackedWidget.insertWidget(0, self.mainGrid.page0)  # this changed right