package io.gitlab.jfronny.inceptum.gtk.control; import io.github.jwharm.javagi.Ownership; import io.gitlab.jfronny.inceptum.launcher.system.instance.Instance; import org.gtk.gobject.GObject; import org.gtk.gobject.TypeInstance; import org.gtk.gtk.Image; import org.gtk.gtk.Spinner; import org.gtk.gtk.Stack; import java.lang.foreign.Addressable; public class InstanceThumbnail extends Stack { private static final String SPINNER = "spinner"; private static final String IMAGE = "image"; private static final String GENERIC = "generic"; private InstanceThumbnail(Addressable address, Ownership ownership) { super(address, ownership); } public static InstanceThumbnail castFrom(org.gtk.gobject.GiObject gobject) { if (GObject.typeCheckInstanceIsA(TypeInstance.fromAddress.marshal(gobject.handle(), Ownership.NONE), Stack.getType())) { return new InstanceThumbnail(gobject.handle(), gobject.yieldOwnership()); } else { throw new ClassCastException("Object type is not an instance of GtkStack"); } } public InstanceThumbnail() { super(); var spinner = new Spinner(); var image = new Image(); var generic = new Image(); spinner.name = SPINNER; image.name = IMAGE; generic.name = GENERIC; generic.setFromIconName("media-playback-start-symbolic"); //TODO better default icon addNamed(spinner, SPINNER); addNamed(image, IMAGE); addNamed(generic, GENERIC); } public void bind(Instance entry) { var spinner = Spinner.castFrom(getChildByName(SPINNER)); var image = Image.castFrom(getChildByName(IMAGE)); //TODO var generic = Image.castFrom(getChildByName(GENERIC)); //TODO mark instance being played if (entry.isSetupLocked) { visibleChild = spinner; } else if (false) { // if the instance has an image, load the image data and set it as the visible child visibleChild = image; } else { visibleChild = generic; } } }