예제 #1
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.trayIconMenu = QtWidgets.QMenu(self)
        self.settingsDialog = None

        self.addTrayAction()
        self.addTrayIcon()

    def addTrayAction(self):
        self.startAction = QtWidgets.QAction("Run",
                                             self,
                                             triggered=self.runKiller)
        self.stopAction = QtWidgets.QAction("Stop",
                                            self,
                                            triggered=self.stopKiller)
        self.settingAction = QtWidgets.QAction(
            "Settings", self, triggered=self.showSettingsDialog)
        self.quitAction = QtWidgets.QAction(
            "Quit", self, triggered=QtWidgets.QApplication.instance().quit)

    def refreshTrayMenu(self):
        self.trayIconMenu.clear()

        if common.isRunning():
            self.trayIconMenu.addAction(self.stopAction)
        else:
            self.trayIconMenu.addAction(self.startAction)
        self.trayIconMenu.addAction(self.settingAction)
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(self.quitAction)

    def addTrayIcon(self):
        self.trayIcon = QtWidgets.QSystemTrayIcon(self)
        self.trayIcon.setContextMenu(self.trayIconMenu)
        self.trayIcon.setIcon(common.getIcon())
        self.trayIcon.show()

    def runKiller(self):
        common.run()
        self.refreshTrayMenu()

    def stopKiller(self):
        common.stop()
        self.refreshTrayMenu()

    def showSettingsDialog(self):
        if self.settingsDialog:
            return

        self.settingsDialog = SettingsDialog()
        self.settingsDialog.finished.connect(self.onSettingsDialogFinished)
        self.settingsDialog.show()

    def onSettingsDialogFinished(self, result):
        self.settingsDialog = None

    def onRunningStateChanged(self):
        self.refreshTrayMenu()
예제 #2
0
 def show_settings(self):
     settingsDialog = SettingsDialog(self.settings_dict, self)
     settingsDialog.settings_accepted.connect(self.updateSettings)
     settingsDialog.show()
예제 #3
0
 def showOptions(self):
     s = SettingsDialog(self)
     s.show()
예제 #4
0
class MainWindow(QMainWindow, Ui_Main):
    def __init__(self):
        QMainWindow.__init__(self)
        Ui_Main.__init__(self)
        self.setupUi(self)
        self.get_saved_ingredients()
        self.update_drink_list()
        self.serial = QtSerialPort.QSerialPort('/dev/ttyACM0',
                                               readyRead=self.receive)
        self.serial.open(QtCore.QIODevice.OpenModeFlag.ReadWrite)
        if not self.serial.isOpen():
            print("Initializing without Serial.")
        self.loadingDialog = LoadingDialog(self)
        self.passwordDialog = PasswordDialog(self)
        self.settingsDialog = SettingsDialog(self)
        self.init_animations()
        self.setWindowTitle("Choisissez une boisson!")
        self.settings.clicked.connect(self.open_password)

    def receive(self):
        while self.serial.canReadLine():
            text = self.serial.readLine().data().decode('ascii').strip('\r\n')
            if text == "Gobelet OK":
                pump = self.get_pump()
                # self.gif_gobelet.stop()
                self.gif_conveyor.start()
                self.loadingDialog.step.setText(
                    f"Moving carpet to position {pump}")
                self.serial.write(f"C{pump};".encode())
            elif text == "Carpet OK":
                pump = self.get_pump()
                self.gif_conveyor.stop()
                self.gif_glass.start()
                self.loadingDialog.step.setText(f"Pumping at position {pump}")
                self.serial.write(
                    f"P{pump}-{list(self.ing_dict.values())[0]};".encode())
                self.ing_dict.pop(list(self.ing_dict.keys())[0])
            elif text == "Pump OK":
                self.gif_glass.stop()
                self.gif_conveyor.start()
                if len(self.ing_dict) != 0:
                    pump = self.get_pump()
                    self.loadingDialog.step.setText(
                        f"Moving carpet to position {pump}")
                    self.serial.write(f"C{pump};".encode())
                else:
                    self.loadingDialog.step.setText("Moving carpet to the end")
                    self.serial.write("End;".encode())
            elif text == "End OK":
                self.gif_conveyor.stop()
                self.loadingDialog.finishedDialog.setModal(True)
                self.loadingDialog.finishedDialog.show()

    def get_pump(self):
        key = list(self.ing_dict.keys())[0]
        if key == self.settingsDialog.name1.text():
            pump = 1
        elif key == self.settingsDialog.name2.text():
            pump = 2
        elif key == self.settingsDialog.name3.text():
            pump = 3
        elif key == self.settingsDialog.name4.text():
            pump = 4
        elif key == self.settingsDialog.name5.text():
            pump = 5
        elif key == self.settingsDialog.name6.text():
            pump = 6
        return pump

    def update_drink_list(self):
        self.scrollContents = QtWidgets.QWidget()
        self.verticalLayout = QtWidgets.QVBoxLayout(self.scrollContents)
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setSpacing(20)
        self.create_cocktails()
        for i, cocktail in enumerate(self.current_cocktails):
            button = CustomButton(self, cocktail)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                               QtWidgets.QSizePolicy.Fixed)
            button.setSizePolicy(sizePolicy)
            button.setMinimumSize(QtCore.QSize(300, 200))
            self.gridLayout.addWidget(button, i // 3, i % 3)
        self.verticalLayout.addLayout(self.gridLayout)
        self.scrollArea.setWidget(self.scrollContents)

    def create_cocktails(self):
        self.current_cocktails = []
        for name, cocktail_info in cocktails.items():
            n = 0
            for ingredient in cocktail_info[0].keys():
                if ingredient in self.current_ingredients:
                    n += 1
            if n == len(cocktail_info[0]):
                self.current_cocktails.append(name)

    def get_saved_ingredients(self):
        try:
            with open('save.json', 'r') as file:
                self.current_ingredients = json.load(file)
        except FileNotFoundError:
            self.current_ingredients = ['', '', '', '', '', '']

    def set_saved_ingredients(self):
        self.current_ingredients = [
            self.settingsDialog.name1.text(),
            self.settingsDialog.name2.text(),
            self.settingsDialog.name3.text(),
            self.settingsDialog.name4.text(),
            self.settingsDialog.name5.text(),
            self.settingsDialog.name6.text()
        ]
        with open('save.json', 'w') as file:
            json.dump(self.current_ingredients, file)

    def open_password(self):
        self.passwordDialog.setModal(True)
        self.passwordDialog.show()

    def open_settings(self):
        self.settingsDialog.setModal(True)
        self.settingsDialog.show()

    def create_ing_dict(self, text):
        """Creates the dictionary of ingredients needed for the needed cocktail."""
        self.ing_dict = {}
        for key, value in cocktails.items():
            if key == text:
                self.ing_dict = copy.copy(value[0])
                break

    def init_animations(self):
        self.gif_conveyor = QtGui.QMovie(":/Logo/conveyor.gif")
        self.gif_conveyor.setScaledSize(QSize(512, 100))
        self.loadingDialog.conveyor.setMovie(self.gif_conveyor)
        self.gif_conveyor.start()
        self.gif_conveyor.stop()
        self.gif_glass = QtGui.QMovie(":/Logo/glass.gif")
        self.gif_glass.setScaledSize(QSize(100, 125))
        self.loadingDialog.glass.setMovie(self.gif_glass)
        self.gif_glass.start()
        self.gif_glass.stop()
예제 #5
0
 def openSettings(self):
     settings_dialog = SettingsDialog(self)
     settings_dialog.show()