Skip to content

Commit de2f625

Browse files
authored
Disable hotbar keys handling in terminals (#331)
1 parent 029b479 commit de2f625

File tree

2 files changed

+69
-48
lines changed

2 files changed

+69
-48
lines changed

src/main/java/com/glodblock/github/client/gui/GuiItemMonitor.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77

88
import com.glodblock.github.client.gui.base.FCGuiMonitor;
99
import com.glodblock.github.client.gui.container.ContainerItemMonitor;
10-
import com.glodblock.github.util.ModAndClassUtil;
1110

1211
import appeng.api.storage.ITerminalHost;
1312
import appeng.api.storage.data.IAEItemStack;
1413
import appeng.client.me.ItemRepo;
15-
import appeng.core.AEConfig;
1614
import appeng.core.localization.GuiText;
1715

1816
public class GuiItemMonitor extends FCGuiMonitor<IAEItemStack> {
@@ -40,13 +38,6 @@ public void drawFG(final int offsetX, final int offsetY, final int mouseX, final
4038
super.drawFG(offsetX, offsetY, mouseX, mouseY);
4139
}
4240

43-
@Override
44-
public void drawScreen(final int mouseX, final int mouseY, final float btn) {
45-
super.drawScreen(mouseX, mouseY, btn);
46-
if (ModAndClassUtil.isSearchBar && AEConfig.instance.preserveSearchBar && searchField != null)
47-
handleTooltip(mouseX, mouseY, searchField.new TooltipProvider());
48-
}
49-
5041
@Override
5142
public void setTextFieldValue(String displayName, int mousex, int mousey, ItemStack stack) {
5243
setSearchString(displayName, true);

src/main/java/com/glodblock/github/client/gui/base/FCGuiMonitor.java

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.lwjgl.input.Mouse;
1717

1818
import com.glodblock.github.FluidCraft;
19-
import com.glodblock.github.client.gui.FCGuiTextField;
2019
import com.glodblock.github.client.gui.GuiFluidMonitor;
2120
import com.glodblock.github.client.gui.GuiItemMonitor;
2221
import com.glodblock.github.client.gui.container.base.FCContainerMonitor;
@@ -28,6 +27,7 @@
2827

2928
import appeng.api.config.CraftingStatus;
3029
import appeng.api.config.PinsState;
30+
import appeng.api.config.SearchBoxFocusPriority;
3131
import appeng.api.config.SearchBoxMode;
3232
import appeng.api.config.Settings;
3333
import appeng.api.config.TerminalStyle;
@@ -45,6 +45,7 @@
4545
import appeng.client.gui.widgets.GuiTabButton;
4646
import appeng.client.gui.widgets.IDropToFillTextField;
4747
import appeng.client.gui.widgets.ISortSource;
48+
import appeng.client.gui.widgets.MEGuiTextField;
4849
import appeng.client.me.InternalSlotME;
4950
import appeng.client.me.ItemRepo;
5051
import appeng.client.me.PinSlotME;
@@ -93,7 +94,7 @@ public abstract class FCGuiMonitor<T extends IAEStack<T>> extends FCBaseMEGui
9394
public GuiTabButton craftingStatusBtn;
9495
protected IDisplayRepo repo;
9596
protected GuiImgButton craftingStatusImgBtn;
96-
protected FCGuiTextField searchField;
97+
protected MEGuiTextField searchField;
9798
protected int perRow = 9;
9899
protected int reservedSpace = 0;
99100
protected boolean customSortOrder = true;
@@ -113,6 +114,10 @@ public abstract class FCGuiMonitor<T extends IAEStack<T>> extends FCBaseMEGui
113114
protected boolean hasShiftKeyDown = false;
114115
private PinsState pinsState;
115116
public final boolean hasPinHost;
117+
private boolean canBeAutoFocused;
118+
private boolean isAutoFocused;
119+
protected int currentMouseY;
120+
protected int currentMouseX;
116121

117122
@SuppressWarnings("unchecked")
118123
public FCGuiMonitor(final InventoryPlayer inventoryPlayer, final ITerminalHost te, final FCContainerMonitor<T> c) {
@@ -337,18 +342,19 @@ public void initGui() {
337342
AEConfig.instance.settings.getSetting(Settings.TERMINAL_STYLE)));
338343
this.offsetY += 20;
339344

340-
// Right now 80 > offsetX, but that can be changed later.
341-
// noinspection DataFlowIssue
342-
this.searchField = new FCGuiTextField(
343-
this.fontRendererObj,
344-
this.guiLeft + Math.max(80, this.offsetX),
345-
this.guiTop + 4,
346-
90,
347-
12);
348-
this.searchField.setEnableBackgroundDrawing(false);
345+
this.searchField = new MEGuiTextField(90, 12) {
346+
347+
@Override
348+
public void onTextChange(final String oldText) {
349+
final String text = getText();
350+
repo.setSearchString(text);
351+
repo.updateView();
352+
setScrollBar();
353+
}
354+
};
355+
this.searchField.x = this.guiLeft + Math.max(80, this.offsetX);
356+
this.searchField.y = this.guiTop + 4;
349357
this.searchField.setMaxStringLength(25);
350-
this.searchField.setTextColor(0xFFFFFF);
351-
this.searchField.setVisible(true);
352358
if (ModAndClassUtil.isSearchStringTooltip)
353359
searchField.setMessage(ButtonToolTips.SearchStringTooltip.getLocal());
354360

@@ -384,7 +390,9 @@ public void initGui() {
384390
}
385391

386392
final Enum<?> setting = AEConfig.instance.settings.getSetting(Settings.SEARCH_MODE);
387-
this.searchField.setFocused(SearchBoxMode.AUTOSEARCH == setting || SearchBoxMode.NEI_AUTOSEARCH == setting);
393+
this.canBeAutoFocused = SearchBoxMode.AUTOSEARCH == setting || SearchBoxMode.NEI_AUTOSEARCH == setting;
394+
this.searchField.setFocused(this.canBeAutoFocused);
395+
this.isAutoFocused = this.canBeAutoFocused;
388396

389397
if (ModAndClassUtil.isSearchBar && (AEConfig.instance.preserveSearchBar || this.isSubGui())) {
390398
setSearchString(memoryText, false);
@@ -420,6 +428,7 @@ public void initGui() {
420428

421429
public void setSearchString(String memoryText, boolean updateView) {
422430
this.searchField.setText(memoryText);
431+
this.searchField.setCursorPositionEnd();
423432
this.repo.setSearchString(memoryText);
424433
if (updateView) {
425434
this.repo.updateView();
@@ -429,13 +438,8 @@ public void setSearchString(String memoryText, boolean updateView) {
429438

430439
@Override
431440
protected void mouseClicked(final int xCoord, final int yCoord, final int btn) {
432-
final Enum<?> searchMode = AEConfig.instance.settings.getSetting(Settings.SEARCH_MODE);
433-
if (searchMode != SearchBoxMode.AUTOSEARCH && searchMode != SearchBoxMode.NEI_AUTOSEARCH) {
434-
this.searchField.mouseClicked(xCoord, yCoord, btn);
435-
}
436-
if (btn == 1 && this.searchField.isMouseIn(xCoord, yCoord)) {
437-
setSearchString("", true);
438-
}
441+
this.searchField.mouseClicked(xCoord, yCoord, btn);
442+
isAutoFocused = false;
439443
super.mouseClicked(xCoord, yCoord, btn);
440444
}
441445

@@ -718,6 +722,9 @@ public void drawBG(final int offsetX, final int offsetY, final int mouseX, final
718722
if (this.searchField != null) {
719723
this.searchField.drawTextBox();
720724
}
725+
726+
this.currentMouseX = mouseX;
727+
this.currentMouseY = mouseY;
721728
}
722729

723730
protected String getBackground() {
@@ -740,18 +747,29 @@ protected void repositionSlot(final AppEngSlot s) {
740747

741748
@Override
742749
protected void keyTyped(final char character, final int key) {
743-
if (!this.checkHotbarKeys(key)) {
744-
if (character == ' ' && this.searchField.getText().isEmpty()) {
745-
return;
746-
}
750+
if (character == ' ' && this.searchField.getText().isEmpty()) {
751+
return;
752+
}
747753

748-
if (this.searchField.textboxKeyTyped(character, key)) {
749-
this.repo.setSearchString(this.searchField.getText());
750-
this.repo.updateView();
751-
this.setScrollBar();
752-
} else {
753-
super.keyTyped(character, key);
754-
}
754+
boolean skipHotbarCheck = searchField.isFocused()
755+
&& (AEConfig.instance.searchBoxFocusPriority == SearchBoxFocusPriority.ALWAYS
756+
|| (AEConfig.instance.searchBoxFocusPriority == SearchBoxFocusPriority.NO_AUTOSEARCH
757+
&& !isAutoFocused));
758+
759+
if (!skipHotbarCheck && checkHotbarKeys(key)) {
760+
return;
761+
}
762+
763+
final boolean mouseInGui = this
764+
.isPointInRegion(0, 0, this.xSize, this.ySize, this.currentMouseX, this.currentMouseY);
765+
766+
if (this.canBeAutoFocused && !searchField.isFocused() && mouseInGui) {
767+
searchField.setFocused(true);
768+
isAutoFocused = true;
769+
}
770+
771+
if (!searchField.textboxKeyTyped(character, key)) {
772+
super.keyTyped(character, key);
755773
}
756774
}
757775

@@ -833,13 +851,6 @@ public void setStandardSize(final int standardSize) {
833851
this.standardSize = standardSize;
834852
}
835853

836-
@Override
837-
public void drawScreen(final int mouseX, final int mouseY, final float btn) {
838-
super.drawScreen(mouseX, mouseY, btn);
839-
if (ModAndClassUtil.isSearchBar && AEConfig.instance.preserveSearchBar && searchField != null)
840-
handleTooltip(mouseX, mouseY, searchField.new TooltipProvider());
841-
}
842-
843854
public boolean isOverSearchField(int x, int y) {
844855
return searchField.isMouseIn(x, y);
845856
}
@@ -881,4 +892,23 @@ public void setAEPins(IAEItemStack[] pins) {
881892
public void setPinsState(PinsState state) {
882893
configSrc.putSetting(Settings.PINS_STATE, state);
883894
}
895+
896+
@SuppressWarnings("SameParameterValue")
897+
protected boolean isPointInRegion(int rectX, int rectY, int rectWidth, int rectHeight, int pointX, int pointY) {
898+
pointX -= this.guiLeft;
899+
pointY -= this.guiTop;
900+
return pointX >= rectX - 1 && pointX < rectX + rectWidth + 1
901+
&& pointY >= rectY - 1
902+
&& pointY < rectY + rectHeight + 1;
903+
}
904+
905+
// Moving items via hotbar keys in terminals isn't working anyway.
906+
// Let's disable hotbar keys processing for terminal slots to allow proper input of numbers in the search field
907+
@Override
908+
protected boolean checkHotbarKeys(int keyCode) {
909+
if (theSlot instanceof SlotME) {
910+
return false;
911+
}
912+
return super.checkHotbarKeys(keyCode);
913+
}
884914
}

0 commit comments

Comments
 (0)