GTK: fix list view
ci/woodpecker/push/docs Pipeline was successful Details
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2023-01-22 19:15:09 +01:00
parent 37872e6c79
commit 442d462843
Signed by: Johannes
GPG Key ID: E76429612C2929F4
2 changed files with 29 additions and 21 deletions

View File

@ -26,6 +26,8 @@ public class InstanceListEntryFactory extends SignalListItemFactory {
public InstanceListEntryFactory(List<Instance> instanceList) {
super();
onSetup(item -> {
ListItem li = (ListItem) item;
var thumbnail = new InstanceThumbnail();
thumbnail.name = "inceptum-thumbnail";
@ -44,16 +46,11 @@ public class InstanceListEntryFactory extends SignalListItemFactory {
var row = new ActionRow();
row.margin = 8;
row.name = "inceptum-row";
row.activatableWidget = launch;
row.removeCssClass("activatable"); //TODO remove this workaround if a better way to support opening the menu is found
row.addPrefix(thumbnail);
row.addSuffix(launch);
row.addSuffix(menu);
var clicked = new GestureClick();
clicked.onPressed((nPress, x, y) -> {
if (nPress == 2) launch.emitClicked();
});
row.addController(clicked);
var rightClicked = new GestureClick();
rightClicked.button = 3;
rightClicked.onPressed((nPress, x, y) -> {
@ -61,13 +58,15 @@ public class InstanceListEntryFactory extends SignalListItemFactory {
});
row.addController(rightClicked);
((ListItem) item).setChild(row);
li.setChild(row);
});
Map<String, Set<Signal<?>>> toDisconnect = new HashMap<>();
onBind(item -> {
Decomposed li = Decomposed.of((ListItem) item, instanceList);
li.item.activatable = !li.instance.isLocked; //TODO add message / gray out
li.row.title = li.instance.toString();
li.thumbnail.bind(li.instance);
@ -119,7 +118,7 @@ public class InstanceListEntryFactory extends SignalListItemFactory {
});
}
private record Decomposed(Instance instance, ActionRow row, InstanceThumbnail thumbnail, Button launch, PopoverMenu popoverMenu) {
private record Decomposed(ListItem item, Instance instance, ActionRow row, InstanceThumbnail thumbnail, Button launch, PopoverMenu popoverMenu) {
public static Decomposed of(ListItem item, List<Instance> instanceList) {
Instance instance = instanceList.get(((ListIndexItem) item.getItem()).getIntValue());
ActionRow row = (ActionRow) item.child;
@ -129,7 +128,7 @@ public class InstanceListEntryFactory extends SignalListItemFactory {
Button launch = (Button) suffixes.firstChild;
MenuButton menuButton = (MenuButton) launch.nextSibling;
PopoverMenu popoverMenu = (PopoverMenu) menuButton.popover;
return new Decomposed(instance, row, thumbnail, launch, popoverMenu);
return new Decomposed(item, instance, row, thumbnail, launch, popoverMenu);
}
}
}

View File

@ -1,6 +1,7 @@
package io.gitlab.jfronny.inceptum.gtk.window;
import io.gitlab.jfronny.inceptum.gtk.util.ListIndexModel;
import io.gitlab.jfronny.inceptum.launcher.system.launch.LaunchType;
import org.gnome.adw.Clamp;
import org.gnome.adw.StatusPage;
import org.gtk.gio.Menu;
@ -28,7 +29,7 @@ public class MainWindow extends ApplicationWindow {
private final Button gridButton;
private final Stack stack;
private final StatusPage empty;
private final Clamp listView;
private final Clamp listContainer;
private final GridView gridView;
private final List<Instance> instanceList;
private final ListIndexModel instanceListIndex;
@ -80,22 +81,30 @@ public class MainWindow extends ApplicationWindow {
instanceList = new ArrayList<>();
instanceListIndex = new ListIndexModel(instanceList.size());
var singleSelection = new SingleSelection(instanceListIndex);
var singleSelection = new NoSelection(instanceListIndex);
listView = new Clamp();
listView.maximumSize = 900;
listView.child = new ListView(singleSelection, new InstanceListEntryFactory(instanceList));
listView.child.marginHorizontal = 24;
listView.child.marginVertical = 12;
listView.child.addCssClass("content");
listView.child.valign = Align.START;
ListView listView = new ListView(singleSelection, new InstanceListEntryFactory(instanceList));
listView.addCssClass("rich-list");
listView.showSeparators = true;
listView.onActivate(position -> {
// Double click
GtkMenubar.launch(instanceList.get(position), LaunchType.Client);
});
Frame frame = new Frame(null);
frame.child = listView;
frame.marginHorizontal = 24;
frame.marginVertical = 12;
frame.valign = Align.START;
listContainer = new Clamp();
listContainer.maximumSize = 900;
listContainer.child = frame;
gridView = new GridView(singleSelection, new InstanceGridEntryFactory(instanceList));
empty = new StatusPage();
empty.title = I18n.get("main.empty.title");
empty.description = I18n.get("main.empty.description");
//TODO empty.setIconName(new Str());
stack = new Stack();
stack.addChild(listView);
stack.addChild(listContainer);
stack.addChild(gridView);
stack.addChild(empty);
@ -156,7 +165,7 @@ public class MainWindow extends ApplicationWindow {
instanceListIndex.size = instanceList.size();
if (InstanceList.isEmpty) stack.visibleChild = empty;
else if (InceptumConfig.listView) stack.visibleChild = listView;
else if (InceptumConfig.listView) stack.visibleChild = listContainer;
else stack.visibleChild = gridView;
} catch (IOException e) {
Utils.LOGGER.error("Could not generate window body", e);