2014-04-29 10:54:20 +10:00
|
|
|
package codechicken.nei;
|
|
|
|
|
|
2014-06-29 20:31:37 +10:00
|
|
|
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;
|
|
|
|
|
|
2014-06-29 20:31:37 +10:00
|
|
|
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;
|
|
|
|
|
|
2014-06-29 20:31:37 +10:00
|
|
|
public class SearchField extends TextField implements ItemFilterProvider
|
2014-04-29 10:54:20 +10:00
|
|
|
{
|
2014-06-29 20:31:37 +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);
|
2014-06-29 20:31:37 +10:00
|
|
|
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())
|
2014-06-29 20:31:37 +10:00
|
|
|
drawGradientRect(x, y, w, h, 0xFFFFFF00, 0xFFC0B000);
|
2014-04-29 10:54:20 +10:00
|
|
|
else
|
2014-06-29 20:31:37 +10:00
|
|
|
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());
|
2014-07-23 21:03:03 +10:00
|
|
|
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) {
|
2014-06-29 20:31:37 +10:00
|
|
|
switch(NEIClientConfig.getIntSetting("inventory.searchmode")) {
|
|
|
|
|
case 0://plain
|
2014-12-14 17:10:00 +10:00
|
|
|
search = "\\Q"+search+"\\E";
|
2014-06-29 20:31:37 +10:00
|
|
|
break;
|
|
|
|
|
case 1:
|
2014-12-14 17:10:00 +10:00
|
|
|
search = search
|
2014-06-29 20:31:37 +10:00
|
|
|
.replace(".", "")
|
|
|
|
|
.replace("?", ".")
|
|
|
|
|
.replace("*", ".+?");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Pattern pattern = null;
|
|
|
|
|
try {
|
2014-12-14 17:10:00 +10:00
|
|
|
pattern = Pattern.compile(search);
|
2014-06-29 20:31:37 +10:00
|
|
|
} 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-06-29 20:31:37 +10:00
|
|
|
|
2014-12-14 17:10:00 +10:00
|
|
|
Pattern pattern = getPattern(s_filter);
|
|
|
|
|
return pattern == null ? new EverythingItemFilter() : new PatternItemFilter(pattern);
|
2014-06-29 20:31:37 +10:00
|
|
|
}
|
2014-04-29 10:54:20 +10:00
|
|
|
}
|