Exemple #1
0
class SettingsWidget(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Search box
        self.txt_search_box = QLineEdit(self)
        self.setup_search_line_edit()

        # Hide watched checkbox
        self.chk_hide_watched = QCheckBox(self)
        self.setup_hide_watched_checkbox()

        # Regex checkbox
        self.chk_regex = QCheckBox(self)
        self.setup_regex_checkbox()

        self.chk_rename = QCheckBox(self)
        self.setup_rename_checkbox()

        # Settings groupbox
        self.grp_settings = QGroupBox(self)
        self.setup_settings_group_box()

        # Player settings
        self.lbl_player = NameLabel(self)
        self.setup_player_label()

        self.lbl_player_name = ElidedLabel(self)
        self.setup_player_name_label()

        self.btn_change_player = ScalablePushButton(self)
        self.setup_change_player_button()

        self.dlg_select_player = QFileDialog(self)
        self.setup_player_open_dialog()

        # Style combobox
        self.cmb_style = QComboBox(self)
        self.lbl_combo_style = NameLabel(self)
        self.setup_style_combobox()

        self.cmb_icon = QComboBox(self)
        self.lbl_combo_icon = NameLabel(self)
        self.setup_icon_combobox()

        self.setLayout(self.get_layout())
        self.layout().setContentsMargins(0, 0, 0, 0)

    def create_line(self):
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        return line

    def get_layout(self):
        vl_final = QVBoxLayout()
        vl_filter = QVBoxLayout()
        hl_player = QHBoxLayout()

        hl_checkboxes = QHBoxLayout()
        checkboxes = [self.chk_hide_watched, self.chk_regex, self.chk_rename]
        for w in checkboxes:
            hl_checkboxes.addWidget(w)

        player_labels = [
            self.lbl_player,
            self.lbl_player_name,
            self.btn_change_player,
        ]
        for w in player_labels:
            hl_player.addWidget(w)

        hl_comboboxes = QHBoxLayout()
        combos = [
            self.lbl_combo_style,
            self.cmb_style,
            self.lbl_combo_icon,
            self.cmb_icon,
        ]
        for w in combos:
            hl_comboboxes.addWidget(w)

        vl_filter.addLayout(hl_comboboxes)
        vl_filter.addWidget(self.create_line())
        vl_filter.addLayout(hl_player)
        vl_filter.addWidget(self.create_line())
        vl_filter.addLayout(hl_checkboxes)
        vl_filter.addWidget(self.txt_search_box)

        self.grp_settings.setLayout(vl_filter)

        vl_final.addWidget(self.grp_settings)

        return vl_final

    def setup_search_line_edit(self):
        size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.txt_search_box.setSizePolicy(size_policy)
        self.txt_search_box.setPlaceholderText("Search...")

    def setup_hide_watched_checkbox(self):
        size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.chk_hide_watched.setSizePolicy(size_policy)
        self.chk_hide_watched.setText("Hide watched")

    def setup_regex_checkbox(self):
        size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.chk_regex.setSizePolicy(size_policy)
        self.chk_regex.setText("Regex")

    def setup_rename_checkbox(self):
        size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.chk_rename.setSizePolicy(size_policy)
        self.chk_rename.setText("Rename")
        self.chk_rename.setToolTip("Rename media titles according to regex")

    def setup_settings_group_box(self):
        size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        self.grp_settings.setSizePolicy(size_policy)
        self.grp_settings.setTitle("Settings")

    def setup_player_label(self):
        self.lbl_player.setText("Player:")

    def setup_player_name_label(self):
        self.lbl_player_name.setText(NOT_AVAILABLE)

    def setup_change_player_button(self):
        size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)

        self.btn_change_player.setSizePolicy(size_policy)
        self.btn_change_player.setToolTip("Change player")
        self.btn_change_player.setIcon(IconSet.current.folder_open)

    def setup_player_open_dialog(self):
        directory = None
        if is_linux():
            directory = "/usr/bin"
        elif is_windows():
            directory = os.getenv("ProgramFiles(x86)")
            self.dlg_select_player.setNameFilter("Executable Files (*.exe)")
        elif is_macos():
            directory = "/Applications"

        self.dlg_select_player.setWindowTitle("Select new player")
        self.dlg_select_player.setWindowIcon(main_icon())
        self.dlg_select_player.setDirectory(directory)
        self.dlg_select_player.setMinimumSize(QApplication.desktop().size() /
                                              2)
        self.dlg_select_player.setFileMode(QFileDialog.ExistingFile)
        self.dlg_select_player.setViewMode(QFileDialog.Detail)
        self.dlg_select_player.setAcceptMode(QFileDialog.AcceptOpen)
        self.dlg_select_player.setOptions(QFileDialog.DontUseNativeDialog
                                          | QFileDialog.ReadOnly
                                          | QFileDialog.HideNameFilterDetails)
        self.dlg_select_player.adjustSize()

    def setup_style_combobox(self):
        self.lbl_combo_style.setText("Style:")
        styles = [x.capitalize() for x in Style.names()]
        self.cmb_style.addItems(styles)

    def setup_icon_combobox(self):
        self.lbl_combo_icon.setText("Icons:")
        for iconset in IconSet:
            self.cmb_icon.addItem(iconset.value.play,
                                  iconset.name.capitalize())