diff options
author | Anton Khirnov <anton@khirnov.net> | 2020-10-13 13:49:22 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-10-13 13:49:22 +0200 |
commit | ded8496439c0a1bfa2d244470cbd99113b8e84be (patch) | |
tree | f691d38fffadf4c314b615bccff027de5f14d970 /nephilim/plugins | |
parent | 56b63e7929bc9a2b74535107e7a9bb5f317bacc1 (diff) |
Port to PyQt5.
Diffstat (limited to 'nephilim/plugins')
-rw-r--r-- | nephilim/plugins/AlbumCover.py | 52 | ||||
-rw-r--r-- | nephilim/plugins/Filebrowser.py | 22 | ||||
-rw-r--r-- | nephilim/plugins/Library.py | 30 | ||||
-rw-r--r-- | nephilim/plugins/Lyrics.py | 55 | ||||
-rw-r--r-- | nephilim/plugins/Notify.py | 24 | ||||
-rw-r--r-- | nephilim/plugins/PlayControl.py | 18 | ||||
-rw-r--r-- | nephilim/plugins/Playlist.py | 32 | ||||
-rw-r--r-- | nephilim/plugins/Songinfo.py | 30 | ||||
-rw-r--r-- | nephilim/plugins/Systray.py | 10 |
9 files changed, 143 insertions, 130 deletions
diff --git a/nephilim/plugins/AlbumCover.py b/nephilim/plugins/AlbumCover.py index b4302bc..c576c56 100644 --- a/nephilim/plugins/AlbumCover.py +++ b/nephilim/plugins/AlbumCover.py @@ -15,8 +15,8 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore, QtNetwork -from PyQt4.QtCore import pyqtSignal as Signal +from PyQt5 import QtGui, QtWidgets, QtCore, QtNetwork +from PyQt5.QtCore import pyqtSignal as Signal import os @@ -24,7 +24,7 @@ from ..plugin import Plugin from .. import common, metadata_fetcher, song from .. import icons -class AlbumCoverWidget(QtGui.QLabel): +class AlbumCoverWidget(QtWidgets.QLabel): "cover - QPixmap or None" cover = None "is there a (non-default) cover loaded?" @@ -37,13 +37,13 @@ class AlbumCoverWidget(QtGui.QLabel): _menu = None # popup menu def __init__(self, plugin): - QtGui.QLabel.__init__(self) + QtWidgets.QLabel.__init__(self) self.plugin = plugin self.logger = plugin.logger self.setAlignment(QtCore.Qt.AlignCenter) # popup menu - self._menu = QtGui.QMenu('album') + self._menu = QtWidgets.QMenu('album') self._menu.addAction('&Select cover file...', self.plugin.select_cover) self._menu.addAction('&Refresh cover.', self.plugin.refresh) self._menu.addAction('&View in a separate window.', self.__view_cover) @@ -76,7 +76,7 @@ class AlbumCoverWidget(QtGui.QLabel): def __view_cover(self): if not self.cover_loaded: return - win = QtGui.QLabel(self, QtCore.Qt.Window) + win = QtWidgets.QLabel(self, QtCore.Qt.Window) win.setScaledContents(True) win.setPixmap(self.cover) win.show() @@ -85,7 +85,7 @@ class AlbumCoverWidget(QtGui.QLabel): if not self.cover_loaded: return cover = self.cover - file = QtGui.QFileDialog.getSaveFileName(None, '', QtCore.QDir.homePath()) + file = QtWidgets.QFileDialog.getSaveFileName(None, '', QtCore.QDir.homePath()) if file: self.plugin.save_cover_file(cover, file) @@ -155,44 +155,44 @@ class AlbumCover(Plugin): self.settings.beginGroup(self.plugin.name) # store covers groupbox - self.store = QtGui.QGroupBox('Store covers.') + self.store = QtWidgets.QGroupBox('Store covers.') self.store.setToolTip('Should %s store its own copy of covers?'%common.APPNAME) self.store.setCheckable(True) self.store.setChecked(int(self.settings.value('store'))) - self.store.setLayout(QtGui.QGridLayout()) + self.store.setLayout(QtWidgets.QGridLayout()) # paths to covers - self.coverdir = QtGui.QLineEdit(self.settings.value('coverdir')) + self.coverdir = QtWidgets.QLineEdit(self.settings.value('coverdir')) self.coverdir.setToolTip('Where should %s store covers.\n' '${musicdir} will be expanded to path to MPD music library (as set by user)\n' '${songdir} will be expanded to path to the song (relative to ${musicdir}\n' 'other tags same as in covername' %common.APPNAME) - self.covername = QtGui.QLineEdit(self.settings.value('covername')) + self.covername = QtWidgets.QLineEdit(self.settings.value('covername')) self.covername.setToolTip('Filename for %s cover files.\n' 'All tags supported by MPD will be expanded to their\n' 'values for current song, e.g. ${title}, ${track}, ${artist},\n' '${album}, ${genre} etc.'%common.APPNAME) - self.store.layout().addWidget(QtGui.QLabel('Cover directory'), 0, 0) + self.store.layout().addWidget(QtWidgets.QLabel('Cover directory'), 0, 0) self.store.layout().addWidget(self.coverdir, 0, 1) - self.store.layout().addWidget(QtGui.QLabel('Cover filename'), 1, 0) + self.store.layout().addWidget(QtWidgets.QLabel('Cover filename'), 1, 0) self.store.layout().addWidget(self.covername, 1, 1) # sites list fetchers = self.settings.value('fetchers') - self.fetcherlist = QtGui.QListWidget(self) + self.fetcherlist = QtWidgets.QListWidget(self) self.fetcherlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) for site in fetchers: - it = QtGui.QListWidgetItem(site) + it = QtWidgets.QListWidgetItem(site) it.setCheckState(QtCore.Qt.Checked) self.fetcherlist.addItem(it) for site in self.plugin.available_fetchers: if not site.name in fetchers: - it = QtGui.QListWidgetItem(site.name) + it = QtWidgets.QListWidgetItem(site.name) it.setCheckState(QtCore.Qt.Unchecked) self.fetcherlist.addItem(it) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self.layout().addWidget(self.store) self._add_widget(self.fetcherlist, label = 'Fetchers', tooltip = 'A list of sources used for fetching covers.\n' 'Use drag and drop to change their priority.') @@ -290,7 +290,7 @@ class AlbumCover(Plugin): return self.__abort_fetch() - file = QtGui.QFileDialog.getOpenFileName(None, + file = QtWidgets.QFileDialog.getOpenFileName(None, 'Select album cover for %s - %s'%(song['?artist'], song['?album']), self.__cover_dir, '') if not file: @@ -323,12 +323,16 @@ class FetcherLastfm(metadata_fetcher.MetadataFetcher): self.song = song if not 'artist' in song or not 'album' in song: return self.finish() + + query = QtCore.QUrlQuery() + query.setQueryItems([('api_key', 'beedb2a8a0178b8059cd6c7e57fbe428'), + ('method', 'album.getInfo'), + ('artist', song['artist']), + ('album', song['album']), + ('mbid', song['?MUSICBRAINZ_ALBUMID'])]) url = QtCore.QUrl('http://ws.audioscrobbler.com/2.0/') - url.setQueryItems([('api_key', 'beedb2a8a0178b8059cd6c7e57fbe428'), - ('method', 'album.getInfo'), - ('artist', song['artist']), - ('album', song['album']), - ('mbid', song['?MUSICBRAINZ_ALBUMID'])]) + url.setQuery(query) + self.fetch2(song, url) self.rep.finished.connect(self.__handle_search_res) @@ -342,7 +346,7 @@ class FetcherLastfm(metadata_fetcher.MetadataFetcher): if xml.name() == 'image' and xml.attributes().value('size') == 'extralarge': url = QtCore.QUrl() # the url is already percent-encoded try: - url.setEncodedUrl(xml.readElementText()) + url.setUrl(xml.readElementText()) except TypeError: #no text url = None if xml.hasError(): diff --git a/nephilim/plugins/Filebrowser.py b/nephilim/plugins/Filebrowser.py index cb0a6e7..f9b07f6 100644 --- a/nephilim/plugins/Filebrowser.py +++ b/nephilim/plugins/Filebrowser.py @@ -15,7 +15,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtWidgets, QtCore import os import shutil @@ -36,29 +36,29 @@ class Filebrowser(Plugin): def _get_dock_widget(self): return self._create_dock(self.o) -class wgFilebrowser(QtGui.QWidget): +class wgFilebrowser(QtWidgets.QWidget): view = None model = None path = None plugin = None logger = None - class FileView(QtGui.QListView): + class FileView(QtWidgets.QListView): "context menu" menu = None plugin = None logger = None def __init__(self, model, plugin): - QtGui.QListView.__init__(self) + QtWidgets.QListView.__init__(self) self.plugin = plugin self.logger = plugin.logger self.setModel(model) self.setRootIndex(self.model().index(os.path.expanduser('~'))) - self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection) + self.setSelectionMode(QtWidgets.QTreeWidget.ExtendedSelection) - self.menu = QtGui.QMenu('file') + self.menu = QtWidgets.QMenu('file') self.menu.addAction('&Make file(s) readable for MPD.', self.selection_make_readable) self.menu.addAction('***EXPERIMENTAL DON\'T USE*** &Copy to collection.', self.selection_copy_to_collection) @@ -103,23 +103,23 @@ class wgFilebrowser(QtGui.QWidget): def __init__(self, plugin): - QtGui.QWidget.__init__(self) + QtWidgets.QWidget.__init__(self) self.plugin = plugin self.logger = plugin.logger - self.model = QtGui.QDirModel() + self.model = QtWidgets.QDirModel() self.model.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.AllEntries) self.model.setSorting(QtCore.QDir.DirsFirst) self.view = self.FileView(self.model, self.plugin) self.view.activated.connect(self.item_activated) - self.path = QtGui.QLineEdit(self.model.filePath(self.view.rootIndex())) + self.path = QtWidgets.QLineEdit(self.model.filePath(self.view.rootIndex())) self.path.returnPressed.connect(self.path_changed) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self.layout().setSpacing(0) - self.layout().setMargin(0) + self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.path) self.layout().addWidget(self.view) diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py index 3aa49f9..6f2aad9 100644 --- a/nephilim/plugins/Library.py +++ b/nephilim/plugins/Library.py @@ -15,8 +15,8 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore -from PyQt4.QtCore import pyqtSlot as Slot +from PyQt5 import QtGui, QtWidgets, QtCore +from PyQt5.QtCore import pyqtSlot as Slot from ..plugin import Plugin from ..common import MIMETYPES, SongsMimeData @@ -44,7 +44,7 @@ class Library(Plugin): return self.o.fill_library() -class LibraryWidget(QtGui.QWidget): +class LibraryWidget(QtWidgets.QWidget): library_view = None library_model = None search_txt = None @@ -57,7 +57,8 @@ class LibraryWidget(QtGui.QWidget): def __init__(self, plugin): - QtGui.QWidget.__init__(self) + QtWidgets.QWidget.__init__(self) + self.plugin = plugin self.logger = plugin.logger self.settings = QtCore.QSettings() @@ -68,14 +69,14 @@ class LibraryWidget(QtGui.QWidget): # folding widgets self.foldings = LibraryFolding(self.plugin, self) self.foldings.activated.connect(self.fill_library) - del_folding = QtGui.QPushButton(QtGui.QIcon(':icons/delete.png'), '') + del_folding = QtWidgets.QPushButton(QtGui.QIcon(':icons/delete.png'), '') del_folding.setToolTip('Delete current folding pattern.') del_folding.clicked.connect(lambda :self.foldings.removeItem(self.foldings.currentIndex())) - folding_layout = QtGui.QHBoxLayout() + folding_layout = QtWidgets.QHBoxLayout() folding_layout.addWidget(self.foldings, stretch = 1) folding_layout.addWidget(del_folding) - self.search_txt = QtGui.QLineEdit() + self.search_txt = QtWidgets.QLineEdit() self.search_txt.setToolTip('Filter library') self.search_txt.textChanged.connect(self.filter_library) self.search_txt.returnPressed.connect(self.add_filtered) @@ -88,9 +89,9 @@ class LibraryWidget(QtGui.QWidget): self.library_view.setModel(self.library_model) self.library_view.activated.connect(lambda : self.add_indices(self.library_view.selectedIndexes())) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self.layout().setSpacing(2) - self.layout().setMargin(0) + self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addLayout(folding_layout) self.layout().addWidget(self.search_txt) self.layout().addWidget(self.library_view) @@ -216,17 +217,17 @@ class LibraryModel(QtGui.QStandardItemModel): data.set_songs(songs) return data -class LibraryView(QtGui.QTreeView): +class LibraryView(QtWidgets.QTreeView): def __init__(self): - QtGui.QTreeView.__init__(self) + QtWidgets.QTreeView.__init__(self) self.setAlternatingRowColors(True) - self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) self.setUniformRowHeights(True) self.setHeaderHidden(True) self.setDragEnabled(True) -class LibraryFolding(QtGui.QComboBox): +class LibraryFolding(QtWidgets.QComboBox): #### PRIVATE #### _plugin = None @@ -235,7 +236,8 @@ class LibraryFolding(QtGui.QComboBox): #### PUBLIC #### def __init__(self, plugin, parent): - QtGui.QComboBox.__init__(self, parent) + QtWidgets.QComboBox.__init__(self) + self.setEditable(True) self.setToolTip('Current folding pattern.') diff --git a/nephilim/plugins/Lyrics.py b/nephilim/plugins/Lyrics.py index 35bb477..b569094 100644 --- a/nephilim/plugins/Lyrics.py +++ b/nephilim/plugins/Lyrics.py @@ -15,7 +15,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore, QtNetwork +from PyQt5 import QtGui, QtWidgets, QtCore, QtNetwork import os import re @@ -25,7 +25,7 @@ from ..plugin import Plugin from .. import common, metadata_fetcher from .. import icons -class LyricsWidget(QtGui.QWidget): +class LyricsWidget(QtWidgets.QWidget): #public lyrics_loaded = None @@ -40,20 +40,20 @@ class LyricsWidget(QtGui.QWidget): #### private def __init__(self, plugin): - QtGui.QWidget.__init__(self) + QtWidgets.QWidget.__init__(self) self.plugin = plugin self.logger = plugin.logger self.curLyrics = '' - self.__label = QtGui.QLabel(self) + self.__label = QtWidgets.QLabel(self) self.__label.setWordWrap(True) # add text area - self.__text_view = QtGui.QTextEdit(self) + self.__text_view = QtWidgets.QTextEdit(self) self.__text_view.setReadOnly(True) # add toolbar - self.__toolbar = QtGui.QToolBar('Lyrics toolbar', self) + self.__toolbar = QtWidgets.QToolBar('Lyrics toolbar', self) self.__toolbar.setOrientation(QtCore.Qt.Vertical) self.__toolbar.addAction(QtGui.QIcon(':icons/refresh.png'), 'Refresh lyrics', self.plugin.refresh) @@ -64,9 +64,9 @@ class LyricsWidget(QtGui.QWidget): self.__toolbar.addAction(QtGui.QIcon(':icons/save.png'), 'Save lyrics', self.__save_lyrics) self.__toolbar.addAction(QtGui.QIcon(':icons/delete.png'), 'Delete stored file', self.plugin.del_lyrics_file) - self.setLayout(QtGui.QGridLayout()) + self.setLayout(QtWidgets.QGridLayout()) self.layout().setSpacing(0) - self.layout().setMargin(0) + self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.__toolbar, 0, 0, -1, 1, QtCore.Qt.AlignTop) self.layout().addWidget(self.__label, 0, 1) self.layout().addWidget(self.__text_view, 1, 1) @@ -155,44 +155,44 @@ class Lyrics(Plugin): # store lyrics groupbox - self.store = QtGui.QGroupBox('Store lyrics.') + self.store = QtWidgets.QGroupBox('Store lyrics.') self.store.setToolTip('Should %s store its own copy of lyrics?'%common.APPNAME) self.store.setCheckable(True) self.store.setChecked(int(self.settings.value('store'))) - self.store.setLayout(QtGui.QGridLayout()) + self.store.setLayout(QtWidgets.QGridLayout()) # paths to lyrics - self.lyricdir = QtGui.QLineEdit(self.settings.value('lyricdir')) + self.lyricdir = QtWidgets.QLineEdit(self.settings.value('lyricdir')) self.lyricdir.setToolTip('Where should %s store lyrics.\n' '${musicdir} will be expanded to path to MPD music library (as set by user)\n' '${songdir} will be expanded to path to the song (relative to ${musicdir}\n' 'other tags same as in lyricname' %common.APPNAME) - self.lyricname = QtGui.QLineEdit(self.settings.value('lyricname')) + self.lyricname = QtWidgets.QLineEdit(self.settings.value('lyricname')) self.lyricname.setToolTip('Filename for %s lyricsfiles.\n' 'All tags supported by MPD will be expanded to their\n' 'values for current song, e.g. ${title}, ${track}, ${artist},\n' '${album}, ${genre} etc.'%common.APPNAME) - self.store.layout().addWidget(QtGui.QLabel('Lyrics directory'), 0, 0) + self.store.layout().addWidget(QtWidgets.QLabel('Lyrics directory'), 0, 0) self.store.layout().addWidget(self.lyricdir, 0, 1) - self.store.layout().addWidget(QtGui.QLabel('Lyrics filename'), 1, 0) + self.store.layout().addWidget(QtWidgets.QLabel('Lyrics filename'), 1, 0) self.store.layout().addWidget(self.lyricname, 1, 1) # fetchers list fetchers = self.settings.value('fetchers') - self.fetcherlist = QtGui.QListWidget(self) - self.fetcherlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) + self.fetcherlist = QtWidgets.QListWidget(self) + self.fetcherlist.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) for fetcher in fetchers: - it = QtGui.QListWidgetItem(fetcher) + it = QtWidgets.QListWidgetItem(fetcher) it.setCheckState(QtCore.Qt.Checked) self.fetcherlist.addItem(it) for fetcher in self.plugin.available_fetchers: if not fetcher.name in fetchers: - it = QtGui.QListWidgetItem(fetcher.name) + it = QtWidgets.QListWidgetItem(fetcher.name) it.setCheckState(QtCore.Qt.Unchecked) self.fetcherlist.addItem(it) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self.layout().addWidget(self.store) self._add_widget(self.fetcherlist, label = 'Sites', tooltip = 'A list of sources used for fetching lyrics.\n' 'Use drag and drop to change their priority.') @@ -308,9 +308,12 @@ class FetchLyricwiki(metadata_fetcher.MetadataFetcher): __apiaddress = 'http://lyrics.wikia.com/api.php' def fetch(self, song): + query = QtCore.QUrlQuery() + query.setQueryItems([('func', 'getArtist'), ('artist', song['?artist']), + ('fmt', 'xml'), ('action', 'lyrics')]) + url = QtCore.QUrl(self.__apiaddress) - url.setQueryItems([('func', 'getArtist'), ('artist', song['?artist']), - ('fmt', 'xml'), ('action', 'lyrics')]) + url.setQuery(query) self.fetch2(song, url) self.rep.finished.connect(self.__handle_artist_res) @@ -328,9 +331,11 @@ class FetchLyricwiki(metadata_fetcher.MetadataFetcher): return self.finish() self.logger.info('Found artist: %s'%artist) + query = QtCore.QUrlQuery() + query.setQueryItems([('action', 'lyrics'), ('func', 'getSong'), ('artist', artist), + ('song', self.song['?title']), ('fmt', 'xml')]) url = QtCore.QUrl(self.__apiaddress) - url.setQueryItems([('action', 'lyrics'), ('func', 'getSong'), ('artist', artist), - ('song', self.song['?title']), ('fmt', 'xml')]) + url.setQuery(query) self.rep = self.nam.get(QtNetwork.QNetworkRequest(url)) self.rep.finished.connect(self.__handle_search_res) self.rep.error.connect(self.handle_error) @@ -370,8 +375,10 @@ class FetchAnimelyrics(metadata_fetcher.MetadataFetcher): name = 'Animelyrics' def fetch(self, song): + query = QtCore.QUrlQuery() + query.setQueryItems([('t', 'performer'), ('q', song['?artist'])]) url = QtCore.QUrl('http://www.animelyrics.com/search.php') - url.setQueryItems([('t', 'performer'), ('q', song['?artist'])]) + url.setQuery(query) self.fetch2(song, url) self.rep.finished.connect(self.__handle_search_res) diff --git a/nephilim/plugins/Notify.py b/nephilim/plugins/Notify.py index bb01aab..6ac0be3 100644 --- a/nephilim/plugins/Notify.py +++ b/nephilim/plugins/Notify.py @@ -16,7 +16,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtGui, QtWidgets, QtCore from ..common import sec2min, APPNAME, expand_tags from ..plugin import Plugin @@ -25,7 +25,7 @@ from .. import plugins NOTIFY_PRIORITY_SONG = 1 NOTIFY_PRIORITY_VOLUME = 2 -class winNotify(QtGui.QWidget): +class winNotify(QtWidgets.QWidget): parent = None p = None @@ -36,7 +36,7 @@ class winNotify(QtGui.QWidget): text_label = None def __init__(self, p): - QtGui.QWidget.__init__(self, p.parent()) + QtWidgets.QWidget.__init__(self, p.parent()) self.p = p self.parent = p.parent() @@ -44,12 +44,12 @@ class winNotify(QtGui.QWidget): self.timer.setSingleShot(True) self.timer.timeout.connect(self._hide) - layout = QtGui.QHBoxLayout() - self.cover_label = QtGui.QLabel() - self.text_label = QtGui.QLabel() + layout = QtWidgets.QHBoxLayout() + self.cover_label = QtWidgets.QLabel() + self.text_label = QtWidgets.QLabel() self.text_label.setWordWrap(True) - self.setLayout(QtGui.QHBoxLayout()) + self.setLayout(QtWidgets.QHBoxLayout()) self.layout().addWidget(self.cover_label) self.layout().addWidget(self.text_label) @@ -60,7 +60,7 @@ class winNotify(QtGui.QWidget): font.setPixelSize(20) self.setFont(font) - ac = QtGui.QApplication.instance().plugins.plugin('AlbumCover') + ac = QtWidgets.QApplication.instance().plugins.plugin('AlbumCover') if ac: ac.cover_changed.connect(self.on_cover_changed) @@ -91,7 +91,7 @@ class winNotify(QtGui.QWidget): self._current_priority = -1 def centerH(self): - screen = QtGui.QDesktopWidget().screenGeometry() + screen = QtWidgets.QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width()-size.width())/2, 100) @@ -142,12 +142,12 @@ class Notify(Plugin): Plugin.SettingsWidget.__init__(self, plugin) self.settings.beginGroup(self.plugin.name) - self.format = QtGui.QLineEdit(self.settings.value('songformat')) + self.format = QtWidgets.QLineEdit(self.settings.value('songformat')) - self.timer = QtGui.QLineEdit(self.settings.value('timer')) + self.timer = QtWidgets.QLineEdit(self.settings.value('timer')) self.timer.setValidator(QtGui.QIntValidator(self.timer)) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self._add_widget(self.format, 'Format', 'Format of notifications. All tags supported by MPD\n' 'will be expanded to their values for current song,\n' 'e.g. ${track}, ${title}, ${artist}, ${album}, ${length}, ${date}, etc.') diff --git a/nephilim/plugins/PlayControl.py b/nephilim/plugins/PlayControl.py index 4bba711..c7bafa3 100644 --- a/nephilim/plugins/PlayControl.py +++ b/nephilim/plugins/PlayControl.py @@ -15,13 +15,13 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtGui, QtWidgets, QtCore from ..common import Button from ..plugin import Plugin from .. import icons -class wgPlayControl(QtGui.QToolBar): +class wgPlayControl(QtWidgets.QToolBar): """Displays controls for interacting with playing, like play, volume ...""" " control buttons" play_icon = None @@ -40,10 +40,10 @@ class wgPlayControl(QtGui.QToolBar): logger = None xfade = None - class VolumeSlider(QtGui.QSlider): + class VolumeSlider(QtWidgets.QSlider): def __init__(self, parent): - QtGui.QSlider.__init__(self, parent) + QtWidgets.QSlider.__init__(self, parent) self.setOrientation(parent.orientation()) self.setMaximum(100) self.setToolTip('Volume control') @@ -62,7 +62,7 @@ class wgPlayControl(QtGui.QToolBar): painter.fillRect(rect, QtGui.QBrush(grad)) def __init__(self, p, parent = None): - QtGui.QToolBar.__init__(self, p.name, parent) + QtWidgets.QToolBar.__init__(self, p.name, parent) self.setMovable(True) self.p = p self.logger = p.logger @@ -109,14 +109,14 @@ class wgPlayControl(QtGui.QToolBar): self.p.mpclient.consume_changed.connect(self.consume.setChecked) self.consume.toggled.connect(self.p.mpclient.consume) - self.xfade = QtGui.QSpinBox(self) + self.xfade = QtWidgets.QSpinBox(self) self.xfade.setValue(self.p.mpclient.status['xfade']) self.p.mpclient.crossfade_changed.connect(self.xfade.setValue) self.xfade.valueChanged.connect(self.p.mpclient.crossfade) self.xfade.setToolTip('Set crossfade between songs in seconds.') self.addWidget(self.xfade) - self.outputs_menu = QtGui.QMenu('Audio outputs') + self.outputs_menu = QtWidgets.QMenu('Audio outputs') outputs = self.addAction(QtGui.QIcon(':icons/outputs.png'), 'Audio outputs') outputs.triggered.connect(lambda : self.outputs_menu.popup(QtGui.QCursor.pos())) self.__update_outputs() @@ -181,7 +181,7 @@ class PlayControl(Plugin): def _load(self): self.o = wgPlayControl(self, None) - QtGui.QApplication.instance().main_win.addToolBar(QtCore.Qt.TopToolBarArea, self.o) + QtWidgets.QApplication.instance().main_win.addToolBar(QtCore.Qt.TopToolBarArea, self.o) def _unload(self): - QtGui.QApplication.instance().main_win.removeToolBar(self.o) + QtWidgets.QApplication.instance().main_win.removeToolBar(self.o) self.o = None diff --git a/nephilim/plugins/Playlist.py b/nephilim/plugins/Playlist.py index d7a2f4e..a3373a1 100644 --- a/nephilim/plugins/Playlist.py +++ b/nephilim/plugins/Playlist.py @@ -15,7 +15,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtGui, QtWidgets, QtCore from ..plugin import Plugin from ..common import MIMETYPES, SongsMimeData @@ -39,39 +39,39 @@ class Playlist(Plugin): def _get_dock_widget(self): return self._create_dock(self.o) -class PlaylistWidget(QtGui.QWidget): +class PlaylistWidget(QtWidgets.QWidget): plugin = None playlist = None toolbar = None def __init__(self, plugin): - QtGui.QWidget.__init__(self) + QtWidgets.QWidget.__init__(self) self.plugin = plugin self.playlist = PlaylistTree(self.plugin) - self.toolbar = QtGui.QToolBar(self.plugin.name + ' toolbar', self) + self.toolbar = QtWidgets.QToolBar(self.plugin.name + ' toolbar', self) self.toolbar.addAction(QtGui.QIcon(':icons/shuffle.png'), 'Shuffle current playlist.', self.plugin.mpclient.shuffle) self.toolbar.addAction(QtGui.QIcon(':icons/delete.png'), 'Clear current playlist.', self.plugin.mpclient.clear) add_url = PlaylistAddURL(self.plugin.mpclient, self) add_url.setToolTip('Add an URL to current playlist.') self.toolbar.addWidget(add_url) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self.layout().setSpacing(0) - self.layout().setMargin(0) + self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.toolbar) self.layout().addWidget(self.playlist) self.plugin.mpclient.playlist(self.playlist.fill) -class PlaylistAddURL(QtGui.QLineEdit): +class PlaylistAddURL(QtWidgets.QLineEdit): ### PRIVATE #### _mpclient = None def __init__(self, mpclient, parent = None): - QtGui.QLineEdit.__init__(self, parent) + QtWidgets.QLineEdit.__init__(self, parent) self._mpclient = mpclient self.returnPressed.connect(self._return_pressed) @@ -79,7 +79,7 @@ class PlaylistAddURL(QtGui.QLineEdit): self._mpclient.add([self.text()]) self.clear() -class PlaylistTree(QtGui.QTreeWidget): +class PlaylistTree(QtWidgets.QTreeWidget): plugin = None ### PRIVATE ### @@ -91,17 +91,17 @@ class PlaylistTree(QtGui.QTreeWidget): _cur_song = None def __init__(self, plugin): - QtGui.QTreeWidget.__init__(self) + QtWidgets.QTreeWidget.__init__(self) self.plugin = plugin - self.setSelectionMode(QtGui.QTreeWidget.ExtendedSelection) + self.setSelectionMode(QtWidgets.QTreeWidget.ExtendedSelection) self.setAlternatingRowColors(True) self.setRootIsDecorated(False) # drag&drop self.viewport().setAcceptDrops(True) self.setDropIndicatorShown(True) - self.setDragDropMode(QtGui.QAbstractItemView.DragDrop) + self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) columns = self.plugin.settings.value(self.plugin.name + '/columns') self.setColumnCount(len(columns)) @@ -109,7 +109,7 @@ class PlaylistTree(QtGui.QTreeWidget): self.header().restoreState(self.plugin.settings.value(self.plugin.name + '/header_state')) # menu - self._menu = QtGui.QMenu() + self._menu = QtWidgets.QMenu() self._same_menu = self._menu.addMenu('Add same...') self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(self._show_context_menu) @@ -158,7 +158,7 @@ class PlaylistTree(QtGui.QTreeWidget): self.plugin.mpclient.delete(ids) else: - QtGui.QTreeWidget.keyPressEvent(self, event) + QtWidgets.QTreeWidget.keyPressEvent(self, event) def mimeData(self, items): data = SongsMimeData() @@ -202,12 +202,12 @@ class PlaylistTree(QtGui.QTreeWidget): return self._menu.popup(self.mapToGlobal(pos)) -class PlaylistSongItem(QtGui.QTreeWidgetItem): +class PlaylistSongItem(QtWidgets.QTreeWidgetItem): ### PUBLIC ### song = None def __init__(self, song): - QtGui.QTreeWidgetItem.__init__(self) + QtWidgets.QTreeWidgetItem.__init__(self) self.song = song def set_current(self, val): diff --git a/nephilim/plugins/Songinfo.py b/nephilim/plugins/Songinfo.py index 88496f6..d0d8ced 100644 --- a/nephilim/plugins/Songinfo.py +++ b/nephilim/plugins/Songinfo.py @@ -15,7 +15,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtGui, QtWidgets, QtCore from ..plugin import Plugin @@ -71,7 +71,7 @@ class Songinfo(Plugin): self.o.set_metadata(metadata) self.mpclient.sticker_list(song['file'], self.o.set_stickers) -class SonginfoWidget(QtGui.QWidget): +class SonginfoWidget(QtWidgets.QWidget): #### PUBLIC #### "parent plugin" @@ -84,16 +84,16 @@ class SonginfoWidget(QtGui.QWidget): #### PUBLIC #### def __init__(self, plugin): - QtGui.QWidget.__init__(self) + QtWidgets.QWidget.__init__(self) self.plugin = plugin self._labels = {} - self._st_label = QtGui.QLabel('<b>Stickers:</b>', self) + self._st_label = QtWidgets.QLabel('<b>Stickers:</b>', self) self._st_label.setAlignment(QtCore.Qt.AlignHCenter) self._stickers = StickersList(self.plugin.mpclient, self) - self.setLayout(QtGui.QGridLayout()) + self.setLayout(QtWidgets.QGridLayout()) self.layout().setColumnStretch(1, 1) def set_tagtypes(self, tagtypes): @@ -113,8 +113,8 @@ class SonginfoWidget(QtGui.QWidget): self.layout().removeWidget(self._stickers) for tag in tagtypes: - label = QtGui.QLabel('<b>%s</b>'%tag) #TODO sort known tags - label1 = QtGui.QLabel() # tag value will go here + label = QtWidgets.QLabel('<b>%s</b>'%tag) #TODO sort known tags + label1 = QtWidgets.QLabel() # tag value will go here label1.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) label.setWordWrap(True) label1.setWordWrap(True) @@ -148,12 +148,12 @@ class SettingsWidgetSonginfo(Plugin.SettingsWidget): Plugin.SettingsWidget.__init__(self, plugin) self.settings.beginGroup(self.plugin.name) - self._taglist = QtGui.QListWidget(self) - self._taglist.setDragDropMode(QtGui.QAbstractItemView.InternalMove) + self._taglist = QtWidgets.QListWidget(self) + self._taglist.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) self._update_tags() self.plugin.mpclient.connect_changed.connect(self._update_tags) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self._add_widget(self._taglist, label = 'Tags', tooltip = 'A list of tags that should be displayed.\n' 'Use drag and drop to change their order') @@ -181,21 +181,21 @@ class SettingsWidgetSonginfo(Plugin.SettingsWidget): tags_enabled = self.settings.value('tagtypes') tags = self.plugin.mpclient.tagtypes for tag in [tag for tag in tags_enabled if tag in tags]: - it = QtGui.QListWidgetItem(tag) + it = QtWidgets.QListWidgetItem(tag) it.setCheckState(QtCore.Qt.Checked) self._taglist.addItem(it) for tag in [tag for tag in tags if tag not in tags_enabled]: - it = QtGui.QListWidgetItem(tag) + it = QtWidgets.QListWidgetItem(tag) it.setCheckState(QtCore.Qt.Unchecked) self._taglist.addItem(it) -class StickersList(QtGui.QTreeWidget): +class StickersList(QtWidgets.QTreeWidget): #### PUBLIC #### mpclient = None def __init__(self, mpclient, parent): - QtGui.QTreeWidget.__init__(self, parent) + QtWidgets.QTreeWidget.__init__(self, parent) self.mpclient = mpclient self.setAlternatingRowColors(True) @@ -207,5 +207,5 @@ class StickersList(QtGui.QTreeWidget): """Set displayed stickers from a (key, value) iterator.""" self.clear() for key, value in stickers: - it = QtGui.QTreeWidgetItem([key, value]) + it = QtWidgets.QTreeWidgetItem([key, value]) self.addTopLevelItem(it) diff --git a/nephilim/plugins/Systray.py b/nephilim/plugins/Systray.py index 2411309..749a0c6 100644 --- a/nephilim/plugins/Systray.py +++ b/nephilim/plugins/Systray.py @@ -16,7 +16,7 @@ # along with Nephilim. If not, see <http://www.gnu.org/licenses/>. # -from PyQt4 import QtGui, QtCore +from PyQt5 import QtGui, QtWidgets, QtCore from ..plugin import Plugin from ..common import sec2min, APPNAME, appIcon, expand_tags @@ -40,14 +40,14 @@ class Systray(Plugin): """This class listens for systray-wheel events""" def eventFilter(self, object, event): if type(event)==QtGui.QWheelEvent: - numDegrees=event.delta() / 8 + numDegrees=event.angleDelta().y() / 8 numSteps=5*numDegrees/15 self.plugin.mpclient.set_volume(self.plugin.mpclient.status['volume'] + numSteps) event.accept() return True return False - self.o = QtGui.QSystemTrayIcon(QtGui.QIcon(appIcon), self.parent()) + self.o = QtWidgets.QSystemTrayIcon(QtGui.QIcon(appIcon), self.parent()) self.eventObj=SystrayWheelEventObject() self.eventObj.plugin = self self.o.installEventFilter(self.eventObj) @@ -99,9 +99,9 @@ class Systray(Plugin): def __init__(self, plugin): Plugin.SettingsWidget.__init__(self, plugin) - self.format = QtGui.QLineEdit(self.settings.value(self.plugin.name + '/format')) + self.format = QtWidgets.QLineEdit(self.settings.value(self.plugin.name + '/format')) - self.setLayout(QtGui.QVBoxLayout()) + self.setLayout(QtWidgets.QVBoxLayout()) self._add_widget(self.format, 'Tooltip format') def save_settings(self): |