Example #1
0
class DevTool(QtWidgets.QWidget):

    def __init__(self):
        super(DevTool, self).__init__()
        self.ser = SerialInterface()
        self.log = DataLog(LOG_PATH)
        self.initUI()

    def initUI(self):

        self.console_view = ConsoleView()
        self.dv = DisplayView(SCREENSHOT_PATH)
        self.dv.hide()
        self.pv = PacketView(EXPORT_PATH)

        self.checkbox = QtWidgets.QCheckBox('Pause')
        self.checkbox.stateChanged.connect(self.console_view.toogle_pause)

        self.port_select = QtWidgets.QComboBox()

        for port in self.ser.get_ports():
            self.port_select.addItem(port)

        self.connect_button = QtWidgets.QPushButton('Connect')
        self.connect_button.setCheckable(True)
        self.connect_button.clicked[bool].connect(self.connect_clicked)

        self.pixel_label = QtWidgets.QLabel()
        self.pixel_label.setText('X: 0, Y: 0')
        self.pixel_label.hide()

        self.save_display_button = QtWidgets.QPushButton('Save image')
        self.save_display_button.clicked.connect(self.dv.save_view_to_file)
        self.save_display_button.hide()

        self.display_hbox = QtWidgets.QHBoxLayout()
        self.display_hbox.addWidget(self.pixel_label)
        self.display_hbox.addWidget(self.save_display_button)

        display_vbox = QtWidgets.QVBoxLayout()
        display_vbox.addWidget(self.dv)
        display_vbox.addLayout(self.display_hbox)
        display_vbox.addStretch(1)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addLayout(display_vbox)
        hbox.addWidget(self.console_view)

        connect_box = QtWidgets.QHBoxLayout()
        connect_box.addWidget(self.port_select)
        connect_box.addWidget(self.connect_button)
        connect_box.addStretch(1)
        connect_box.addWidget(self.checkbox)

        clear_packets_button = QtWidgets.QPushButton('Clear')
        clear_packets_button.clicked.connect(self.pv.setRowCount)
        export_packets_button = QtWidgets.QPushButton('Export')
        export_packets_button.clicked.connect(
            lambda: self.pv.export_to_csv('packets'))

        packet_btn_box = QtWidgets.QHBoxLayout()
        packet_btn_box.addWidget(clear_packets_button)
        packet_btn_box.addWidget(export_packets_button)
        packet_btn_box.addStretch(1)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(connect_box)

        vbox.addLayout(hbox)

        vbox.addWidget(self.pv)
        vbox.addLayout(packet_btn_box)

        self.setLayout(vbox)

        self.resize(1050, 600)
        self.center()
        self.setWindowTitle('SillyCat Development Tool')
        self.setWindowIcon(QtGui.QIcon(DEV_ICON))
        self.show()

        self.ser.new_vram.connect(self.dv.update_display_view)
        self.ser.new_vram.connect(self.show_display_widgets)
        self.ser.new_pck.connect(self.pv.update_packet_view)
        self.ser.new_stream.connect(self.console_view.update_console_view)
        self.ser.new_stream.connect(self.print_text)
        self.ser.new_stream.connect(self.log.handle_signal)
        self.dv.new_pixel.connect(self.update_pixel_text)

    def connect_clicked(self, pressed):
        if pressed:
            port = str(self.port_select.currentText())

            try:
                if self.ser.open_port(port, BAUDRATE):
                    self.ser.start()
                    self.console_view.appendHtml(
                        '<b>Connected to ' + port + '</b>')
                else:
                    self.connect_button.setChecked(False)
                    self.console_view.appendHtml(
                        '<b>Failed to open interface on ' + port + '</b>')
            except:
                self.connect_button.setChecked(False)
                self.console_view.appendHtml(
                    '<b>Exception when opening interface on ' + port + '</b>')

        else:
            self.ser.stop()
            self.console_view.appendHtml('<b>Disconnected<b>')

    def show_display_widgets(self, image_data):
        if self.save_display_button.isHidden():
            self.save_display_button.show()

        if self.pixel_label.isHidden():
            self.pixel_label.show()

    def update_pixel_text(self, point):

        self.dv.set_pixel(int(point.x()), int(point.y()))

        self.pixel_label.setText(
            'X: ' + str(point.x()) + ',Y: ' + str(point.y()))

    def closeEvent(self, event):
        self.ser.stop()
        event.accept()

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

    def print_text(self, text):
        print(text)