Add "Folder" filter for DeckManagers

This commit is contained in:
drdev
2014-01-25 06:39:48 +00:00
parent ee49314502
commit 9e6b82d10a
3 changed files with 113 additions and 0 deletions

1
.gitattributes vendored
View File

@@ -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

View File

@@ -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() {

View File

@@ -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;
}
}