Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 32 additions & 24 deletions src/main/java/com/cleanroommc/modularui/widgets/layout/Grid.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.IntFunction;
import java.util.stream.Collectors;

public class Grid extends ScrollWidget<Grid> implements ILayoutWidget {
Expand All @@ -29,9 +27,7 @@ public class Grid extends ScrollWidget<Grid> implements ILayoutWidget {
private Alignment alignment = Alignment.Center;
private boolean dirty = false;

public Grid() {
this.minElementMargin.all(2);
}
public Grid() {}

@Override
public void onInit() {
Expand Down Expand Up @@ -169,10 +165,9 @@ public Grid row(List<IWidget> row) {
return this;
}

public Grid row(IWidget... row) {
List<IWidget> list = new ArrayList<>();
Collections.addAll(list, row);
return row(list);
public Grid row(@NotNull IWidget... row) {
Objects.requireNonNull(row);
return row(Arrays.asList(row));
}

@Override
Expand Down Expand Up @@ -203,8 +198,20 @@ public Grid nextRow() {
return this;
}

public <T, I extends IWidget> Grid mapTo(int rowLength, List<T> collection, IndexedElementMapper<T, I> widgetCreator) {
return matrix(mapToMatrix(rowLength, collection, widgetCreator));
public <T, I extends IWidget> Grid mapTo(int rowLength, @NotNull List<T> list, @NotNull IndexedElementMapper<T, I> widgetCreator) {
Objects.requireNonNull(widgetCreator);
Objects.requireNonNull(list);
return matrix(mapToMatrix(rowLength, list, widgetCreator));
}

public <I extends IWidget> Grid mapTo(int rowLength, @NotNull List<I> list) {
Objects.requireNonNull(list);
return mapTo(rowLength, list.size(), list::get);
}

public <I extends IWidget> Grid mapTo(int rowLength, int size, @NotNull IntFunction<I> widgetCreator) {
Objects.requireNonNull(widgetCreator);
return matrix(mapToMatrix(rowLength, size, widgetCreator));
}

public Grid minColWidth(int minColWidth) {
Expand Down Expand Up @@ -247,7 +254,7 @@ public Grid minElementMargin(int horizontal, int vertical) {
return getThis();
}

public Grid margin(int all) {
public Grid minElementMargin(int all) {
this.minElementMargin.all(all);
return getThis();
}
Expand All @@ -272,18 +279,19 @@ public Grid minElementMarginBottom(int val) {
return getThis();
}

public static <T, I extends IWidget> List<List<I>> mapToMatrix(int rowLength, List<T> collection, IndexedElementMapper<T, I> widgetCreator) {
public static <T, I extends IWidget> List<List<I>> mapToMatrix(int rowLength, List<T> list, IndexedElementMapper<T, I> widgetCreator) {
return mapToMatrix(rowLength, list.size(), i -> widgetCreator.apply(i, list.get(i)));
}

public static <I extends IWidget> List<List<I>> mapToMatrix(int rowLength, int size, IntFunction<I> widgetCreator) {
List<List<I>> matrix = new ArrayList<>();
for (int i = 0; i < collection.size(); i++) {
for (int i = 0; i < size; i++) {
int r = i / rowLength;
List<I> row;
if (matrix.size() <= r) {
row = new ArrayList<>();
matrix.add(row);
} else {
row = matrix.get(r);
}
row.add(widgetCreator.apply(i, collection.get(i)));

if (r == matrix.size())
matrix.add(new ArrayList<>());

matrix.get(r).add(widgetCreator.apply(i));
}
return matrix;
}
Expand Down