Beispiel #1
0
    def __init__(self, name='LOOKUP_TABLE'):

        QtGui.QWidget.__init__(self)
        x_siz, y_siz = 1000, 600

        self.gridLayout = QtGui.QGridLayout(self)
        self.horizontalLayout = QtGui.QHBoxLayout()

        self.tab_widget = QtGui.QTabWidget(self)

        self.add_table_btn = PushButton('ADD NEW',
                                        tip_msg="Add new lookup table")
        self.add_table_btn.clicked.connect(self.add_new_table)
        self.apply_btn = PushButton('APPLY', tip_msg="dumps table to file")
        self.apply_btn.clicked.connect(self.dump)

        self.name = name
        self.dump_name = self.name + '.lkt'
        self.dump_path = os.path.join(LOOKUP_TABLES_PATH, self.dump_name)
        init_table = self.load_table()
        self.lookup_tables = {name: LookupTableWithGraph(name, init_table)}
        lookup_table = self.lookup_tables.get(self.lookup_tables.keys()[0])

        self.tab_widget.addTab(lookup_table, self.name)
        self.horizontalLayout.addWidget(self.add_table_btn)
        self.horizontalLayout.addWidget(self.apply_btn)
        #self.horizontalLayout.addWidget(self.button2)
        #self.horizontalLayout.addWidget(self.button3)

        self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.tab_widget, 1, 0, 4, 4)

        self.resize(x_siz, y_siz)
        self.show()
Beispiel #2
0
    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
Beispiel #3
0
    def __init__(self, event_handler, app_status_file_path):
        QtGui.QWidget.__init__(self)
        self.buttons_status_tag = "BUTTONS STATUS"
        self.app_status_file_path = app_status_file_path
        self.event_handler = event_handler
        self.setWindowTitle("TEST PANEL")
        self.x_siz, self.y_siz = 600, 400

        self.read_sram_button = PushButton("READ SRAM",
                                           tip_msg=READ_SRAM_BTN_TIP)
        self.read_sram_button.clicked.connect(
            self.event_handler.read_sram_button_slot)

        self.test_sram_button = PushButton("TEST SRAM",
                                           tip_msg=TEST_SRAM_BTN_TIP)
        self.test_sram_button.clicked.connect(
            self.event_handler.test_sram_chip_slot)

        self.test_upload_button = PushButton("TEST UPLOAD",
                                             tip_msg=TEST_UPLOAD_BTN_TIP)
        self.test_upload_button.clicked.connect(
            self.event_handler.test_upload_slot)

        self.text_browser = QTextBrowser()

        self.digidiag_on_checkbox = CheckBox("Show dididiag data panels",
                                             tip_msg="Enable digidiag")
        self.digidiag_on_checkbox.clicked.connect(self.show_digidiag)
        config = configparser.ConfigParser()
        config.read(self.app_status_file_path)
        try:
            if config[self.buttons_status_tag]['digidiag_show'] == 'True':
                self.digidiag_on_checkbox.setChecked(True)
                self.show_digidiag()
        except KeyError:
            pass
        mainGrid = QtGui.QGridLayout()
        mainGrid.setSpacing(10)
        mainGrid.addWidget(self.read_sram_button, 0, 0)
        mainGrid.addWidget(self.test_sram_button, 0, 1)
        mainGrid.addWidget(self.test_upload_button, 0, 2)
        mainGrid.addWidget(self.digidiag_on_checkbox, 1, 0)
        mainGrid.addWidget(self.text_browser, 2, 0, 10, 3)
        self.setLayout(mainGrid)
        self.resize(self.x_siz, self.y_siz)
Beispiel #4
0
class ControlPanel(QtGui.QGroupBox):
    def __init__(self, parent, event_handler=DummyEventHandler()):
        # super(ControlPanel, self).__init__(parent)
        QtGui.QGroupBox.__init__(self, parent)
        self.parent = parent
        self.setTitle("Control")
        control_frame_FrameGrid = QtGui.QGridLayout()
        control_frame_FrameGrid.setSpacing(1)
        self.control_panel_widget = QtGui.QWidget(self)
        self.control_panel_widget.setGeometry(QtCore.QRect(10, 30, 151, 74))
        self.connect_button = PushButton("Connect", tip_msg=CONNECT_BTN_HELP)
        self.reflash_button = PushButton("Reflash", tip_msg=REFLASH_BTN_HELP)
        self.discover_button = PushButton("Discover",
                                          tip_msg=DISCOVER_BTN_HELP)
        self.config_button = PushButton("Config", tip_msg=CONFIG_BTN_HELP)
        self.resp_time_button = PushButton(
            "RespTime", tip_msg=CHECK_RESPONSE_TIME_BTN_HELP)
        self.set_pin_button = PushButton("Set PIN", tip_msg=SET_PIN_BTN_HELP)
        self.setLayout(control_frame_FrameGrid)
        self.autoconnect_checkbox = CheckBox("Autoconnect",
                                             tip_msg=AUTOCONNECT_CHECKBOX_HELP)

        control_frame_FrameGrid.addWidget(self.connect_button, 0, 0)
        control_frame_FrameGrid.addWidget(self.reflash_button, 0, 1)
        control_frame_FrameGrid.addWidget(self.discover_button, 1, 0)
        control_frame_FrameGrid.addWidget(self.config_button, 1, 1)
        control_frame_FrameGrid.addWidget(self.set_pin_button, 2, 0)
        control_frame_FrameGrid.addWidget(self.resp_time_button, 2, 1)
        control_frame_FrameGrid.addWidget(self.autoconnect_checkbox, 3, 0, 1,
                                          2)

        # connect buttons
        self.connect_button.clicked.connect(event_handler.connect_button_slot)
        self.discover_button.clicked.connect(
            event_handler.discover_emu_bt_slot)
        self.reflash_button.clicked.connect(event_handler.reflash_button_slot)
        self.config_button.clicked.connect(event_handler.config_button_slot)
        self.resp_time_button.clicked.connect(
            event_handler.estimate_response_time_slot)
        self.set_pin_button.clicked.connect(event_handler.set_pin_button_slot)
        self.event_handler = event_handler
        self.event_handler.add_event(self.set_connected)
        self.event_handler.add_event(self.set_disconnected)

    def set_connected(self):
        self.connect_button.setText("disconnect")
        self.connect_button.set_green_style_sheet()

    def set_disconnected(self):
        self.connect_button.setText("Connect")
        self.connect_button.set_default_style_sheet()
Beispiel #5
0
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.valuesEditorLayout = QtGui.QGridLayout(self)

        self.table = Table()
        self.add_button = PushButton('ADD NEW', tip_msg="Add new value")
        self.apply_button = PushButton(
            'APPLY', tip_msg="Verifies and saves values table")

        self.add_button.clicked.connect(self.table.add_row)
        self.apply_button.clicked.connect(self.apply_button_slot)

        self.values_translation = dict()

        self.__values_file_path = os.path.join(DIGIDIAG_STATUS_DIR,
                                               VALUES_FILE_NAME)

        self.valuesEditorLayout.addWidget(self.table, 0, 0, 5, 5)
        self.valuesEditorLayout.addWidget(self.apply_button, 6, 3)
        self.valuesEditorLayout.addWidget(self.add_button, 6, 4)

        self.read_status_file()
    def __init__(self):

        QtGui.QWidget.__init__(self)
        x_siz, y_siz = 700, 600

        self.setWindowTitle("DIGIDIAG")
        self.__ord_to_int_vs_size = {
            1: lambda v: struct.unpack('B', v),
            2: lambda v: struct.unpack('>H', v),
            4: lambda v: struct.unpack('>I', v),
        }

        self.frames = dict()
        self.values_extractor = {}

        self.gridLayout = QtGui.QGridLayout(self)
        self.horizontalLayout = QtGui.QHBoxLayout()

        self.add_view_btn = PushButton('ADD VIEW', tip_msg="Add new view")
        self.button2 = QtGui.QPushButton('B2')
        self.button3 = QtGui.QPushButton('B3')

        self.tabWidget = QtGui.QTabWidget(self)
        self.values_editor = ValuesEditor()
        self.values_editor.apply_button_singnal.connect(
            self.define_extraction_rules)

        self.tabWidget.addTab(self.values_editor, 'VALUES')

        self.lookup_table_editor = LookupTableEditor()
        self.tabWidget.addTab(self.lookup_table_editor, 'LOOKUP TABLES')

        self.horizontalLayout.addWidget(self.add_view_btn)
        self.horizontalLayout.addWidget(self.button2)
        self.horizontalLayout.addWidget(self.button3)

        self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1)

        self.resize(x_siz, y_siz)
        #self.show()
        self.define_extraction_rules()
Beispiel #7
0
    def __init__(self, bank_info, general_signal, message_sender, parent=None):
        """

        :param name: bank name
        """
        QtGui.QWidget.__init__(self)
        self.message_sender = message_sender
        self.general_signal = general_signal
        self.bank_info = BankInfo.from_instance(bank_info)
        # self.bank_num = self.bank_info.bank_number
        self.name = self.bank_info.bank_name
        self.setWindowTitle("Customize: {}".format(self.name))
        self.x_siz, self.y_siz = 500, 600
        self.resize(self.x_siz, self.y_siz)

        self.info_label = QLabel(
            "\nCustomize settings for selected bank.\nIt works only for Digifant1 programs"
        )
        self.info_label.setStyleSheet("font: Courier New")

        self.label = QLabel("Bank name:\n{}".format(self.name))
        self.label.setStyleSheet("font: 20pt Courier New; font-weight: bold")

        self.enable_digidiag_check_box = CheckBox(
            "enable digidiag",
            tip_msg="Enable Digifant diagnostic feedback for bank \"{}\"".
            format(self.name))

        self.override_digidiag_frames_check_box = CheckBox(
            "override frames",
            tip_msg="If selected it will override default digidiag frames with\n"
            "values in Custom Digi Frames")

        self.custom_frames_label = QLabel("\nCustom Digi Frames")
        self.custom_frames_label.setStyleSheet(
            "font: 10pt Courier New; font-weight: bold")

        self.custom_frames_table = CustomFramesEditor(
            self.bank_info.frames_vector)

        self.apply_button = PushButton("Apply", tip_msg="Apply changes")
        self.cancel_button = PushButton("Cancel", tip_msg="Discard changes")

        self.info_box = QLabel(" ")

        self.apply_button.clicked.connect(self.apply_button_slot)
        self.cancel_button.clicked.connect(self.cancel_button_slot)

        #GRID
        mainGrid = QtGui.QGridLayout()
        mainGrid.setSpacing(10)
        mainGrid.addWidget(self.info_label, 0, 0, 2, 3)
        mainGrid.addWidget(self.label, 2, 0, 1, 3)
        mainGrid.addWidget(self.enable_digidiag_check_box, 3, 0)
        mainGrid.addWidget(self.override_digidiag_frames_check_box, 3, 1)
        mainGrid.addWidget(self.custom_frames_label, 4, 0, 1, 3)
        mainGrid.addWidget(self.custom_frames_table, 5, 0, 1, 3)
        mainGrid.addWidget(self.cancel_button, 6, 0)
        mainGrid.addWidget(self.apply_button, 6, 1)
        mainGrid.addWidget(self.info_box, 7, 0, 2, 3)
        self.setLayout(mainGrid)
        self.__tmp_resp_msg_thread = None

        #place window next to parent
        if parent:
            x_offset = 0
            y_offset = 100
            current_position_and_size = WindowGeometry(parent)
            x_pos = current_position_and_size.get_position_to_the_right()
            self.setGeometry(x_pos + x_offset,
                             current_position_and_size.pos_y + y_offset,
                             self.x_siz, self.y_siz)
Beispiel #8
0
class BankPropertyEditor(QtGui.QWidget, object):
    def __init__(self, bank_info, general_signal, message_sender, parent=None):
        """

        :param name: bank name
        """
        QtGui.QWidget.__init__(self)
        self.message_sender = message_sender
        self.general_signal = general_signal
        self.bank_info = BankInfo.from_instance(bank_info)
        # self.bank_num = self.bank_info.bank_number
        self.name = self.bank_info.bank_name
        self.setWindowTitle("Customize: {}".format(self.name))
        self.x_siz, self.y_siz = 500, 600
        self.resize(self.x_siz, self.y_siz)

        self.info_label = QLabel(
            "\nCustomize settings for selected bank.\nIt works only for Digifant1 programs"
        )
        self.info_label.setStyleSheet("font: Courier New")

        self.label = QLabel("Bank name:\n{}".format(self.name))
        self.label.setStyleSheet("font: 20pt Courier New; font-weight: bold")

        self.enable_digidiag_check_box = CheckBox(
            "enable digidiag",
            tip_msg="Enable Digifant diagnostic feedback for bank \"{}\"".
            format(self.name))

        self.override_digidiag_frames_check_box = CheckBox(
            "override frames",
            tip_msg="If selected it will override default digidiag frames with\n"
            "values in Custom Digi Frames")

        self.custom_frames_label = QLabel("\nCustom Digi Frames")
        self.custom_frames_label.setStyleSheet(
            "font: 10pt Courier New; font-weight: bold")

        self.custom_frames_table = CustomFramesEditor(
            self.bank_info.frames_vector)

        self.apply_button = PushButton("Apply", tip_msg="Apply changes")
        self.cancel_button = PushButton("Cancel", tip_msg="Discard changes")

        self.info_box = QLabel(" ")

        self.apply_button.clicked.connect(self.apply_button_slot)
        self.cancel_button.clicked.connect(self.cancel_button_slot)

        #GRID
        mainGrid = QtGui.QGridLayout()
        mainGrid.setSpacing(10)
        mainGrid.addWidget(self.info_label, 0, 0, 2, 3)
        mainGrid.addWidget(self.label, 2, 0, 1, 3)
        mainGrid.addWidget(self.enable_digidiag_check_box, 3, 0)
        mainGrid.addWidget(self.override_digidiag_frames_check_box, 3, 1)
        mainGrid.addWidget(self.custom_frames_label, 4, 0, 1, 3)
        mainGrid.addWidget(self.custom_frames_table, 5, 0, 1, 3)
        mainGrid.addWidget(self.cancel_button, 6, 0)
        mainGrid.addWidget(self.apply_button, 6, 1)
        mainGrid.addWidget(self.info_box, 7, 0, 2, 3)
        self.setLayout(mainGrid)
        self.__tmp_resp_msg_thread = None

        #place window next to parent
        if parent:
            x_offset = 0
            y_offset = 100
            current_position_and_size = WindowGeometry(parent)
            x_pos = current_position_and_size.get_position_to_the_right()
            self.setGeometry(x_pos + x_offset,
                             current_position_and_size.pos_y + y_offset,
                             self.x_siz, self.y_siz)

        #self.show()

    @property
    def bank_info(self):
        return self.__bank_info

    @bank_info.setter
    def bank_info(self, bank_info):
        self.__bank_info = BankInfo.from_instance(bank_info)
        self.bank_num = self.bank_info.bank_number

    def update(self, bank_info):
        self.bank_info = BankInfo.from_instance(bank_info)
        self.name = self.bank_info.bank_name
        self.display_values()
        self.label.setText("Bank name:\n{}".format(self.bank_info.bank_name))
        self.info_box.setText("Bank data received")
        self.setWindowTitle("Customize: {}".format(self.name))
        self.enable_digidiag_check_box.update_tip_msg(
            "Enable Digifant diagnostic feedback for bank \"{}\"".format(
                self.name))
        self.apply_button.setDisabled(False)

    def cancel_button_slot(self):
        self.display_values()
        self.close()

    def display_values(self):
        if self.bank_info.enable_digidiag:
            self.enable_digidiag_check_box.setChecked(True)
        else:
            self.enable_digidiag_check_box.setChecked(False)

        if self.bank_info.override_digidiag:
            self.override_digidiag_frames_check_box.setChecked(True)
        else:
            self.override_digidiag_frames_check_box.setChecked(False)

        self.custom_frames_table.update_values(self.bank_info.frames_vector)

    def clean_values(self):
        self.custom_frames_table.clean_table()
        self.enable_digidiag_check_box.setChecked(False)
        self.override_digidiag_frames_check_box.setChecked(False)

    def watch_message(self, thr):
        """
        Will unlock apply button when thread is finished
        :param thr:
        :return:
        """
        while thr.isRunning():
            time.sleep(0.2)
        self.apply_button.setDisabled(False)

    def apply_button_slot(self):
        try:
            self.bank_info.enable_digidiag = self.enable_digidiag_check_box.isChecked(
            )
            self.bank_info.override_digidiag = self.override_digidiag_frames_check_box.isChecked(
            )
            raw_frames = self.custom_frames_table.get()
            self.bank_info.frames_vector = raw_frames
            self.info_box.setText('')
            self.info_box.setText("Sending data...")
            msg_thread = self.message_sender(
                message_id=MessageSender.ID.update_bank_data,
                body=self.bank_info.raw_content,
                timeout=1,
                re_tx=3)
            self.apply_button.setDisabled(True)
            if self.__tmp_resp_msg_thread is not None:
                self.__tmp_resp_msg_thread.kill()
            self.__tmp_resp_msg_thread = GuiThread(self.watch_message,
                                                   args=(msg_thread, ))
            self.__tmp_resp_msg_thread.start()

        except Exception as e:
            self.info_box.setText(e.message)
Beispiel #9
0
 def create_delete_row_button(self):
     delete_button = PushButton('X')
     delete_button.clicked_s.connect(self.delete_value_slot)
     delete_button.setStyleSheet(RED_BACKGROUND_PUSHBUTTON)
     return delete_button
Beispiel #10
0
 def create_delete_row_button(self):
     delete_button = PushButton('delete')
     delete_button.clicked_s.connect(self.delete_value_slot)
     return delete_button
Beispiel #11
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
Beispiel #12
0
    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)
Beispiel #13
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()