Files
NotEnoughItems/src/codechicken/nei/SearchField.java
T

116 lines
3.5 KiB
Java
Raw Normal View History

2014-04-29 10:54:20 +10:00
package codechicken.nei;
import codechicken.nei.ItemList.EverythingItemFilter;
import codechicken.nei.ItemList.PatternItemFilter;
import codechicken.nei.api.API;
import codechicken.nei.api.ItemFilter;
import codechicken.nei.api.ItemFilter.ItemFilterProvider;
2014-04-29 10:54:20 +10:00
import net.minecraft.util.EnumChatFormatting;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
2014-04-29 10:54:20 +10:00
import static codechicken.lib.gui.GuiDraw.drawGradientRect;
import static codechicken.lib.gui.GuiDraw.drawRect;
import static codechicken.nei.NEIClientConfig.world;
public class SearchField extends TextField implements ItemFilterProvider
2014-04-29 10:54:20 +10:00
{
/**
* Interface for returning a custom filter based on search field text
*/
public static interface ISearchProvider
{
/**
* Return null to ignore this provider and use the normal searching protocol
*/
public ItemFilter getFilter(String searchText);
}
public static List<ISearchProvider> searchProviders = new LinkedList<ISearchProvider>();
long lastclicktime;
2014-04-29 10:54:20 +10:00
public SearchField(String ident) {
super(ident);
API.addItemFilter(this);
2014-04-29 10:54:20 +10:00
}
public static boolean searchInventories() {
return world.nbt.getBoolean("searchinventories");
}
@Override
public void drawBox() {
if (searchInventories())
drawGradientRect(x, y, w, h, 0xFFFFFF00, 0xFFC0B000);
2014-04-29 10:54:20 +10:00
else
drawRect(x, y, w, h, 0xffA0A0A0);
drawRect(x + 1, y + 1, w - 2, h - 2, 0xFF000000);
2014-04-29 10:54:20 +10:00
}
@Override
public boolean handleClick(int mousex, int mousey, int button) {
if (button == 0) {
if (focused() && (System.currentTimeMillis() - lastclicktime < 500))//double click
{
world.nbt.setBoolean("searchinventories", !searchInventories());
world.saveNBT();
}
lastclicktime = System.currentTimeMillis();
}
return super.handleClick(mousex, mousey, button);
}
@Override
public void onTextChange(String oldText) {
NEIClientConfig.setSearchExpression(text());
ItemList.updateFilter.restart();
2014-04-29 10:54:20 +10:00
}
@Override
public void lastKeyTyped(int keyID, char keyChar) {
if (keyID == NEIClientConfig.getKeyBinding("gui.search"))
setFocus(true);
}
@Override
public String filterText(String s) {
return EnumChatFormatting.getTextWithoutFormattingCodes(s);
}
2014-12-14 17:10:00 +10:00
public static Pattern getPattern(String search) {
switch(NEIClientConfig.getIntSetting("inventory.searchmode")) {
case 0://plain
2014-12-14 17:10:00 +10:00
search = "\\Q"+search+"\\E";
break;
case 1:
2014-12-14 17:10:00 +10:00
search = search
.replace(".", "")
.replace("?", ".")
.replace("*", ".+?");
break;
}
Pattern pattern = null;
try {
2014-12-14 17:10:00 +10:00
pattern = Pattern.compile(search);
} catch (PatternSyntaxException ignored) {}
2014-12-14 17:10:00 +10:00
return pattern == null || pattern.toString().length() == 0 ? null : pattern;
}
@Override
public ItemFilter getFilter() {
String s_filter = text().toLowerCase();
for(ISearchProvider p : searchProviders) {
ItemFilter filter = p.getFilter(s_filter);
if(filter != null)
return filter;
}
2014-12-14 17:10:00 +10:00
Pattern pattern = getPattern(s_filter);
return pattern == null ? new EverythingItemFilter() : new PatternItemFilter(pattern);
}
2014-04-29 10:54:20 +10:00
}