mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Add "Folder" filter for DeckManagers
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -15511,6 +15511,7 @@ forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardSetFilter.java
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardToughnessFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardTypeFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFolderFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFormatFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckQuestWorldFilter.java -text
|
||||
forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSearchFilter.java -text
|
||||
|
||||
@@ -4,13 +4,19 @@ import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.DeckBase;
|
||||
@@ -28,6 +34,7 @@ import forge.gui.home.quest.DialogChooseSets;
|
||||
import forge.gui.toolbox.FOptionPane;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.itemmanager.filters.DeckColorFilter;
|
||||
import forge.gui.toolbox.itemmanager.filters.DeckFolderFilter;
|
||||
import forge.gui.toolbox.itemmanager.filters.DeckFormatFilter;
|
||||
import forge.gui.toolbox.itemmanager.filters.DeckQuestWorldFilter;
|
||||
import forge.gui.toolbox.itemmanager.filters.DeckSearchFilter;
|
||||
@@ -160,6 +167,29 @@ public final class DeckManager extends ItemManager<DeckProxy> {
|
||||
|
||||
GuiUtils.addSeparator(menu); //separate from current search item
|
||||
|
||||
Set<String> folders = new HashSet<String>();
|
||||
for (final Entry<DeckProxy, Integer> deckEntry : getPool()) {
|
||||
String path = deckEntry.getKey().getPath();
|
||||
if (StringUtils.isNotEmpty(path)) { //don't include root folder as option
|
||||
folders.add(path);
|
||||
}
|
||||
}
|
||||
JMenu folder = GuiUtils.createMenu("Folder");
|
||||
if (folders.size() > 0) {
|
||||
for (final String f : folders) {
|
||||
GuiUtils.addMenuItem(folder, f, null, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
addFilter(new DeckFolderFilter(DeckManager.this, f));
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
}
|
||||
else {
|
||||
folder.setEnabled(false);
|
||||
}
|
||||
menu.add(folder);
|
||||
|
||||
JMenu fmt = GuiUtils.createMenu("Format");
|
||||
for (final GameFormat f : Singletons.getModel().getFormats()) {
|
||||
GuiUtils.addMenuItem(fmt, f.getName(), null, new Runnable() {
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package forge.gui.toolbox.itemmanager.filters;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.gui.deckeditor.DeckProxy;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckFolderFilter extends ListLabelFilter<DeckProxy> {
|
||||
protected final Set<String> folders = new HashSet<String>();
|
||||
|
||||
public DeckFolderFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
public DeckFolderFilter(ItemManager<? super DeckProxy> itemManager0, String folder0) {
|
||||
super(itemManager0);
|
||||
this.folders.add(folder0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
DeckFolderFilter copy = new DeckFolderFilter(itemManager);
|
||||
copy.folders.addAll(this.folders);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<DeckProxy> buildPredicate() {
|
||||
return new Predicate<DeckProxy>() {
|
||||
@Override
|
||||
public boolean apply(DeckProxy input) {
|
||||
String path = input.getPath();
|
||||
for (String folder : folders) {
|
||||
if (path.startsWith(folder)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getCaption() {
|
||||
return "Folder";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Iterable<String> getList() {
|
||||
return this.folders;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTooltip() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getCount() {
|
||||
return this.folders.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
this.folders.clear();
|
||||
this.updateLabel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean merge(ItemFilter<?> filter) {
|
||||
DeckFolderFilter formatFilter = (DeckFolderFilter)filter;
|
||||
this.folders.addAll(formatFilter.folders);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user