package io.gitlab.jfronny.inceptum.gtk.control; import io.gitlab.jfronny.inceptum.gtk.util.ListIndexItem; import org.gnome.adw.ActionRow; import org.gtk.gtk.*; import io.gitlab.jfronny.inceptum.common.Utils; import io.gitlab.jfronny.inceptum.gtk.GtkMenubar; import io.gitlab.jfronny.inceptum.gtk.util.I18n; import io.gitlab.jfronny.inceptum.launcher.system.instance.Instance; import java.util.List; public class InstanceListEntryFactory extends SignalListItemFactory { public InstanceListEntryFactory(List instanceList) { super(); onSetup(item -> { var thumbnail = new InstanceThumbnail(); thumbnail.name = "inceptum-thumbnail"; var launch = new Button(); launch.name = "inceptum-launch"; launch.iconName = "computer-symbolic"; launch.tooltipText = I18n.get("instance.launch"); launch.hasTooltip = true; var openDir = new Button(); openDir.name = "inceptum-open-dir"; openDir.iconName = "folder-symbolic"; openDir.tooltipText = I18n.get("instance.directory"); openDir.hasTooltip = true; var row = new ActionRow(); row.name = "inceptum-row"; row.activatableWidget = launch; row.addPrefix(thumbnail); row.addSuffix(launch); row.addSuffix(openDir); ((ListItem) item).setChild(row); //TODO server launch with network-server-symbolic //TODO kill current instance }); onBind(item -> { ListItem li = (ListItem) item; Instance instance = instanceList.get(((ListIndexItem) li.getItem()).getIntValue()); ActionRow row = (ActionRow) li.child; Box prefixes = (Box) row.firstChild.firstChild; Box suffixes = (Box) row.firstChild.lastChild; InstanceThumbnail thumbnail = InstanceThumbnail.castFrom((Stack) prefixes.firstChild); Button launch = (Button) suffixes.firstChild; Button openDir = (Button) launch.nextSibling; row.title = instance.toString(); // InstanceThumbnail thumbnail = new InstanceThumbnail(row.getFirstChild().cast()); // Label label = new Label(thumbnail.getNextSibling().cast()); // Button launch = new Button(label.getNextSibling().cast()); // Button openDir = new Button(launch.getNextSibling().cast()); thumbnail.bind(instance); // label.setText(new Str(instance.toString())); launch.onClicked(() -> GtkMenubar.launch(instance)); openDir.onClicked(() -> Utils.openFile(instance.path().toFile())); //TODO why the hell does this crash the VM? //TODO GestureClick.setButton(GDK_BUTTON_SECONDARY) // var controller = new EventControllerLegacy(); // controller.onEvent(event -> { // if (event.getEventType() == EventType.BUTTON_RELEASE) { // Utils.LOGGER.info("Button " + new ButtonEvent(event.cast()).getButton()); // } // return GTK.FALSE; // }); // row.addController(controller); //TODO edit button document-edit-symbolic -> edit-delete-symbolic, edit-copy-symbolic }); } }