class BuzzerDemo(QtGui.QDialog):
    demo_finished_signal = QtCore.pyqtSignal()
    def __init__(self, robot_id):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.robot_id = robot_id
        self.ui.lineEdit_serialId.setText(robot_id)

        # Connect signals
        self.ui.pushButton_run.clicked.connect(self.run)
        self.ui.pushButton_close.clicked.connect(self.done)
        self.ui.lineEdit_serialId.textChanged.connect(self.update_code_box)
        self.ui.spinBox_frequency.valueChanged.connect(self.update_code_box)
        self.demo_finished_signal.connect(self.run_finished)

        self.rgb = QtGui.QColor(255, 0, 255)
        self.update_code_box()
        
    def run(self):
        # Run button clicked
        # Disable Run and Close buttons
        self.ui.pushButton_run.setEnabled(False)
        self.ui.pushButton_close.setEnabled(False)
        util.run_string_async(self.ui.textEdit.toPlainText().encode(), self.run_finished_cb)

    def run_finished_cb(self):
        self.demo_finished_signal.emit()
        
    def run_finished(self):
        # Re-enable buttons
        self.ui.pushButton_run.setEnabled(True)
        self.ui.pushButton_close.setEnabled(True)

    def update_code_box(self, *args, **kwargs):
        mapping = {'SERIAL_ID': self.ui.lineEdit_serialId.text(),
                   'frequency':self.ui.spinBox_frequency.value(),
                   }
        code = util.translate_file('buzzer_demo.template.py', mapping)
        self.ui.textEdit.setText(code)
    def __init__(self, robot_id):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.robot_id = robot_id
        self.ui.lineEdit_serialId.setText(robot_id)

        # Connect signals
        self.ui.pushButton_run.clicked.connect(self.run)
        self.ui.pushButton_close.clicked.connect(self.done)
        self.ui.lineEdit_serialId.textChanged.connect(self.update_code_box)
        self.ui.spinBox_frequency.valueChanged.connect(self.update_code_box)
        self.demo_finished_signal.connect(self.run_finished)

        self.rgb = QtGui.QColor(255, 0, 255)
        self.update_code_box()