mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Allow merging consecutive filters for caption
This commit is contained in:
@@ -118,6 +118,7 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
||||
Forge.openScreen(editScreen);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void updateLabel() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Filter: ");
|
||||
@@ -125,10 +126,31 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
||||
builder.append("(none)");
|
||||
}
|
||||
else {
|
||||
int prevFilterEndIdx = -1;
|
||||
AdvancedSearch.Filter<T> filter, prevFilter = null;
|
||||
for (Object piece : expression) {
|
||||
if (piece instanceof AdvancedSearch.Filter) {
|
||||
filter = (AdvancedSearch.Filter<T>)piece;
|
||||
if (filter.canMergeCaptionWith(prevFilter)) {
|
||||
//convert boolean operators between filters to lowercase
|
||||
builder.replace(prevFilterEndIdx, builder.length(), builder.substring(prevFilterEndIdx).toLowerCase());
|
||||
//append only values for filter
|
||||
builder.append(filter.extractValuesFromCaption());
|
||||
}
|
||||
else {
|
||||
builder.append(filter);
|
||||
}
|
||||
prevFilter = filter;
|
||||
prevFilterEndIdx = builder.length();
|
||||
}
|
||||
else {
|
||||
if (piece.equals(Operator.OPEN_PAREN) || piece.equals(Operator.CLOSE_PAREN)) {
|
||||
prevFilter = null; //prevent merging filters with parentheses in between
|
||||
}
|
||||
builder.append(piece);
|
||||
}
|
||||
}
|
||||
}
|
||||
label.setText(builder.toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -808,6 +808,17 @@ public class AdvancedSearch {
|
||||
predicate = predicate0;
|
||||
}
|
||||
|
||||
public boolean canMergeCaptionWith(Filter<T> filter) {
|
||||
return filter != null && option == filter.option && operator == filter.operator;
|
||||
}
|
||||
|
||||
public String extractValuesFromCaption() {
|
||||
//build empty caption to determine index where values would begin
|
||||
String emptyCaption = operator.formatStr.replace("%1$s", option.name);
|
||||
emptyCaption = emptyCaption.replaceAll("'?%\\d\\$[sd]'?", ""); //strip other arguments
|
||||
return caption.substring(emptyCaption.length());
|
||||
}
|
||||
|
||||
public Predicate<T> getPredicate() {
|
||||
return predicate;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user