def __init__(self, parent, settings): """Initialize the GUI.""" super(Preferences, self).__init__(parent) self.ui = Ui_PreferencesWindow() self.ui.setupUi(self) self.settings = settings self.parent = parent self.ordered_options = [] self.update_global_quality = True #Populate the QTreeWidget with the plugins' names and options self.ui.tree_quality.header().resizeSection(0, 350) quality_options = self.settings.get_quality_options() for option in quality_options: cb_qualityOptions = QComboBox(self) cb_qualityOptions.addItem(self.tr("Ask Quality")) cb_qualityOptions.addItem(self.tr("Low Quality")) cb_qualityOptions.addItem(self.tr("High Quality")) item = QtGui.QTreeWidgetItem([option.capitalize(), ""]) self.ui.tree_quality.addTopLevelItem(item) self.ui.tree_quality.setItemWidget(item, 1, cb_qualityOptions) cb_qualityOptions.setCurrentIndex(quality_options[option]) cb_qualityOptions.currentIndexChanged.connect(self.updateGlobalQuality) self.ui.cb_applyToAll.setChecked(bool(self.settings.global_video_quality)) self.updateGlobalQuality() self.ui.cb_builtinPlayer.setChecked(self.settings.use_builtin_player) if not HAS_PLAYER or not c.HAS_FFMPEG: self.ui.cb_builtinPlayer.setEnabled(False) self.ui.cb_builtinPlayer.setChecked(0) self.on_builtinPlayer_check() # Update the window to display the current configuration self.ui.ledit_player.setText(self.settings.media_player) self.last_valid_player=self.settings.media_player self.ui.edit_folder.setText(self.settings.download_folder) self.ui.combo_options.setCurrentIndex(self.settings.after_download) self.ui.combo_dc.setCurrentIndex(self.settings.play_downloaded) self.ui.s_notifyDone.setChecked(self.settings.notify_done) self.ui.s_notifyError.setChecked(self.settings.notify_error) self.ui.cb_checkLinksAuto.setChecked(self.settings.check_links_auto) if notification.HAS_PYNOTIFY: self.ui.f_note.hide() # Connect signals with slots self.ui.btn_player.clicked.connect(self.browseForFile) self.ui.button_folder.clicked.connect(self.browseFolder) self.ui.buttonBox.accepted.connect(self.saveSettings) self.ui.buttonBox.rejected.connect(self.close) self.ui.rb_all_high_quality.clicked.connect(self.setGlobalQuality) self.ui.rb_all_low_quality.clicked.connect(self.setGlobalQuality) self.ui.rb_all_ask.clicked.connect(self.setGlobalQuality) self.ui.cb_builtinPlayer.clicked.connect(self.on_builtinPlayer_check) self.ui.cb_applyToAll.clicked.connect(self.updateGlobalQuality) self.visible = True
class Preferences(QtGui.QDialog): """The class responsible for the Preferences window.""" def __init__(self, parent, settings): """Initialize the GUI.""" super(Preferences, self).__init__(parent) self.ui = Ui_PreferencesWindow() self.ui.setupUi(self) self.settings = settings self.parent = parent self.ordered_options = [] self.update_global_quality = True #Populate the QTreeWidget with the plugins' names and options self.ui.tree_quality.header().resizeSection(0, 350) quality_options = self.settings.get_quality_options() for option in quality_options: cb_qualityOptions = QComboBox(self) cb_qualityOptions.addItem(self.tr("Ask Quality")) cb_qualityOptions.addItem(self.tr("Low Quality")) cb_qualityOptions.addItem(self.tr("High Quality")) item = QtGui.QTreeWidgetItem([option.capitalize(), ""]) self.ui.tree_quality.addTopLevelItem(item) self.ui.tree_quality.setItemWidget(item, 1, cb_qualityOptions) cb_qualityOptions.setCurrentIndex(quality_options[option]) cb_qualityOptions.currentIndexChanged.connect(self.updateGlobalQuality) self.ui.cb_applyToAll.setChecked(bool(self.settings.global_video_quality)) self.updateGlobalQuality() self.ui.cb_builtinPlayer.setChecked(self.settings.use_builtin_player) if not HAS_PLAYER or not c.HAS_FFMPEG: self.ui.cb_builtinPlayer.setEnabled(False) self.ui.cb_builtinPlayer.setChecked(0) self.on_builtinPlayer_check() # Update the window to display the current configuration self.ui.ledit_player.setText(self.settings.media_player) self.last_valid_player=self.settings.media_player self.ui.edit_folder.setText(self.settings.download_folder) self.ui.combo_options.setCurrentIndex(self.settings.after_download) self.ui.combo_dc.setCurrentIndex(self.settings.play_downloaded) self.ui.s_notifyDone.setChecked(self.settings.notify_done) self.ui.s_notifyError.setChecked(self.settings.notify_error) self.ui.cb_checkLinksAuto.setChecked(self.settings.check_links_auto) if notification.HAS_PYNOTIFY: self.ui.f_note.hide() # Connect signals with slots self.ui.btn_player.clicked.connect(self.browseForFile) self.ui.button_folder.clicked.connect(self.browseFolder) self.ui.buttonBox.accepted.connect(self.saveSettings) self.ui.buttonBox.rejected.connect(self.close) self.ui.rb_all_high_quality.clicked.connect(self.setGlobalQuality) self.ui.rb_all_low_quality.clicked.connect(self.setGlobalQuality) self.ui.rb_all_ask.clicked.connect(self.setGlobalQuality) self.ui.cb_builtinPlayer.clicked.connect(self.on_builtinPlayer_check) self.ui.cb_applyToAll.clicked.connect(self.updateGlobalQuality) self.visible = True def on_builtinPlayer_check(self): self.ui.Lmedia_player.setEnabled(not self.ui.cb_builtinPlayer.isChecked()) self.ui.btn_player.setEnabled(not self.ui.cb_builtinPlayer.isChecked()) self.ui.ledit_player.setEnabled(not self.ui.cb_builtinPlayer.isChecked()) def updateGlobalQuality(self, index=0): """SLOT connected to the quality comboboxes""" if self.update_global_quality: if self.ui.cb_applyToAll.isChecked(): global_quality = self.settings.global_video_quality if not global_quality: global_quality = "ask" else: global_quality = self.getGlobalQuality() if global_quality == "ask": self.ui.rb_all_ask.setChecked(True) elif global_quality == "low": self.ui.rb_all_low_quality.setChecked(True) elif global_quality == "high": self.ui.rb_all_high_quality.setChecked(True) else: self.ui.rb_mixed_quality.setCheckable(True) self.ui.rb_mixed_quality.setChecked(True) def setGlobalQuality(self): """SLOT connected to the QRadioButtons "all ask", "all low" and "all high" """ #if applyToAll is checked, don't alter the values in the comboboxes. if self.ui.cb_applyToAll.isChecked(): return objname = self.sender().objectName() for index, type in enumerate(["ask", "low", "high"]): if type in objname: break #Since we're going to change the index of many comboboxes, #to prevent the method updateGlobalQuality from being called many times, #we use this variable to control it. self.update_global_quality = False self.ui.rb_mixed_quality.setCheckable(False) for i in range(self.ui.tree_quality.topLevelItemCount()): item = self.ui.tree_quality.topLevelItem(i) cb = self.ui.tree_quality.itemWidget(item, 1) cb.setCurrentIndex(index) self.update_global_quality = True def getGlobalQuality(self): """Determines if options are all ask, low, high or other""" total_items = self.ui.tree_quality.topLevelItemCount() count = 0 for i in range(self.ui.tree_quality.topLevelItemCount()): item = self.ui.tree_quality.topLevelItem(i) cb = self.ui.tree_quality.itemWidget(item, 1) count += cb.currentIndex() if count == 0: return "ask" elif count == total_items: return "low" elif count == total_items * 2: return "high" else: return "" def saveSettings(self): """Saves the settings.""" try: self.settings.media_player = self.ui.ledit_player.text() except ValueError: gui_utils.warning(self, self.tr("Media Player"), self.tr("Given media player is not valid")) return 0 self.settings.use_builtin_player = self.ui.cb_builtinPlayer.checkState() self.settings.download_folder = self.ui.edit_folder.text() self.settings.after_download = self.ui.combo_options.currentIndex() self.settings.play_downloaded = self.ui.combo_dc.currentIndex() if self.ui.cb_applyToAll.isChecked(): if self.ui.rb_all_ask.isChecked(): self.settings.global_video_quality = "ask" elif self.ui.rb_all_low_quality.isChecked(): self.settings.global_video_quality = "low" elif self.ui.rb_all_high_quality.isChecked(): self.settings.global_video_quality = "high" elif self.settings.global_video_quality: self.settings.remove("global_video_quality") for i in range(self.ui.tree_quality.topLevelItemCount()): item = self.ui.tree_quality.topLevelItem(i) cb = self.ui.tree_quality.itemWidget(item, 1) self.settings.set_quality(item.text(0), cb.currentIndex()) self.settings.notify_done = self.ui.s_notifyDone.checkState() self.settings.notify_error = self.ui.s_notifyError.checkState() self.settings.check_links_auto = self.ui.cb_checkLinksAuto.checkState() self.settings.sync() if self.settings.global_quality != self.parent.global_quality: self.parent.switchQuality(next=False) self.close() def check_save_url(self): if self.ui.save_url.isChecked(): self.ui.save_url_disk.setEnabled(True) else: if self.ui.save_url_disk.isChecked(): self.ui.save_url_disk.setChecked(False) self.ui.save_url_disk.setDisabled(True) def browseForFile(self): filepath = gui_utils.selectFile(self) if filepath: self.ui.ledit_player.setText(os.path.split(filepath)[1]) def browseFolder(self): """Shows a folder selection dialog and (if the user doesn't cancel it) sets the new destination in the input.""" folder = gui_utils.selectFolder(self, self.ui.edit_folder.text()) if folder: self.ui.edit_folder.setText(folder) def closeEvent(self, e): self.visible = False