1 package com.irtimaled.bbor.client.gui;
3 import net.minecraft.client.gui.Element;
7 public interface IControlSet extends IFocusableControl, Element {
8 List<? extends IControl> controls();
10 IControl getFocused();
12 void setFocused(IControl control);
16 void setDragging(boolean dragging);
18 default boolean mouseClicked(double mouseX, double mouseY, int button) {
19 for (IControl control : this.controls()) {
20 if (control.isVisible() && control.mouseClicked(mouseX, mouseY, button)) {
21 IControl focused = getFocused();
22 if (focused != null && focused != control) {
25 this.setFocused(control);
26 if (button == 0) this.setDragging(true);
33 default boolean mouseReleased(double mouseX, double mouseY, int button) {
34 this.setDragging(false);
35 IControl focused = this.getFocused();
36 return focused != null && focused.mouseReleased(mouseX, mouseY, button);
39 default boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
40 IControl focused = this.getFocused();
41 return focused != null && this.isDragging() && button == 0 && focused.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
44 default boolean mouseScrolled(double mouseX, double mouseY, double scrollAmount) {
45 IControl focused = this.getFocused();
46 return focused != null && focused.mouseScrolled(mouseX, mouseY, scrollAmount);
49 default boolean keyPressed(int key, int scanCode, int modifiers) {
50 IControl focused = this.getFocused();
51 return focused != null && focused.keyPressed(key, scanCode, modifiers);
54 default boolean keyReleased(int key, int scanCode, int modifiers) {
55 IControl focused = this.getFocused();
56 return focused != null && focused.keyReleased(key, scanCode, modifiers);
59 default boolean charTyped(char character, int modifiers) {
60 IControl focused = this.getFocused();
61 return focused != null && focused.charTyped(character, modifiers);
64 default boolean changeFocus(boolean moveForward) {
65 IControl focused = this.getFocused();
66 if (focused != null && focused.changeFocus(moveForward)) {
70 List<? extends IControl> controls = this.controls();
71 int controlIndex = controls.indexOf(focused);
73 if (focused != null && controlIndex >= 0) {
74 newIndex = controlIndex + (moveForward ? 1 : 0);
75 } else if (moveForward) {
78 newIndex = controls.size();
81 if (ListHelper.findNextMatch(controls, newIndex, moveForward,
82 c -> c.changeFocus(moveForward), this::setFocused)) return true;
83 this.setFocused(null);
87 default void clearFocus() {
88 IControl focused = getFocused();
89 if (focused != null) {