Merge branch 'master' into 'deprecation-cleanup'

Master

See merge request core-developers/forge!1430
This commit is contained in:
Rob Schnautz
2019-02-28 01:06:47 +00:00
26 changed files with 332 additions and 79 deletions

View File

@@ -17,6 +17,24 @@
*/
package forge;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
import com.google.common.cache.LoadingCache;
import com.mortennobel.imagescaling.ResampleOp;
import forge.assets.FSkinProp;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.item.InventoryItem;
import forge.model.FModel;
import forge.properties.ForgeConstants;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinIcon;
import forge.util.ImageUtil;
import org.apache.commons.lang3.StringUtils;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
@@ -24,27 +42,7 @@ import java.io.File;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import javax.imageio.ImageIO;
import forge.properties.ForgePreferences;
import org.apache.commons.lang3.StringUtils;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
import com.google.common.cache.LoadingCache;
import com.mortennobel.imagescaling.ResampleOp;
import forge.assets.FSkinProp;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.item.InventoryItem;
import forge.model.FModel;
import forge.properties.ForgeConstants;
import forge.properties.ForgePreferences.FPref;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinIcon;
import forge.util.ImageUtil;
import java.util.concurrent.TimeUnit;
/**
* This class stores ALL card images in a cache with soft values. this means
@@ -64,7 +62,10 @@ public class ImageCache {
// short prefixes to save memory
private static final Set<String> _missingIconKeys = new HashSet<String>();
private static final LoadingCache<String, BufferedImage> _CACHE = CacheBuilder.newBuilder().softValues().build(new ImageLoader());
private static final LoadingCache<String, BufferedImage> _CACHE = CacheBuilder.newBuilder()
.maximumSize(FModel.getPreferences().getPrefInt((FPref.UI_IMAGE_CACHE_MAXIMUM)))
.expireAfterAccess(15, TimeUnit.MINUTES)
.build(new ImageLoader());
private static final BufferedImage _defaultImage;
static {
BufferedImage defImage = null;

View File

@@ -95,18 +95,17 @@ public class CardManager extends ItemManager<PaperCard> {
GuiUtils.addMenuItem(menu, "Formats...", null, new Runnable() {
@Override public void run() {
final CardSetFilter existingFilter = itemManager.getFilter(CardSetFilter.class);
final CardFormatFilter existingFilter = itemManager.getFilter(CardFormatFilter.class);
if (existingFilter != null) {
existingFilter.edit();
existingFilter.edit(itemManager);
} else {
final DialogChooseFormats dialog = new DialogChooseFormats();
dialog.setWantReprintsCB(true); // assume user wants things permissive...
dialog.setOkCallback(new Runnable() {
@Override public void run() {
final List<GameFormat> formats = dialog.getSelectedFormats();
if (!formats.isEmpty()) {
for(GameFormat format: formats) {
itemManager.addFilter(new CardFormatFilter(itemManager, format));
}
itemManager.addFilter(new CardFormatFilter(itemManager,formats,dialog.getWantReprints()));
}
}
});
@@ -119,7 +118,7 @@ public class CardManager extends ItemManager<PaperCard> {
public void run() {
CardSetFilter existingFilter = itemManager.getFilter(CardSetFilter.class);
if (existingFilter != null) {
existingFilter.edit();
existingFilter.edit(itemManager);
}
else {
final DialogChooseSets dialog = new DialogChooseSets(null, null, true);

View File

@@ -250,7 +250,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
if (hideFilters) {
GuiUtils.addMenuItem(menu, "Show Filters", null, cmdHideFilters);
} else {
final JMenu addMenu = GuiUtils.createMenu("Add Filter");
final JMenu addMenu = GuiUtils.createMenu("Add/Edit Filter");
GuiUtils.addMenuItem(addMenu, "Current text search",
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
cmdAddCurrentSearch, !mainSearchFilter.isEmpty());

View File

@@ -1,21 +1,29 @@
package forge.itemmanager.filters;
import java.util.List;
import com.google.common.base.Predicate;
import forge.game.GameFormat;
import forge.item.PaperCard;
import forge.itemmanager.ItemManager;
import forge.itemmanager.SFilterUtil;
import forge.screens.home.quest.DialogChooseFormats;
public class CardFormatFilter extends FormatFilter<PaperCard> {
public CardFormatFilter(ItemManager<? super PaperCard> itemManager0) {
super(itemManager0);
}
public CardFormatFilter(ItemManager<? super PaperCard> itemManager0, GameFormat format0) {
super(itemManager0, format0);
}
public CardFormatFilter(ItemManager<? super PaperCard> itemManager0, List<GameFormat> formats0,boolean allowReprints0) {
super(itemManager0);
this.formats.addAll(formats0);
this.allowReprints = allowReprints0;
}
@Override
public ItemFilter<PaperCard> createCopy() {
CardFormatFilter copy = new CardFormatFilter(itemManager);
@@ -27,4 +35,20 @@ public class CardFormatFilter extends FormatFilter<PaperCard> {
protected final Predicate<PaperCard> buildPredicate() {
return SFilterUtil.buildFormatFilter(this.formats, this.allowReprints);
}
public void edit(final ItemManager<? super PaperCard> itemManager) {
final DialogChooseFormats dialog = new DialogChooseFormats(this.formats);
final CardFormatFilter itemFilter = this;
dialog.setWantReprintsCB(allowReprints);
dialog.setOkCallback(new Runnable() {
@Override
public void run() {
formats.clear();
formats.addAll(dialog.getSelectedFormats());
allowReprints = dialog.getWantReprints();
itemManager.addFilter(itemFilter); // this adds/updates the current filter...
}
});
}
}

View File

@@ -49,16 +49,18 @@ public class CardSetFilter extends CardFormatFilter {
return true;
}
public void edit() {
public void edit(final ItemManager<? super PaperCard> itemManager) {
final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true);
final CardSetFilter itemFilter = this;
dialog.setWantReprintsCB(allowReprints);
dialog.setOkCallback(new Runnable() {
@Override
public void run() {
sets.clear();
sets.addAll(dialog.getSelectedSets());
allowReprints = dialog.getWantReprints();
formats.clear();
formats.add(new GameFormat(null, sets, null));
itemManager.addFilter(itemFilter); // this adds/updates the current filter
}
});
}

View File

@@ -116,6 +116,10 @@ public class DialogChooseFormats {
return wantReprints;
}
public void setWantReprintsCB(boolean isSet) {
cbWantReprints.setSelected(isSet);
}
private JPanel makeCheckBoxList(List<FCheckBox> formats, String title, boolean focused) {
choices.addAll(formats);

View File

@@ -24,7 +24,7 @@ public class DialogChooseSets {
private Runnable okCallback;
private final List<FCheckBox> choices = new ArrayList<>();
private final FCheckBox cbWantReprints = new FCheckBox("Allow compatible reprints from other sets");
private final FCheckBox cbWantReprints = new FCheckBox("Display compatible reprints from more recent sets");
// lists are of set codes (e.g. "2ED")
public DialogChooseSets(Collection<String> preselectedSets, Collection<String> unselectableSets, boolean showWantReprintsCheckbox) {
@@ -129,6 +129,10 @@ public class DialogChooseSets {
public boolean getWantReprints() {
return wantReprints;
}
public void setWantReprintsCB(boolean isSet) {
cbWantReprints.setSelected(isSet);
}
private JPanel makeCheckBoxList(List<FCheckBox> sets, String title, boolean focused) {