From 9e6b82d10a8ff95b307fb0c0dd5f3ed331298e7c Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 25 Jan 2014 06:39:48 +0000 Subject: [PATCH] Add "Folder" filter for DeckManagers --- .gitattributes | 1 + .../gui/toolbox/itemmanager/DeckManager.java | 30 +++++++ .../itemmanager/filters/DeckFolderFilter.java | 82 +++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFolderFilter.java diff --git a/.gitattributes b/.gitattributes index 304b6cf7f2b..ca5fda25de2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java index 71aafb6d02c..bbc4d753c29 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java @@ -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 { GuiUtils.addSeparator(menu); //separate from current search item + Set folders = new HashSet(); + for (final Entry 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() { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFolderFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFolderFilter.java new file mode 100644 index 00000000000..327f3aad0a7 --- /dev/null +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFolderFilter.java @@ -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 { + protected final Set folders = new HashSet(); + + public DeckFolderFilter(ItemManager itemManager0) { + super(itemManager0); + } + + public DeckFolderFilter(ItemManager itemManager0, String folder0) { + super(itemManager0); + this.folders.add(folder0); + } + + @Override + public ItemFilter createCopy() { + DeckFolderFilter copy = new DeckFolderFilter(itemManager); + copy.folders.addAll(this.folders); + return copy; + } + + @Override + protected final Predicate buildPredicate() { + return new Predicate() { + @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 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; + } +}