Source code for sublime_music.ui.common.spinner_image

import logging
from typing import Optional

from gi.repository import GdkPixbuf, Gtk


[docs]class SpinnerImage(Gtk.Overlay):
[docs] def __init__( self, loading: bool = True, image_name: str | None = None, spinner_name: str | None = None, image_size: int | None = None, **kwargs, ): """An image with a loading overlay.""" Gtk.Overlay.__init__(self) self.image_size = image_size self.filename: Optional[str] = None self.image = Gtk.Image(name=image_name, **kwargs) self.add(self.image) self.spinner = Gtk.Spinner( name=spinner_name, active=loading, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, ) self.add_overlay(self.spinner)
[docs] def set_from_file(self, filename: Optional[str]): """Set the image to the given filename.""" if filename == "": filename = None self.filename = filename if self.image_size is not None and filename: try: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( filename, self.image_size, self.image_size, True ) self.image.set_from_pixbuf(pixbuf) except Exception as e: logging.warn(f"could not load {filename}. Probably not an image. {e}") else: self.image.set_from_file(filename)
[docs] def set_loading(self, loading_status: bool): if loading_status: self.spinner.start() self.spinner.show() else: self.spinner.stop() self.spinner.hide()
[docs] def set_image_size(self, size: int): self.image_size = size self.set_from_file(self.filename)