def __init__(self, default_page=None, parent=None): QtGui.QDialog.__init__(self, parent) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtGui.QDialogButtonBox.HelpRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.buttonbox.helpRequested.connect(self.help) self.pages = [] for Page in page_classes: page = Page(self.ui.pages_stack) self.pages.append(page) self.item_to_page = {} self.page_to_item = {} self.default_item = None self.add_pages(None, default_page, self.ui.pages_tree) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() for page in self.pages: page.load() self.ui.pages_tree.setCurrentItem(self.default_item)
def __init__(self, files, parent=None): QtGui.QDialog.__init__(self, parent) self.ui = Ui_TagsFromFileNamesDialog() self.ui.setupUi(self) items = [ "%artist%/%album%/%tracknumber% %title%", "%artist%/%album%/%tracknumber% - %title%", "%artist%/%album - %tracknumber% - %title%", ] format = config.persist["tags_from_filenames_format"] if format and format not in items: items.insert(0, format) self.ui.format.addItems(items) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.preview.clicked.connect(self.preview) self.ui.files.setHeaderLabels([_("File Name")]) self.restoreWindowState() self.files = files self.items = [] for file in files: item = QtGui.QTreeWidgetItem(self.ui.files) item.setText(0, os.path.basename(file.filename)) self.items.append(item) self._tag_re = re.compile("(%\w+%)")
def __init__(self, default_page=None, parent=None): PicardDialog.__init__(self, parent) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.reset_all_button = QtGui.QPushButton( _("&Restore all Defaults")) self.ui.reset_all_button.setToolTip( _("Reset all of Picard's settings")) self.ui.reset_button = QtGui.QPushButton(_("Restore &Defaults")) self.ui.reset_button.setToolTip( _("Reset all settings for current option page")) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtGui.QDialogButtonBox.HelpRole) self.ui.buttonbox.addButton(self.ui.reset_all_button, QtGui.QDialogButtonBox.ActionRole) self.ui.buttonbox.addButton(self.ui.reset_button, QtGui.QDialogButtonBox.ActionRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.reset_all_button.clicked.connect(self.confirm_reset_all) self.ui.reset_button.clicked.connect(self.confirm_reset) self.ui.buttonbox.helpRequested.connect(self.help) self.pages = [] for Page in page_classes: page = Page(self.ui.pages_stack) self.pages.append(page) self.item_to_page = {} self.page_to_item = {} self.default_item = None self.add_pages(None, default_page, self.ui.pages_tree) # work-around to set optimal option pane width self.ui.pages_tree.expandAll() max_page_name = self.ui.pages_tree.sizeHintForColumn( 0) + 2 * self.ui.pages_tree.frameWidth() self.ui.pages_tree.collapseAll() self.ui.pages_tree.setMinimumWidth(max_page_name) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() for page in self.pages: page.load() self.ui.pages_tree.setCurrentItem(self.default_item)
def __init__(self, parent=None, types=None): if types is None: types = [] super().__init__(parent) self.setWindowTitle(_("Cover art types")) self._items = {} self.layout = QtWidgets.QVBoxLayout(self) grid = QtWidgets.QWidget() gridlayout = QtWidgets.QGridLayout() grid.setLayout(gridlayout) for index, caa_type in enumerate(CAA_TYPES): row = index // self._columns column = index % self._columns name = caa_type["name"] text = translate_caa_type(name) item = QtWidgets.QCheckBox(text) item.setChecked(name in types) self._items[item] = caa_type gridlayout.addWidget(item, row, column) self.layout.addWidget(grid) self.buttonbox = QtWidgets.QDialogButtonBox(self) self.buttonbox.setOrientation(QtCore.Qt.Horizontal) self.buttonbox.addButton(StandardButton(StandardButton.OK), QtWidgets.QDialogButtonBox.AcceptRole) self.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.buttonbox.addButton(StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) self.buttonbox.accepted.connect(self.accept) self.buttonbox.rejected.connect(self.reject) self.buttonbox.helpRequested.connect(self.help) extrabuttons = [ (N_("Chec&k all"), self.checkall), (N_("&Uncheck all"), self.uncheckall), ] for label, callback in extrabuttons: button = QtWidgets.QPushButton(_(label)) button.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) self.buttonbox.addButton(button, QtWidgets.QDialogButtonBox.ActionRole) button.clicked.connect(callback) self.layout.addWidget(self.buttonbox) self.buttonbox.accepted.connect(self.accept) self.buttonbox.rejected.connect(self.reject)
def __init__(self, default_page=None, parent=None): super().__init__(parent) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.reset_all_button = QtWidgets.QPushButton(_("&Restore all Defaults")) self.ui.reset_all_button.setToolTip(_("Reset all of Picard's settings")) self.ui.reset_button = QtWidgets.QPushButton(_("Restore &Defaults")) self.ui.reset_button.setToolTip(_("Reset all settings for current option page")) ok = StandardButton(StandardButton.OK) ok.setText(_("Make It So!")) self.ui.buttonbox.addButton(ok, QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) self.ui.buttonbox.addButton(self.ui.reset_all_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.addButton(self.ui.reset_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.reset_all_button.clicked.connect(self.confirm_reset_all) self.ui.reset_button.clicked.connect(self.confirm_reset) self.ui.buttonbox.helpRequested.connect(self.help) self.pages = [] for Page in page_classes: page = Page(self.ui.pages_stack) self.pages.append(page) self.item_to_page = {} self.page_to_item = {} self.default_item = None self.add_pages(None, default_page, self.ui.pages_tree) # work-around to set optimal option pane width self.ui.pages_tree.expandAll() max_page_name = self.ui.pages_tree.sizeHintForColumn(0) + 2*self.ui.pages_tree.frameWidth() self.ui.pages_tree.collapseAll() self.ui.splitter.setSizes([max_page_name, self.geometry().width() - max_page_name]) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() self.finished.connect(self.saveWindowState) for page in self.pages: page.load() self.ui.pages_tree.setCurrentItem(self.default_item)
def __init__(self, parent=None, types=[]): super(CAATypesSelectorDialog, self).__init__(parent) self.setWindowTitle(_("Cover art types")) self._items = {} self.layout = QtGui.QVBoxLayout(self) grid = QtGui.QWidget() gridlayout = QtGui.QGridLayout() grid.setLayout(gridlayout) rows = len(CAA_TYPES) // self._columns + 1 positions = [(i, j) for i in range(rows) for j in range(self._columns)] for position, caa_type in zip(positions, CAA_TYPES): name = caa_type["name"] text = translate_caa_type(name) item = QtGui.QCheckBox(text) item.setChecked(name in types) self._items[item] = caa_type gridlayout.addWidget(item, *position) self.layout.addWidget(grid) self.buttonbox = QtGui.QDialogButtonBox(self) self.buttonbox.setOrientation(QtCore.Qt.Horizontal) self.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.buttonbox.addButton(StandardButton(StandardButton.HELP), QtGui.QDialogButtonBox.HelpRole) self.buttonbox.accepted.connect(self.accept) self.buttonbox.rejected.connect(self.reject) self.buttonbox.helpRequested.connect(self.help) extrabuttons = [ (N_("Chec&k all"), self.checkall), (N_("&Uncheck all"), self.uncheckall), ] for label, callback in extrabuttons: button = QtGui.QPushButton(_(label)) button.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding) self.buttonbox.addButton(button, QtGui.QDialogButtonBox.ActionRole) button.clicked.connect(callback) self.layout.addWidget(self.buttonbox) self.buttonbox.accepted.connect(self.accept) self.buttonbox.rejected.connect(self.reject)
def setupUi(self, accept_button_title): self.verticalLayout = QtWidgets.QVBoxLayout(self) self.verticalLayout.setObjectName(_("vertical_layout")) self.search_box = SearchBox(self) self.search_box.setObjectName(_("search_box")) self.verticalLayout.addWidget(self.search_box) self.center_widget = QtWidgets.QWidget(self) self.center_widget.setObjectName(_("center_widget")) self.center_layout = QtWidgets.QVBoxLayout(self.center_widget) self.center_layout.setObjectName(_("center_layout")) self.center_layout.setContentsMargins(1, 1, 1, 1) self.center_widget.setLayout(self.center_layout) self.verticalLayout.addWidget(self.center_widget) self.buttonBox = QtWidgets.QDialogButtonBox(self) self.accept_button = QtWidgets.QPushButton( accept_button_title, self.buttonBox) self.accept_button.setEnabled(False) self.buttonBox.addButton( self.accept_button, QtWidgets.QDialogButtonBox.AcceptRole) self.buttonBox.addButton( StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.verticalLayout.addWidget(self.buttonBox)
def __init__(self, parent=None, option_group=None, override_profiles=None, override_settings=None): super().__init__(parent=parent) self.option_group = option_group self.ui = Ui_AttachedProfilesDialog() self.ui.setupUi(self) self.ui.buttonBox.addButton(StandardButton(StandardButton.CLOSE), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonBox.rejected.connect(self.close_window) config = get_config() if override_profiles is None or override_settings is None: self.profiles = config.profiles[SettingConfigSection.PROFILES_KEY] self.settings = config.profiles[SettingConfigSection.SETTINGS_KEY] else: self.profiles = override_profiles self.settings = override_settings self.populate_table() self.ui.buttonBox.setFocus() self.setModal(True)
def setupUi(self): self.verticalLayout = QtWidgets.QVBoxLayout(self) self.verticalLayout.setObjectName("vertical_layout") if self.show_search: self.search_box = SearchBox( self, force_advanced_search=self.force_advanced_search) self.search_box.setObjectName("search_box") self.verticalLayout.addWidget(self.search_box) self.center_widget = QtWidgets.QWidget(self) self.center_widget.setObjectName("center_widget") self.center_layout = QtWidgets.QVBoxLayout(self.center_widget) self.center_layout.setObjectName("center_layout") self.center_layout.setContentsMargins(1, 1, 1, 1) self.center_widget.setLayout(self.center_layout) self.verticalLayout.addWidget(self.center_widget) self.buttonBox = QtWidgets.QDialogButtonBox(self) if self.show_search and self.search_type: self.search_browser_button = QtWidgets.QPushButton( _("Search in browser"), self.buttonBox) self.buttonBox.addButton( self.search_browser_button, QtWidgets.QDialogButtonBox.ButtonRole.ActionRole) self.search_browser_button.clicked.connect(self.search_browser) self.accept_button = QtWidgets.QPushButton(self.accept_button_title, self.buttonBox) self.accept_button.setEnabled(False) self.buttonBox.addButton( self.accept_button, QtWidgets.QDialogButtonBox.ButtonRole.AcceptRole) self.buttonBox.addButton( StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.ButtonRole.RejectRole) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.verticalLayout.addWidget(self.buttonBox)
def __init__(self, files, parent=None): QtGui.QDialog.__init__(self, parent) self.ui = Ui_TagEditorDialog() self.ui.setupUi(self) title = _("Details") + " - " total = len(files) if total == 1: title += files[0].base_filename else: title += ungettext("%d file", "%d files", total) % total self.setWindowTitle(title) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.connect(self.ui.buttonbox, QtCore.SIGNAL('accepted()'), self, QtCore.SLOT('accept()')) self.connect(self.ui.buttonbox, QtCore.SIGNAL('rejected()'), self, QtCore.SLOT('reject()')) self.connect(self.ui.tags_add, QtCore.SIGNAL('clicked()'), self.add_tag) self.connect(self.ui.tags_edit, QtCore.SIGNAL('clicked()'), self.edit_tag) self.connect(self.ui.tags_delete, QtCore.SIGNAL('clicked()'), self.delete_tag) self.connect(self.ui.tags, QtCore.SIGNAL("itemActivated (QTreeWidgetItem*, int)"), self.edit_tag) self.ui.tags.setSortingEnabled(True) self.ui.tags.sortByColumn(0, QtCore.Qt.AscendingOrder) if self.config.setting['enable_ratings']: self.ui.rating.setMaximum(self.config.setting['rating_steps'] - 1) else: self.ui.ratingLabel.hide() self.ui.rating.hide() self.changed = set() self.files = files self.load() self.load_info()
def __init__(self, files, parent=None): super().__init__(parent) self.ui = Ui_TagsFromFileNamesDialog() self.ui.setupUi(self) items = [ "%artist%/%album%/%title%", "%artist%/%album%/%tracknumber% %title%", "%artist%/%album%/%tracknumber% - %title%", "%artist%/%album% - %tracknumber% - %title%", "%artist% - %album%/%title%", "%artist% - %album%/%tracknumber% %title%", "%artist% - %album%/%tracknumber% - %title%", ] config = get_config() tff_format = config.persist["tags_from_filenames_format"] if tff_format not in items: selected_index = 0 if tff_format: items.insert(0, tff_format) else: selected_index = items.index(tff_format) self.ui.format.addItems(items) self.ui.format.setCurrentIndex(selected_index) self.ui.buttonbox.addButton( StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.ButtonRole.HelpRole) self.ui.buttonbox.addButton( StandardButton(StandardButton.OK), QtWidgets.QDialogButtonBox.ButtonRole.AcceptRole) self.ui.buttonbox.addButton( StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.ButtonRole.RejectRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.buttonbox.helpRequested.connect(self.show_help) self.ui.preview.clicked.connect(self.preview) self.ui.files.setHeaderLabels([_("File Name")]) self.files = files self.items = [] for file in files: item = QtWidgets.QTreeWidgetItem(self.ui.files) item.setText(0, os.path.basename(file.filename)) self.items.append(item)
def __init__(self, name, value, parent=None): QtGui.QDialog.__init__(self, parent) self.ui = Ui_EditTagDialog() self.ui.setupUi(self) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole) self.connect(self.ui.buttonbox, QtCore.SIGNAL('accepted()'), self, QtCore.SLOT('accept()')) self.connect(self.ui.buttonbox, QtCore.SIGNAL('rejected()'), self, QtCore.SLOT('reject()')) self.ui.name.addItems(sorted(tag_names.keys())) if name: self.ui.name.setEditText(name) if value: self.ui.value.document().setPlainText(value) self.ui.value.selectAll() self.ui.value.setFocus(QtCore.Qt.OtherFocusReason) else: self.ui.name.lineEdit().selectAll()
def __init__(self, files, parent=None): PicardDialog.__init__(self, parent) self.ui = Ui_TagsFromFileNamesDialog() self.ui.setupUi(self) items = [ "%artist%/%album%/%title%", "%artist%/%album%/%tracknumber% %title%", "%artist%/%album%/%tracknumber% - %title%", "%artist%/%album% - %tracknumber% - %title%", "%artist% - %album%/%title%", "%artist% - %album%/%tracknumber% %title%", "%artist% - %album%/%tracknumber% - %title%", ] tff_format = config.persist["tags_from_filenames_format"] if tff_format not in items: selected_index = 0 if tff_format: items.insert(0, tff_format) else: selected_index = items.index(tff_format) self.ui.format.addItems(items) self.ui.format.setCurrentIndex(selected_index) self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.preview.clicked.connect(self.preview) self.ui.files.setHeaderLabels([_("File Name")]) self.restoreWindowState() self.files = files self.items = [] for file in files: item = QtWidgets.QTreeWidgetItem(self.ui.files) item.setText(0, os.path.basename(file.filename)) self.items.append(item) self._tag_re = re.compile(r"(%\w+%)") self.numeric_tags = ('tracknumber', 'totaltracks', 'discnumber', 'totaldiscs')
def __init__(self, parent=None, option_group=None): super().__init__(parent=parent) self.option_group = option_group self.ui = Ui_AttachedProfilesDialog() self.ui.setupUi(self) self.ui.buttonBox.addButton(StandardButton(StandardButton.CLOSE), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonBox.rejected.connect(self.close_window) self.populate_table() self.ui.buttonBox.setFocus() self.setModal(True)
def __init__(self, default_page=None, parent=None): super().__init__(parent) self.setWindowModality(QtCore.Qt.ApplicationModal) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.reset_all_button = QtWidgets.QPushButton(_("&Restore all Defaults")) self.ui.reset_all_button.setToolTip(_("Reset all of Picard's settings")) self.ui.reset_button = QtWidgets.QPushButton(_("Restore &Defaults")) self.ui.reset_button.setToolTip(_("Reset all settings for current option page")) ok = StandardButton(StandardButton.OK) ok.setText(_("Make It So!")) self.ui.buttonbox.addButton(ok, QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) self.ui.buttonbox.addButton(self.ui.reset_all_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.addButton(self.ui.reset_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.reset_all_button.clicked.connect(self.confirm_reset_all) self.ui.reset_button.clicked.connect(self.confirm_reset) self.ui.buttonbox.helpRequested.connect(self.help) self.pages = [] for Page in page_classes: page = Page(self.ui.pages_stack) self.pages.append(page) self.item_to_page = {} self.page_to_item = {} self.default_item = None self.add_pages(None, default_page, self.ui.pages_tree) # work-around to set optimal option pane width self.ui.pages_tree.expandAll() max_page_name = self.ui.pages_tree.sizeHintForColumn(0) + 2*self.ui.pages_tree.frameWidth() self.ui.pages_tree.collapseAll() self.ui.splitter.setSizes([max_page_name, self.geometry().width() - max_page_name]) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() self.finished.connect(self.saveWindowState) for page in self.pages: page.load() self.ui.pages_tree.setCurrentItem(self.default_item)
def __init__(self, obj, parent=None): super().__init__(parent) self.obj = obj self.images = [] self.existing_images = [] self.ui = Ui_InfoDialog() self.display_existing_artwork = False if (isinstance(obj, File) and isinstance(obj.parent, Track) or isinstance(obj, Track) or (isinstance(obj, Album) and obj.get_num_total_files() > 0)): # Display existing artwork only if selected object is track object # or linked to a track object or it's an album with files if (getattr(obj, 'orig_metadata', None) is not None and obj.orig_metadata.images and obj.orig_metadata.images != obj.metadata.images): self.display_existing_artwork = True self.existing_images = obj.orig_metadata.images if obj.metadata.images: self.images = obj.metadata.images if not self.images and self.existing_images: self.images = self.existing_images self.existing_images = [] self.display_existing_artwork = False self.ui.setupUi(self) self.ui.buttonBox.addButton( StandardButton(StandardButton.CLOSE), QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonBox.accepted.connect(self.accept) # Add the ArtworkTable to the ui self.ui.artwork_table = ArtworkTable(self.display_existing_artwork) self.ui.artwork_table.setObjectName("artwork_table") self.ui.vboxlayout1.addWidget(self.ui.artwork_table) self.setTabOrder(self.ui.tabWidget, self.ui.artwork_table) self.setTabOrder(self.ui.artwork_table, self.ui.buttonBox) self.setWindowTitle(_("Info")) self.artwork_table = self.ui.artwork_table self._display_tabs() self.restore_geometry()
def __init__(self, parent=None, types_include=None, types_exclude=None): super().__init__(parent) if types_include is None: types_include = [] if types_exclude is None: types_exclude = [] self.setWindowTitle(_("Cover art types")) self.setWindowModality(QtCore.Qt.WindowModal) self.layout = QtWidgets.QVBoxLayout(self) self.layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) # Create list boxes for dialog self.list_include = ListBox() self.list_exclude = ListBox() self.list_ignore = ListBox() # Populate list boxes from current settings self.fill_lists(types_include, types_exclude) # Set triggers when the lists receive the current focus self.list_include.clicked.connect(partial(self.clear_focus, [self.list_ignore, self.list_exclude])) self.list_exclude.clicked.connect(partial(self.clear_focus, [self.list_ignore, self.list_include])) self.list_ignore.clicked.connect(partial(self.clear_focus, [self.list_include, self.list_exclude])) # Add instructions to the dialog box instructions = QtWidgets.QLabel() instructions.setText(_("Please select the contents of the image type 'Include' and 'Exclude' lists.")) instructions.setWordWrap(True) instructions.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) self.layout.addWidget(instructions) grid = QtWidgets.QWidget() gridlayout = QtWidgets.QGridLayout() grid.setLayout(gridlayout) self.arrows_include = ArrowsColumn( self.list_include, self.list_ignore, callback=self.set_buttons_enabled_state, ) self.arrows_exclude = ArrowsColumn( self.list_exclude, self.list_ignore, callback=self.set_buttons_enabled_state, reverse=True ) def add_widget(row=0, column=0, widget=None): gridlayout.addWidget(widget, row, column) add_widget(row=0, column=0, widget=QtWidgets.QLabel(_("Include types list"))) add_widget(row=1, column=0, widget=self.list_include) add_widget(row=1, column=1, widget=self.arrows_include) add_widget(row=1, column=2, widget=self.list_ignore) add_widget(row=1, column=3, widget=self.arrows_exclude) add_widget(row=0, column=4, widget=QtWidgets.QLabel(_("Exclude types list"))) add_widget(row=1, column=4, widget=self.list_exclude) self.layout.addWidget(grid) # Add usage explanation to the dialog box instructions = QtWidgets.QLabel() instructions.setText(_( "CAA images with an image type found in the 'Include' list will be downloaded and used " "UNLESS they also have an image type found in the 'Exclude' list. Images with types " "found in the 'Exclude' list will NEVER be used. Image types not appearing in the 'Include' " "or 'Exclude' lists will not be considered when determining whether or not to download and " "use a CAA image.\n") ) instructions.setWordWrap(True) instructions.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) self.layout.addWidget(instructions) self.buttonbox = QtWidgets.QDialogButtonBox(self) self.buttonbox.setOrientation(QtCore.Qt.Horizontal) self.buttonbox.addButton( StandardButton(StandardButton.OK), QtWidgets.QDialogButtonBox.AcceptRole) self.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.buttonbox.addButton( StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) extrabuttons = [ (N_("I&nclude all"), self.move_all_to_include_list), (N_("E&xclude all"), self.move_all_to_exclude_list), (N_("C&lear all"), self.move_all_to_ignore_list), (N_("Restore &Defaults"), self.reset_to_defaults), ] for label, callback in extrabuttons: button = QtWidgets.QPushButton(_(label)) button.setSizePolicy( QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) self.buttonbox.addButton(button, QtWidgets.QDialogButtonBox.ActionRole) button.clicked.connect(callback) self.layout.addWidget(self.buttonbox) self.buttonbox.accepted.connect(self.accept) self.buttonbox.rejected.connect(self.reject) self.buttonbox.helpRequested.connect(self.help) self.set_buttons_enabled_state()
def __init__(self, default_page=None, parent=None): super().__init__(parent) self.setWindowModality(QtCore.Qt.ApplicationModal) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.reset_all_button = QtWidgets.QPushButton( _("&Restore all Defaults")) self.ui.reset_all_button.setToolTip( _("Reset all of Picard's settings")) self.ui.reset_button = QtWidgets.QPushButton(_("Restore &Defaults")) self.ui.reset_button.setToolTip( _("Reset all settings for current option page")) ok = StandardButton(StandardButton.OK) ok.setText(_("Make It So!")) self.ui.buttonbox.addButton(ok, QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) self.ui.buttonbox.addButton(self.ui.reset_all_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.addButton(self.ui.reset_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.reset_all_button.clicked.connect(self.confirm_reset_all) self.ui.reset_button.clicked.connect(self.confirm_reset) self.ui.buttonbox.helpRequested.connect(self.show_help) self.ui.attached_profiles_button = QtWidgets.QPushButton( _("Attached Profiles")) self.ui.attached_profiles_button.setToolTip( _("Show which profiles are attached to the options on this page")) self.ui.buttonbox.addButton(self.ui.attached_profiles_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.attached_profiles_button.clicked.connect( self.show_attached_profiles_dialog) config = get_config() self.pages = [] for Page in page_classes: try: page = Page(self.ui.pages_stack) self.pages.append(page) except Exception: log.exception('Failed initializing options page %r', page) self.item_to_page = {} self.page_to_item = {} self.default_item = None if not default_page: default_page = config.persist["options_last_active_page"] self.add_pages(None, default_page, self.ui.pages_tree) # work-around to set optimal option pane width self.ui.pages_tree.expandAll() max_page_name = self.ui.pages_tree.sizeHintForColumn( 0) + 2 * self.ui.pages_tree.frameWidth() self.ui.dialog_splitter.setSizes( [max_page_name, self.geometry().width() - max_page_name]) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() self.finished.connect(self.saveWindowState) for page in self.pages: try: page.load() except Exception: log.exception('Failed loading options page %r', page) self.disable_page(page.NAME) self.ui.pages_tree.setCurrentItem(self.default_item) self.profile_page = self.get_page('profiles') self.profile_page.signal_refresh.connect( self.update_from_profile_changes) self.first_enter = True self.installEventFilter(self) self.highlight_enabled_profile_options() current_page = self.item_to_page[self.ui.pages_tree.currentItem()] self.set_profiles_button_and_highlight(current_page)
def __init__(self, default_page=None, parent=None): super().__init__(parent) self.setWindowModality(QtCore.Qt.ApplicationModal) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) from picard.ui.ui_options import Ui_Dialog self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.reset_all_button = QtWidgets.QPushButton( _("&Restore all Defaults")) self.ui.reset_all_button.setToolTip( _("Reset all of Picard's settings")) self.ui.reset_button = QtWidgets.QPushButton(_("Restore &Defaults")) self.ui.reset_button.setToolTip( _("Reset all settings for current option page")) ok = StandardButton(StandardButton.OK) ok.setText(_("Make It So!")) self.ui.buttonbox.addButton(ok, QtWidgets.QDialogButtonBox.AcceptRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtWidgets.QDialogButtonBox.RejectRole) self.ui.buttonbox.addButton(StandardButton(StandardButton.HELP), QtWidgets.QDialogButtonBox.HelpRole) self.ui.buttonbox.addButton(self.ui.reset_all_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.addButton(self.ui.reset_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.buttonbox.accepted.connect(self.accept) self.ui.buttonbox.rejected.connect(self.reject) self.ui.reset_all_button.clicked.connect(self.confirm_reset_all) self.ui.reset_button.clicked.connect(self.confirm_reset) self.ui.buttonbox.helpRequested.connect(self.show_help) profile_help = StandardButton(StandardButton.HELP) profile_help.setText(_("Profile Help")) self.ui.profiles_buttonbox.addButton( profile_help, QtWidgets.QDialogButtonBox.HelpRole) self.ui.profiles_buttonbox.helpRequested.connect( self.show_profile_help) self.ui.attached_profiles_button = QtWidgets.QPushButton( _("Attached Profiles")) self.ui.attached_profiles_button.setToolTip( _("Show which profiles are attached to the options on this page")) self.ui.profiles_buttonbox.addButton( self.ui.attached_profiles_button, QtWidgets.QDialogButtonBox.ActionRole) self.ui.attached_profiles_button.clicked.connect( self.show_attached_profiles_dialog) config = get_config() self.pages = [] for Page in page_classes: try: page = Page(self.ui.pages_stack) self.pages.append(page) except Exception: log.exception('Failed initializing options page %r', page) self.item_to_page = {} self.page_to_item = {} self.default_item = None if not default_page: default_page = config.persist["options_last_active_page"] self.add_pages(None, default_page, self.ui.pages_tree) # work-around to set optimal option pane width self.ui.pages_tree.expandAll() max_page_name = self.ui.pages_tree.sizeHintForColumn( 0) + 2 * self.ui.pages_tree.frameWidth() self.ui.dialog_splitter.setSizes( [max_page_name, self.geometry().width() - max_page_name]) self.ui.pages_tree.setHeaderLabels([""]) self.ui.pages_tree.header().hide() self.ui.pages_tree.itemSelectionChanged.connect(self.switch_page) self.restoreWindowState() self.finished.connect(self.saveWindowState) for page in self.pages: try: page.load() except Exception: log.exception('Failed loading options page %r', page) self.disable_page(page.NAME) self.ui.pages_tree.setCurrentItem(self.default_item) self.first_enter = True self.installEventFilter(self) self.USER_SETTINGS_TITLE = _("User base settings") if config.profiles[SettingConfigSection.PROFILES_KEY]: self.ui.profile_frame.show() self.ui.save_to_profile.clear() self.ui.save_to_profile.addItem(self.USER_SETTINGS_TITLE, USER_SETTINGS_PROFILE_ID) index = 0 for idx, item in enumerate( config.profiles[SettingConfigSection.PROFILES_KEY], start=1): self.ui.save_to_profile.addItem(item["title"], item["id"]) if not index and item["enabled"]: index = idx self.ui.save_to_profile.currentIndexChanged.connect( self.switch_profile) self.ui.save_to_profile.setCurrentIndex(index) else: self.ui.profile_frame.hide()