Skip to content

Commit

Permalink
feat: Add QOL changes to distributor gui
Browse files Browse the repository at this point in the history
  • Loading branch information
phinner committed Oct 14, 2024
1 parent 77db635 commit 7caf9e5
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
*/
package com.xpdustry.distributor.api.gui;

import com.xpdustry.distributor.api.key.Key;

/**
* A function that is executed when an interaction occurs in a gui. Takes an additional parameter as the input.
*/
Expand All @@ -34,6 +36,17 @@ static <T> BiAction<T> from(final Action action) {
return (window, value) -> action.act(window);
}

/**
* Returns a bi-action that sets a state entry with the bi-action input.
*
* @param key the key
* @param <T> the type of the value
* @return the bi-action
*/
static <T> BiAction<T> with(final Key<T> key) {
return (window, value) -> window.getState().set(key, value);
}

/**
* Executes the bi-action.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,12 @@ default MenuGrid addRow(final int index, final MenuOption... options) {
@Nullable MenuOption getOption(final int id);

MenuOption getOption(final int x, final int y);

MenuGrid addOption(final MenuOption option);

MenuOption addOption(final int y, final MenuOption option);

MenuOption addOption(final int x, final int y, final MenuOption option);

MenuGrid removeOption(final int x, final int y);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package com.xpdustry.distributor.api.gui.menu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
Expand All @@ -30,12 +31,12 @@ final class MenuGridImpl implements MenuGrid {

@Override
public List<List<MenuOption>> getOptions() {
return options.stream().map(List::copyOf).toList();
return options.stream().map(Collections::unmodifiableList).toList();
}

@Override
public List<MenuOption> getRow(int index) {
return options.get(index);
return Collections.unmodifiableList(options.get(index));
}

@Override
Expand Down Expand Up @@ -79,6 +80,39 @@ public MenuOption getOption(final int x, final int y) {
return options.get(y).get(x);
}

@Override
public MenuGrid addOption(final MenuOption option) {
if (options.isEmpty()) {
addRow(List.of(option));
} else {
final var row = options.get(options.size() - 1);
row.add(option);
}
return this;
}

@Override
public MenuOption addOption(final int y, final MenuOption option) {
options.get(y).add(option);
return option;
}

@Override
public MenuOption addOption(final int x, final int y, MenuOption option) {
options.get(y).add(x, option);
return option;
}

@Override
public MenuGrid removeOption(final int x, final int y) {
final var row = options.get(y);
row.remove(x);
if (row.isEmpty()) {
options.remove(y);
}
return this;
}

@Override
public int hashCode() {
return Objects.hashCode(options);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,23 @@ final class MenuManagerImpl extends AbstractTransformerWindowManager<MenuPane> i

@Override
protected void onWindowOpen(final SimpleWindow window) {
final var options = window.getPane().getGrid().getOptions().stream()
.map(row -> row.stream()
.map(MenuOption::getContent)
.map(content -> render(window, content))
.toArray(String[]::new))
.toArray(String[][]::new);
for (int i = 0; i < options.length; i++) {
if (options[i].length == 0) {
throw new IllegalArgumentException("Row " + i + " is empty");
}
}
Call.followUpMenu(
window.getViewer().con(),
id,
render(window, window.getPane().getTitle()),
render(window, window.getPane().getContent()),
window.getPane().getGrid().getOptions().stream()
.map(row -> row.stream()
.map(MenuOption::getContent)
.map(content -> render(window, content))
.toArray(String[]::new))
.toArray(String[][]::new));
options);
}

@Override
Expand Down

0 comments on commit 7caf9e5

Please sign in to comment.