def dropEvent(self, event: QtGui.QDropEvent): super().dropEvent(event) if event.mimeData().hasFormat("text/uri-list"): pos = QtCore.QRect() pos.setX(int(event.pos().x())) pos.setY(int(event.pos().y())) pos.setWidth(200) # TODO find a better way to set default width db = QtCore.QMimeDatabase() if "image" in db.mimeTypeForUrl(event.mimeData().urls()[0]).name(): image = event.mimeData().urls()[0].url() id = self._next_id("Image") item = PageItem(id, pos, img=image, height_from_width=True) self._add_item(item) elif "application/octet-stream" in db.mimeTypeForUrl( event.mimeData().urls()[0]).name(): # If it's a stream, we need to download it. However, that could be arbitrarily huge # For now, we're going to base the decision on the file extension. url = event.mimeData().urls()[0].url() if url.endswith(".png") or url.endswith( ".jpg") or url.endswith(".jpeg") or url.endswith( ".gif"): id = self._next_id("Image") item = PageItem(id, pos, img=url, height_from_width=True) self._add_item(item) event.accept()
def __init__(self, parent, img_url, width: int, asset_name=None, **extra): super().__init__(parent) self._play_btn = None self._toolbar = None # The name of the asset file once saved to disk self.asset_name = str(uuid.uuid4()) if asset_name is not None: self.asset_name = asset_name # asset URLs, when they are local files, are relative paths, not absolute # for portability reasons. When we are restoring from a saved state. So, we should # set our working directory to the asset directory # URLs for files dragged in should be absolute anyway and not affected. old_wd = getcwd() chdir(settings.asset_dir) data = urlopen(img_url).read() chdir(old_wd) self.setStyleSheet("background: transparent;") orig_pixmap = QtGui.QPixmap() orig_pixmap.loadFromData(data) pixmap = orig_pixmap.scaledToWidth(width) # orig pixmap is an asset that gets saved to disk self._orig_pixmap = orig_pixmap if "transform" in extra: self._rotation = extra['transform']['rotation'] else: self._rotation = 0 self._mimedb = QtCore.QMimeDatabase() if self._mimedb.mimeTypeForData(data).name() == "image/gif": self._mimetype = "GIF" # If this is a qmovie, we need to write the bytes to disk ourselves, the QMovie object doesn't save() self._data = data self.save_asset() movie = QtGui.QMovie(self.asset_file_fq) self._movie = movie self.setMovie(self._movie) self._movie.start() self._playing = True else: self.setPixmap(pixmap) self._mimetype = "PNG"
def __init__(self): super().__init__() self.playButton: QtWidgets.QToolButton self.prevButton: QtWidgets.QToolButton self.nextButton: QtWidgets.QToolButton self.playbackModeButton: QtWidgets.QToolButton self.progressSlider: MyQSlider self.progressLabel: QtWidgets.QLabel self.volumeDial: QtWidgets.QDial self.playlistWidget: QtWidgets.QTableWidget self.lyricWrapper: QtWidgets.QScrollArea self.lyricLabel: MyQLabel self.progressDialog: QtWidgets.QProgressDialog self.myPlaylist: MyPlaylist = MyPlaylist() self.loadPlaylistTask = LoadPlaylistTask() self.musics: List[MusicEntry] = list() self.lyric: Dict[int, str] = dict() self.prevLyricIndex = -1 self.config: Config self.realRow = -1 self.mimeDb = QtCore.QMimeDatabase() self.setupLayout() self.setupEvents() self.setupPlayer()