GTK: fix list view
This commit is contained in:
parent
37872e6c79
commit
442d462843
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue