mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28: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);
|
Forge.openScreen(editScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
private void updateLabel() {
|
private void updateLabel() {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
builder.append("Filter: ");
|
builder.append("Filter: ");
|
||||||
@@ -125,10 +126,31 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
|||||||
builder.append("(none)");
|
builder.append("(none)");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
int prevFilterEndIdx = -1;
|
||||||
|
AdvancedSearch.Filter<T> filter, prevFilter = null;
|
||||||
for (Object piece : expression) {
|
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);
|
builder.append(piece);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
label.setText(builder.toString());
|
label.setText(builder.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -808,6 +808,17 @@ public class AdvancedSearch {
|
|||||||
predicate = predicate0;
|
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() {
|
public Predicate<T> getPredicate() {
|
||||||
return predicate;
|
return predicate;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user