From 8b6da6731497166a650f0b06d7acaebb8a5f01aa Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Fri, 17 Oct 2014 21:30:30 +0100 Subject: [PATCH] Fancy searchbar stuffs. --- .../client/gui/lexicon/GuiLexicon.java | 6 +- .../client/gui/lexicon/GuiLexiconIndex.java | 72 ++++++++++++++---- .../assets/botania/textures/gui/lexicon.png | Bin 47016 -> 47290 bytes 3 files changed, 62 insertions(+), 16 deletions(-) diff --git a/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexicon.java b/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexicon.java index 7a0606d2e..ce9806114 100644 --- a/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexicon.java +++ b/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexicon.java @@ -250,9 +250,13 @@ public class GuiLexicon extends GuiScreen { } } + boolean closeScreenOnInvKey() { + return true; + } + @Override protected void keyTyped(char par1, int par2) { - if(mc.gameSettings.keyBindInventory.getKeyCode() == par2) { + if(closeScreenOnInvKey() && mc.gameSettings.keyBindInventory.getKeyCode() == par2) { mc.displayGuiScreen(null); mc.setIngameFocus(); } diff --git a/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexiconIndex.java b/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexiconIndex.java index dc2a5a6d5..e6f8c07af 100644 --- a/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexiconIndex.java +++ b/MODSRC/vazkii/botania/client/gui/lexicon/GuiLexiconIndex.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.List; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; @@ -38,7 +39,8 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { GuiButton leftButton, rightButton, backButton; GuiLexicon parent; - + GuiTextField searchField; + List entriesToDisplay = new ArrayList(); public GuiLexiconIndex(LexiconCategory category) { @@ -63,17 +65,29 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { buttonList.add(backButton = new GuiButtonBack(12, left + guiWidth / 2 - 8, top + guiHeight + 2)); buttonList.add(leftButton = new GuiButtonPage(13, left, top + guiHeight - 10, false)); buttonList.add(rightButton = new GuiButtonPage(14, left + guiWidth - 18, top + guiHeight - 10, true)); - + + searchField = new GuiTextField(fontRendererObj, left + guiWidth / 2 + 28, top + guiHeight + 6, 200, 10); + searchField.setCanLoseFocus(false); + searchField.setFocused(true); + searchField.setEnableBackgroundDrawing(false); + + updateAll(); + } + + void updateAll() { + buildEntries(); + updatePageButtons(); + populateIndex(); + } + + void buildEntries() { entriesToDisplay.clear(); ILexicon lex = (ILexicon) stackUsed.getItem(); for(LexiconEntry entry : category == null ? BotaniaAPI.getAllEntries() : category.entries) { - if(lex.isKnowledgeUnlocked(stackUsed, entry.getKnowledgeType())) + if(lex.isKnowledgeUnlocked(stackUsed, entry.getKnowledgeType()) && StatCollector.translateToLocal(entry.getUnlocalizedName()).toLowerCase().contains(searchField.getText().toLowerCase().trim())) entriesToDisplay.add(entry); } Collections.sort(entriesToDisplay); - - updatePageButtons(); - populateIndex(); } @Override @@ -86,6 +100,18 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { else button.displayString = ""; } } + + @Override + public void drawScreen(int par1, int par2, float par3) { + super.drawScreen(par1, par2, par3); + + if(!searchField.getText().isEmpty()) { + mc.renderEngine.bindTexture(texture); + drawTexturedModalRect(searchField.xPosition - 13, searchField.yPosition - 3, 86, 180, 12, 12); + + searchField.drawTextBox(); + } + } @Override protected void actionPerformed(GuiButton par1GuiButton) { @@ -111,14 +137,18 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { break; default : int index = par1GuiButton.id + page * 12; - if(index >= entriesToDisplay.size()) - return; - - LexiconEntry entry = entriesToDisplay.get(index); - mc.displayGuiScreen(new GuiLexiconEntry(entry, this)); - ClientTickHandler.notifyPageChange(); + openEntry(index); } } + + void openEntry(int index) { + if(index >= entriesToDisplay.size()) + return; + + LexiconEntry entry = entriesToDisplay.get(index); + mc.displayGuiScreen(new GuiLexiconEntry(entry, this)); + ClientTickHandler.notifyPageChange(); + } public void updatePageButtons() { leftButton.enabled = page != 0; @@ -151,6 +181,7 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { protected void mouseClicked(int par1, int par2, int par3) { super.mouseClicked(par1, par2, par3); + searchField.mouseClicked(par1, par2, par3); fx = par1; if(par3 == 1) back(); @@ -169,6 +200,11 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { else if(w > 0) prevPage(); } + + @Override + boolean closeScreenOnInvKey() { + return false; + } @Override protected void keyTyped(char par1, int par2) { @@ -176,13 +212,19 @@ public class GuiLexiconIndex extends GuiLexicon implements IParented { prevPage(); else if(par2 == 205 || par2 == 208 || par2 == 209) // Right, Down Page Down nextPage(); - else if(par2 == 14) // Backspace + else if(par2 == 14 && searchField.getText().isEmpty()) // Backspace back(); else if(par2 == 199) { // Home mc.displayGuiScreen(new GuiLexicon()); ClientTickHandler.notifyPageChange(); - } - + } else if(par2 == 28 && entriesToDisplay.size() == 1) // Enter + openEntry(0); + + String search = searchField.getText(); + searchField.textboxKeyTyped(par1, par2); + if(!searchField.getText().equalsIgnoreCase(search)) + updateAll(); + super.keyTyped(par1, par2); } diff --git a/resources/assets/botania/textures/gui/lexicon.png b/resources/assets/botania/textures/gui/lexicon.png index 4cb1a53562bb3302fa06b575d26c8b3348c07247..4787609fc1167ab7368a6b4ac266d1f39968b3bf 100644 GIT binary patch delta 11480 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 Z2PAAI=se49LId~56BTXcYDKG%{{>!+d-VVS delta 11204 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 Ka;2gL>VE-x?Bmz~