Example #1
0
class BinFilePanel(QtGui.QGroupBox):
    def __init__(self,
                 parent,
                 app_status_file,
                 event_handler=DummyEventHandler(),
                 max_width=600):
        super(BinFilePanel, self).__init__(parent)
        frame_grid = QtGui.QGridLayout()
        frame_grid.setSpacing(1)

        self.combo_box = ComboBox(self, tip_msg="???")
        self.combo_box.setFixedWidth(max_width)
        # self.combo_box.size

        self.apply_copot_patch_button = SmallPushButton(
            "COPOT patch", tip_msg=APPLY_COPOT_PATCH_TIP)
        copot_btn_font = self.apply_copot_patch_button.font()
        self.apply_copot_patch_button.setFont(
            QFont(copot_btn_font.defaultFamily(), 5, QFont.Bold))

        self.browse_btn = PushButton("...", tip_msg="browse for file")
        self.browse_btn.setIcon(QtGui.QIcon(BROWSE_ICON))
        self.open_btn = PushButton("open", tip_msg="open file in editor")
        self.app_status_file = app_status_file

        self.last_browse_location = ''

        frame_grid.addWidget(self.combo_box, 0, 0, 1, 6)
        frame_grid.addWidget(self.open_btn, 0, 7, 1, 1)
        frame_grid.addWidget(self.browse_btn, 0, 8, 1, 1)
        frame_grid.addWidget(self.apply_copot_patch_button, 1, 7, 1, 1)
        self.setTitle("BIN FILE")
        self.setLayout(frame_grid)

        self.browse_btn.clicked.connect(self.browse_for_file)
        self.apply_copot_patch_button.clicked.connect(
            event_handler.apply_copot_fix_patch)
        self.open_btn.clicked.connect(event_handler.open_bin_file)
        self.combo_box.setDuplicatesEnabled(False)
        self.combo_box.setMaxCount(30)
        self.combo_box.setEditable(True)

        self.event_handler = event_handler
        self.setAcceptDrops(True)
        self.combo_box.dragEnterEvent = self.dragEnterEvent
        self.combo_box.dropEvent = self.dropEvent

    def dragEnterEvent(self, event):
        file_path = event.mimeData().urls()[0].path()

        file_path = prepare_file_path_for_platform(file_path)
        if os.path.isfile(file_path):
            event.accept()

    def dropEvent(self, event):
        bin_path = event.mimeData().urls()[0].path()
        bin_path = prepare_file_path_for_platform(bin_path)
        self.insert_new_file(bin_path)

    def get_current_file(self):
        bin_path = str(self.combo_box.currentText())
        if bin_path:
            if os.path.exists(bin_path):
                self.combo_box.moveOnTop(bin_path)
                return bin_path
            else:
                message_box("no such file: {}\n".format(bin_path))
                self.combo_box.setEditText(self.combo_box.itemText(0))
                self.combo_box.removeByStr(bin_path)

    def browse_for_file(self):
        start_dir = self.last_browse_location
        file_path = QtGui.QFileDialog.getOpenFileName(
            self, 'Select bin file', start_dir, "hex files (*.bin *.BIN)")
        if platform != 'Linux':
            file_path = file_path.replace('/', '\\')
        return self.insert_new_file(file_path)

    def insert_new_file(self, file_path):
        if os.path.isfile(
                file_path) and file_path not in self.combo_box.getItems(
                ) and self.check_bin_size(file_path):
            self.combo_box.insertItem(0, file_path)
            self.combo_box.setCurrentIndex(0)
            self.last_browse_location = os.path.dirname(str(file_path))
        elif file_path in self.combo_box.getItems():
            self.combo_box.moveOnTop(file_path)
        elif not os.path.isfile(file_path):
            return False

    def check_bin_size(self, bin_path):
        with open(bin_path, 'rb') as f:
            size = len(f.read())
        if size != 0x8000:
            message_box(
                "This is not valid 27c256 chip image.\nSize not match 0x{:X}!=0x{:X}"
                .format(size, 0x8000))
            return False
        return True
Example #2
0
class BanksPanel(QtGui.QGroupBox):
    def __init__(self, parent, event_handler=DummyEventHandler()):
        super(BanksPanel, self).__init__(parent)
        frame_grid = QtGui.QGridLayout()
        frame_grid.setSpacing(1)

        self.event_handler = event_handler
        self.bank_name_max_len = 25

        self.setTitle("Banks")
        # self.bank1_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP)
        # self.bank2_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP)
        # self.bank3_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP)
        settings_icon = QtGui.QIcon(SETTINGS_ICON)

        self.bank1_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP)
        self.bank1_settings_btn.setIcon(settings_icon)

        self.bank2_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP)
        self.bank2_settings_btn.setIcon(settings_icon)

        self.bank3_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP)
        self.bank3_settings_btn.setIcon(settings_icon)

        self.auto_download_checkbox = CheckBox(
            "auto download", tip_msg=AUTO_DOWNLOAD_CHECKBOX_TIP)

        self.bank1pushButton = PushButton("bank 1", tip_msg=BANK_TIP)
        self.bank2pushButton = PushButton("bank 2", tip_msg=BANK_TIP)
        self.bank3pushButton = PushButton("bank 3", tip_msg=BANK_TIP)

        self.bank_name_line_edit = LineEdit(
            tip_msg="Provide new bank name. ENTER accepts",
            focus_event=event_handler.bank_name_line_edit_event,
            focus_out_event=event_handler.bank_name_line_focus_out_event)

        frame_grid.addWidget(self.bank1pushButton, 0, 0)
        frame_grid.addWidget(self.bank2pushButton, 1, 0)
        frame_grid.addWidget(self.bank3pushButton, 2, 0)
        frame_grid.addWidget(self.bank1_settings_btn, 0, 2)
        frame_grid.addWidget(self.bank2_settings_btn, 1, 2)
        frame_grid.addWidget(self.bank3_settings_btn, 2, 2)
        frame_grid.addWidget(self.bank_name_line_edit, 3, 0, 1, 3)
        frame_grid.addWidget(self.auto_download_checkbox, 4, 0)
        self.setLayout(frame_grid)

        self.bank1pushButton.clicked.connect(event_handler.bank1set_slot)
        self.bank2pushButton.clicked.connect(event_handler.bank2set_slot)
        self.bank3pushButton.clicked.connect(event_handler.bank3set_slot)

        self.bank_name_line_edit.returnPressed.connect(
            self.bank_name_line_edit_slot)

    def update_tip_msg_for_bank(self, bank_button_no, bank_name, msg):
        """
        Update tip message for button {1, 2, 3}
        :param bank_button_no:
        :param msg:
        :return:
        """
        bank_button = [
            self.bank1pushButton, self.bank2pushButton, self.bank3pushButton
        ][bank_button_no]
        bank_button.update_tip_msg(msg, wrap=False)
        if len(bank_name) > 14:
            bank_name = bank_name[0:11] + '...'
        bank_button.setText(bank_name)

    def put_bank_name(self, name):
        self.bank_name_line_edit.setText(name[0:self.bank_name_max_len])

    def get_bank_name_text(self):
        bank_name = str(self.bank_name_line_edit.text())
        return bank_name[0:self.bank_name_max_len]

    def set_default_style_sheet_for_buttons(self):
        self.bank1pushButton.set_default_style_sheet()
        self.bank2pushButton.set_default_style_sheet()
        self.bank3pushButton.set_default_style_sheet()

    def bank_name_line_edit_slot(self):
        bank_name = self.bank_name_line_edit.text()[0:self.bank_name_max_len]
        self.bank_name_line_edit.setText(bank_name)
        self.event_handler.set_bank_name()
        self.bank_name_line_edit.clearFocus()

    def disable_active_button(self):
        to_signal(self.bank1pushButton.set_default_style_sheet)()
        to_signal(self.bank2pushButton.set_default_style_sheet)()
        to_signal(self.bank3pushButton.set_default_style_sheet)()

    def set_active_button(self, bank_no):
        to_signal(self.bank1pushButton.set_default_style_sheet)()
        to_signal(self.bank2pushButton.set_default_style_sheet)()
        to_signal(self.bank3pushButton.set_default_style_sheet)()
        set_green_style = \
            [
                self.bank1pushButton.set_green_style_sheet,
                self.bank2pushButton.set_green_style_sheet,
                self.bank3pushButton.set_green_style_sheet,
            ][bank_no]
        to_signal(set_green_style).emit()