Miscallaneous Cleanup Part 2 - Lambdas and Method References (#5737)

* Cleanup - Unnecessary Boxing

* Cleanup - Unnecessary Unboxing

* Cleanup - For-Each Loops

* Cleanup - `indexOf != -1` -> `contains`

* Cleanup - Merge identical catch blocks

* Cleanup - Try-with-resources

* Cleanup - System.lineSeparator

* Cleanup - Reference types to primitives
Some loops over Integers were switched to IntStreams to hopefully cut down on overall boxing.

* Cleanup - Manually filling and copying arrays

* Remove unused imports

* Switch a lambda to a method reference

* Cleanup - CardPredicate Aggregates to method references

* Cleanup - Other static functions to method references

* Cleanup - Ambiguous class reference
Unclear when or how this happened...

* Cleanup - Anonymous -> Method reference

* Cleanup - Anonymous -> Lambda

* Cleanup - Comparator helper methods

* Cleanup - final method in final class

* Cleanup - private final methods

* Remove unused imports

* Convert a couple more lambdas to comparators.

* Simplify creature type list comparison.

---------

Co-authored-by: Jetz <Jetz722@gmail.com>
Co-authored-by: tool4ever <therealtoolkit@hotmail.com>
This commit is contained in:
Jetz72
2024-08-02 01:23:58 -04:00
committed by GitHub
parent 86ac0349ca
commit d62dfe1c8c
490 changed files with 6692 additions and 13091 deletions

View File

@@ -480,7 +480,7 @@ public class EnemySprite extends CharacterSprite implements Steerable<Vector2> {
if(data.rewards != null) { //Collect standard rewards.
Deck enemyDeck = Current.latestDeck();
// By popular demand, remove basic lands from the reward pool.
CardPool deckNoBasicLands = enemyDeck.getMain().getFilteredPool(Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard.FN_GET_RULES));
CardPool deckNoBasicLands = enemyDeck.getMain().getFilteredPool(Predicates.compose(Predicates.not(CardRulesPredicates.Presets.IS_BASIC_LAND), PaperCard::getRules));
for (RewardData rdata : data.rewards) {
ret.addAll(rdata.generate(false, enemyDeck == null ? null : deckNoBasicLands.toFlatList(),true ));

View File

@@ -156,12 +156,7 @@ public class SpellSmithScene extends UIScene {
if (configData.allowedEditions != null)
return Arrays.asList(configData.allowedEditions).contains(input.getCode());
return (!Arrays.asList(configData.restrictedEditions).contains(input.getCode()));
}).sorted(new Comparator<CardEdition>() {
@Override
public int compare(CardEdition e1, CardEdition e2) {
return e1.getName().compareTo(e2.getName());
}
}).collect(Collectors.toList());
}).sorted(Comparator.comparing(CardEdition::getName)).collect(Collectors.toList());
}
public boolean done() {

View File

@@ -289,15 +289,12 @@ public abstract class GameStage extends Stage {
public GameStage() {
super(new ScalingViewport(Scaling.stretch, Scene.getIntendedWidth(), Scene.getIntendedHeight(), new OrthographicCamera()));
WorldSave.getCurrentSave().onLoad(new Runnable() {
@Override
public void run() {
if (player == null)
return;
foregroundSprites.removeActor(player);
player = null;
GameStage.this.getPlayerSprite();
}
WorldSave.getCurrentSave().onLoad(() -> {
if (player == null)
return;
foregroundSprites.removeActor(player);
player = null;
GameStage.this.getPlayerSprite();
});
camera = (OrthographicCamera) getCamera();

View File

@@ -9,7 +9,6 @@ import com.badlogic.gdx.utils.SnapshotArray;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.ToIntFunction;
/**
* Sprite group to order actors based on the Y position on the map, the render sprites further up first.
@@ -26,12 +25,7 @@ public class SpriteGroup extends Group {
protected void drawChildren(Batch batch, float parentAlpha) {
Actor[] actors = getChildren().toArray();
Arrays.sort(actors, Comparator.comparingInt(new ToIntFunction<Actor>() {
@Override
public int applyAsInt(Actor o) {
return (int) -o.getY();
}
}));
Arrays.sort(actors, Comparator.comparingInt(o -> (int) -o.getY()));
for(int i=0;i<actors.length;i++)
{

View File

@@ -779,14 +779,14 @@ public class CardUtil {
System.err.println("Set code '" + code + "' not found.");
return new Deck();
}
BoosterPack cards = BoosterPack.FN_FROM_SET.apply(edition);
BoosterPack cards = BoosterPack.fromSet(edition);
return generateBoosterPackAsDeck(edition);
}
public static Deck generateBoosterPackAsDeck(CardEdition edition){
Deck d = new Deck("Booster pack");
d.setComment(edition.getCode());
d.getMain().add(BoosterPack.FN_FROM_SET.apply(edition).getCards());
d.getMain().add(BoosterPack.fromSet(edition).getCards());
return d;
}

View File

@@ -43,109 +43,106 @@ public class BiomeTexture implements Serializable {
}
private void generate() {
FThreads.invokeInEdtNowOrLater(new Runnable() {
@Override
public void run() {
FThreads.invokeInEdtNowOrLater(() -> {
if (images != null) {
for (ArrayList<Pixmap> val : images) {
if (images != null) {
for (ArrayList<Pixmap> val : images) {
for (Pixmap img : val) {
img.dispose();
}
for (Pixmap img : val) {
img.dispose();
}
images.clear();
}
images = new ArrayList<>();
if (smallImages != null) {
for (ArrayList<Pixmap> val : smallImages) {
images.clear();
}
images = new ArrayList<>();
if (smallImages != null) {
for (ArrayList<Pixmap> val : smallImages) {
for (Pixmap img : val) {
img.dispose();
}
for (Pixmap img : val) {
img.dispose();
}
smallImages.clear();
}
smallImages = new ArrayList<>();
if (edgeImages != null) {
for (IntMap<Pixmap> val : edgeImages) {
smallImages.clear();
}
smallImages = new ArrayList<>();
if (edgeImages != null) {
for (IntMap<Pixmap> val : edgeImages) {
for (IntMap.Entry<Pixmap> img : new IntMap.Entries<Pixmap>(val)) {
img.value.dispose();
}
for (IntMap.Entry<Pixmap> img : new IntMap.Entries<Pixmap>(val)) {
img.value.dispose();
}
edgeImages.clear();
}
edgeImages = new ArrayList<>();
edgeImages.clear();
}
edgeImages = new ArrayList<>();
ArrayList<TextureAtlas.AtlasRegion> regions =new ArrayList<>();
ArrayList<TextureAtlas> source =new ArrayList<>();
regions.add(Config.instance().getAtlas(data.tilesetAtlas).findRegion(data.tilesetName));
source.add(Config.instance().getAtlas(data.tilesetAtlas));
if(data.terrain!=null)
ArrayList<TextureAtlas.AtlasRegion> regions =new ArrayList<>();
ArrayList<TextureAtlas> source =new ArrayList<>();
regions.add(Config.instance().getAtlas(data.tilesetAtlas).findRegion(data.tilesetName));
source.add(Config.instance().getAtlas(data.tilesetAtlas));
if(data.terrain!=null)
{
for(BiomeTerrainData terrain:data.terrain)
{
for(BiomeTerrainData terrain:data.terrain)
TextureAtlas.AtlasRegion region = Config.instance().getAtlas(data.tilesetAtlas).findRegion(terrain.spriteName);
if(region==null)
{
TextureAtlas.AtlasRegion region = Config.instance().getAtlas(data.tilesetAtlas).findRegion(terrain.spriteName);
System.err.print("Can not find sprite "+terrain.spriteName);
continue;
}
regions.add(region);
source.add(Config.instance().getAtlas(data.tilesetAtlas));
}
}
if(data.structures!=null)
{
for(BiomeStructureData structureData:data.structures)
{
BiomeStructure structure=new BiomeStructure(structureData,0,0,0);
TextureAtlas atlas=structure.atlas ();
for(BiomeStructureData.BiomeStructureDataMapping mapping:structure.mapping())
{
TextureAtlas.AtlasRegion region = atlas.findRegion(mapping.name);
if(region==null)
{
System.err.print("Can not find sprite "+terrain.spriteName);
System.err.print("Can not find sprite "+mapping.name);
continue;
}
regions.add(region);
source.add(Config.instance().getAtlas(data.tilesetAtlas));
}
}
if(data.structures!=null)
{
for(BiomeStructureData structureData:data.structures)
{
BiomeStructure structure=new BiomeStructure(structureData,0,0,0);
TextureAtlas atlas=structure.atlas ();
for(BiomeStructureData.BiomeStructureDataMapping mapping:structure.mapping())
{
TextureAtlas.AtlasRegion region = atlas.findRegion(mapping.name);
if(region==null)
{
System.err.print("Can not find sprite "+mapping.name);
continue;
}
regions.add(region);
source.add(atlas);
}
source.add(atlas);
}
}
}
for (TextureAtlas.AtlasRegion region : regions) {
ArrayList<Pixmap> pics = new ArrayList<>();
ArrayList<Pixmap> spics = new ArrayList<>();
if(!region.getTexture().getTextureData().isPrepared())
region.getTexture().getTextureData().prepare();
Pixmap completePicture = region.getTexture().getTextureData().consumePixmap();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 3; x++) {
int px = region.getRegionX() + (x * tileSize);
int py = region.getRegionY() + (y * tileSize);
Pixmap subPixmap = new Pixmap(tileSize, tileSize, Pixmap.Format.RGBA8888);
subPixmap.drawPixmap(completePicture, 0, 0, px, py, tileSize, tileSize);
pics.add(subPixmap);
}
for (TextureAtlas.AtlasRegion region : regions) {
ArrayList<Pixmap> pics = new ArrayList<>();
ArrayList<Pixmap> spics = new ArrayList<>();
if(!region.getTexture().getTextureData().isPrepared())
region.getTexture().getTextureData().prepare();
Pixmap completePicture = region.getTexture().getTextureData().consumePixmap();
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 3; x++) {
int px = region.getRegionX() + (x * tileSize);
int py = region.getRegionY() + (y * tileSize);
Pixmap subPixmap = new Pixmap(tileSize, tileSize, Pixmap.Format.RGBA8888);
subPixmap.drawPixmap(completePicture, 0, 0, px, py, tileSize, tileSize);
pics.add(subPixmap);
}
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 6; x++) {
int px = region.getRegionX() + (x * tileSize / 2);
int py = region.getRegionY() + (y * tileSize / 2);
Pixmap subPixmap = new Pixmap(tileSize / 2, tileSize / 2, Pixmap.Format.RGBA8888);
subPixmap.drawPixmap(completePicture, 0, 0, px, py, tileSize / 2, tileSize / 2);
spics.add(subPixmap);
}
}
images.add(pics);
smallImages.add(spics);
edgeImages.add(new IntMap<>());
completePicture.dispose();
}
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 6; x++) {
int px = region.getRegionX() + (x * tileSize / 2);
int py = region.getRegionY() + (y * tileSize / 2);
Pixmap subPixmap = new Pixmap(tileSize / 2, tileSize / 2, Pixmap.Format.RGBA8888);
subPixmap.drawPixmap(completePicture, 0, 0, px, py, tileSize / 2, tileSize / 2);
spics.add(subPixmap);
}
}
images.add(pics);
smallImages.add(spics);
edgeImages.add(new IntMap<>());
completePicture.dispose();
}
});
}

View File

@@ -162,12 +162,9 @@ public class AssetsDownloader {
FSkinFont.deleteCachedFiles(); //delete cached font files in case any skin's .ttf file changed
//reload light version of skin after assets updated
FThreads.invokeInEdtAndWait(new Runnable() {
@Override
public void run() {
FSkinFont.updateAll(); //update all fonts used by splash screen
FSkin.loadLight(FSkin.getName(), splashScreen);
}
FThreads.invokeInEdtAndWait(() -> {
FSkinFont.updateAll(); //update all fonts used by splash screen
FSkin.loadLight(FSkin.getName(), splashScreen);
});
//save version string to file once assets finish downloading

View File

@@ -60,12 +60,8 @@ public abstract class FBufferedImage extends FImageComplex {
final FrameBuffer fb = frameBuffer;
if (fb != null) {
frameBuffer = null;
FThreads.invokeInEdtNowOrLater(new Runnable() {
@Override
public void run() {
fb.dispose(); //must be disposed on EDT thread
}
});
//must be disposed on EDT thread
FThreads.invokeInEdtNowOrLater(fb::dispose);
}
}

View File

@@ -43,8 +43,6 @@ import forge.toolbox.FComboBox;
import forge.toolbox.FContainer;
import forge.toolbox.FDialog;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
@@ -129,16 +127,13 @@ public class AddBasicLandsDialog extends FDialog {
cbLandSet.setFont(lblLandSet.getFont());
cbLandSet.setAutoClose(false);
cbLandSet.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
landSet = cbLandSet.getSelectedItem();
pnlPlains.refreshArtChoices();
pnlIsland.refreshArtChoices();
pnlSwamp.refreshArtChoices();
pnlMountain.refreshArtChoices();
pnlForest.refreshArtChoices();
}
cbLandSet.setChangedHandler(e -> {
landSet = cbLandSet.getSelectedItem();
pnlPlains.refreshArtChoices();
pnlIsland.refreshArtChoices();
pnlSwamp.refreshArtChoices();
pnlMountain.refreshArtChoices();
pnlForest.refreshArtChoices();
});
if (editionOptions != null && !editionOptions.isEmpty())
@@ -148,29 +143,21 @@ public class AddBasicLandsDialog extends FDialog {
cbLandSet.setSelectedItem(defaultLandSet);
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
CardPool landsToAdd = new CardPool();
pnlPlains.addToCardPool(landsToAdd);
pnlIsland.addToCardPool(landsToAdd);
pnlSwamp.addToCardPool(landsToAdd);
pnlMountain.addToCardPool(landsToAdd);
pnlForest.addToCardPool(landsToAdd);
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> {
CardPool landsToAdd = new CardPool();
pnlPlains.addToCardPool(landsToAdd);
pnlIsland.addToCardPool(landsToAdd);
pnlSwamp.addToCardPool(landsToAdd);
pnlMountain.addToCardPool(landsToAdd);
pnlForest.addToCardPool(landsToAdd);
hide();
hide();
if (landsToAdd.countAll() > 0) {
callback.run(landsToAdd);
}
}
});
initButton(1, Forge.getLocalizer().getMessage("lblCancel"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
if (landsToAdd.countAll() > 0) {
callback.run(landsToAdd);
}
});
initButton(1, Forge.getLocalizer().getMessage("lblCancel"), e -> hide());
//initialize land counts based on current deck contents
int halfCountW = 0; //track half shard count for each color to add to symbol count only if a full symbol is also found
@@ -324,33 +311,24 @@ public class AddBasicLandsDialog extends FDialog {
cardPanel = add(new LandCardPanel());
cbLandArt = add(new FComboBox<>());
cbLandArt.setFont(cbLandSet.getFont());
cbLandArt.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
int artIndex = cbLandArt.getSelectedIndex();
if (artIndex < 0) { return; }
card = generateCard(artIndex); //generate card for display
}
cbLandArt.setChangedHandler(e -> {
int artIndex = cbLandArt.getSelectedIndex();
if (artIndex < 0) { return; }
card = generateCard(artIndex); //generate card for display
});
lblCount = add(new FLabel.Builder().text("0").font(FSkinFont.get(18)).align(Align.center).build());
btnSubtract = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (count > 0) {
count--;
lblCount.setText(String.valueOf(count));
updateDeckInfoLabel();
}
btnSubtract = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS).command(e -> {
if (count > 0) {
count--;
lblCount.setText(String.valueOf(count));
updateDeckInfoLabel();
}
}).build());
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (maxCount == 0 || count < maxCount) {
count++;
lblCount.setText(String.valueOf(count));
updateDeckInfoLabel();
}
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(e -> {
if (maxCount == 0 || count < maxCount) {
count++;
lblCount.setText(String.valueOf(count));
updateDeckInfoLabel();
}
}).build());
}

View File

@@ -49,90 +49,20 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
private static final float HEADER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f);
public enum EditorType {
Constructed(new DeckController<>(FModel.getDecks().getConstructed(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), null),
Draft(new DeckController<>(FModel.getDecks().getDraft(), new Supplier<DeckGroup>() {
@Override
public DeckGroup get() {
return new DeckGroup("");
}
}), null),
Sealed(new DeckController<>(FModel.getDecks().getSealed(), new Supplier<DeckGroup>() {
@Override
public DeckGroup get() {
return new DeckGroup("");
}
}), null),
Winston(new DeckController<>(FModel.getDecks().getWinston(), new Supplier<DeckGroup>() {
@Override
public DeckGroup get() {
return new DeckGroup("");
}
}), null),
Commander(new DeckController<>(FModel.getDecks().getCommander(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), null),
Oathbreaker(new DeckController<>(FModel.getDecks().getOathbreaker(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), null),
TinyLeaders(new DeckController<>(FModel.getDecks().getTinyLeaders(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), DeckFormat.TinyLeaders.isLegalCardPredicate()),
Brawl(new DeckController<>(FModel.getDecks().getBrawl(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), DeckFormat.Brawl.isLegalCardPredicate()),
Archenemy(new DeckController<>(FModel.getDecks().getScheme(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), null),
Planechase(new DeckController<>(FModel.getDecks().getPlane(), new Supplier<Deck>() {
@Override
public Deck get() {
return new Deck();
}
}), null),
Quest(new DeckController<>(null, new Supplier<Deck>() { //delay setting root folder until quest loaded
@Override
public Deck get() {
return new Deck();
}
}), null),
QuestCommander(new DeckController<>(null, new Supplier<Deck>() { //delay setting root folder until quest loaded
@Override
public Deck get() {
return new Deck();
}
}), null),
QuestDraft(new DeckController<>(null, new Supplier<DeckGroup>() { //delay setting root folder until quest loaded
@Override
public DeckGroup get() {
return new DeckGroup("");
}
}), null),
PlanarConquest(new DeckController<>(null, new Supplier<Deck>() { //delay setting root folder until conquest loaded
@Override
public Deck get() {
return new Deck();
}
}), null);
Constructed(new DeckController<>(FModel.getDecks().getConstructed(), (Supplier<Deck>) Deck::new), null),
Draft(new DeckController<>(FModel.getDecks().getDraft(), (Supplier<DeckGroup>) DeckGroup::new), null),
Sealed(new DeckController<>(FModel.getDecks().getSealed(), (Supplier<DeckGroup>) DeckGroup::new), null),
Winston(new DeckController<>(FModel.getDecks().getWinston(), (Supplier<DeckGroup>) DeckGroup::new), null),
Commander(new DeckController<>(FModel.getDecks().getCommander(), (Supplier<Deck>) Deck::new), null),
Oathbreaker(new DeckController<>(FModel.getDecks().getOathbreaker(), (Supplier<Deck>) Deck::new), null),
TinyLeaders(new DeckController<>(FModel.getDecks().getTinyLeaders(), (Supplier<Deck>) Deck::new), DeckFormat.TinyLeaders.isLegalCardPredicate()),
Brawl(new DeckController<>(FModel.getDecks().getBrawl(), (Supplier<Deck>) Deck::new), DeckFormat.Brawl.isLegalCardPredicate()),
Archenemy(new DeckController<>(FModel.getDecks().getScheme(), (Supplier<Deck>) Deck::new), null),
Planechase(new DeckController<>(FModel.getDecks().getPlane(), (Supplier<Deck>) Deck::new), null),
Quest(new DeckController<>(null, (Supplier<Deck>) Deck::new), null), //delay setting root folder until quest loaded
QuestCommander(new DeckController<>(null, (Supplier<Deck>) Deck::new), null),
QuestDraft(new DeckController<>(null, (Supplier<DeckGroup>) DeckGroup::new), null),
PlanarConquest(new DeckController<>(null, (Supplier<Deck>) Deck::new), null);
private static final Set<EditorType> LIMITED_TYPES = Collections.unmodifiableSet(
EnumSet.of(Draft, Sealed, Winston, QuestDraft)
@@ -450,12 +380,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
if(allowsSave())
{
btnSave.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
save(null);
}
});
btnSave.setCommand(e -> save(null));
}
else
{
@@ -463,17 +388,15 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
}
btnMoreOptions.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
public void handleEvent(FEvent fEvent) {
FPopupMenu menu = new FPopupMenu() {
@Override
protected void buildMenu() {
final Localizer localizer = Forge.getLocalizer();
if (allowsAddBasic())
addItem(new FMenuItem(localizer.getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
CardEdition defaultLandSet;
switch (editorType) {
addItem(new FMenuItem(localizer.getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, e -> {
CardEdition defaultLandSet;
switch (editorType) {
case Draft:
case Sealed:
case QuestDraft:
@@ -491,124 +414,103 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
default:
defaultLandSet = DeckProxy.getDefaultLandSet(deck);
break;
}
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, new Callback<CardPool>() {
@Override
public void run(CardPool landsToAdd) {
getMainDeckPage().addCards(landsToAdd);
}
},null);
dialog.show();
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog
}
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, new Callback<CardPool>() {
@Override
public void run(CardPool landsToAdd) {
getMainDeckPage().addCards(landsToAdd);
}
}, null);
dialog.show();
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog
}));
if (allowsAddExtraSection()) {
addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
List<String> options = hiddenExtraSections.stream().map(FDeckEditor::labelFromDeckSection).collect(Collectors.toList());
GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, new Callback<String>() {
@Override
public void run(String result) {
if(result == null || !options.contains(result))
return;
DeckSection newSection = hiddenExtraSections.get(options.indexOf(result));
showExtraSectionTab(newSection);
filterCatalogForExtraSection(newSection);
getCatalogPage().scheduleRefresh();
setSelectedPage(getCatalogPage());
}
});
}
addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, e -> {
List<String> options = hiddenExtraSections.stream().map(FDeckEditor::labelFromDeckSection).collect(Collectors.toList());
GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, new Callback<String>() {
@Override
public void run(String result) {
if (result == null || !options.contains(result))
return;
DeckSection newSection = hiddenExtraSections.get(options.indexOf(result));
showExtraSectionTab(newSection);
filterCatalogForExtraSection(newSection);
getCatalogPage().scheduleRefresh();
setSelectedPage(getCatalogPage());
}
});
}));
}
if (!isLimitedEditor()) {
addItem(new FMenuItem(localizer.getMessage("lblImportFromClipboard"), Forge.hdbuttons ? FSkinImage.HDIMPORT : FSkinImage.OPEN, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), editorType);
dialog.setCallback(new Callback<Deck>() {
@Override
public void run(Deck importedDeck) {
if (deck != null && importedDeck.hasName()) {
deck.setName(importedDeck.getName());
lblName.setText(importedDeck.getName());
addItem(new FMenuItem(localizer.getMessage("lblImportFromClipboard"), Forge.hdbuttons ? FSkinImage.HDIMPORT : FSkinImage.OPEN, e -> {
FDeckImportDialog dialog = new FDeckImportDialog(!deck.isEmpty(), editorType);
dialog.setCallback(new Callback<Deck>() {
@Override
public void run(Deck importedDeck) {
if (deck != null && importedDeck.hasName()) {
deck.setName(importedDeck.getName());
lblName.setText(importedDeck.getName());
}
if (dialog.createNewDeck()) {
for (Entry<DeckSection, CardPool> section : importedDeck) {
DeckSectionPage page = getPageForSection(section.getKey());
if (page != null)
page.setCards(section.getValue());
}
if (dialog.createNewDeck()) {
for(Entry<DeckSection, CardPool> section : importedDeck)
{
DeckSectionPage page = getPageForSection(section.getKey());
if(page != null)
page.setCards(section.getValue());
}
} else {
for(Entry<DeckSection, CardPool> section : importedDeck)
{
DeckSectionPage page = getPageForSection(section.getKey());
if(page != null)
page.addCards(section.getValue());
}
} else {
for (Entry<DeckSection, CardPool> section : importedDeck) {
DeckSectionPage page = getPageForSection(section.getKey());
if (page != null)
page.addCards(section.getValue());
}
}
}
});
dialog.show();
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck if visible below dialog
}));
if (allowsSave())
addItem(new FMenuItem(localizer.getMessage("lblSaveAs"), Forge.hdbuttons ? FSkinImage.HDSAVEAS : FSkinImage.SAVEAS, e -> {
String defaultName = editorType.getController().getNextAvailableName();
FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, new Callback<String>() {
@Override
public void run(String result) {
if (!StringUtils.isEmpty(result)) {
editorType.getController().saveAs(result);
}
}
});
dialog.show();
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck if visible below dialog
}
}));
if(allowsSave())
addItem(new FMenuItem(localizer.getMessage("lblSaveAs"), Forge.hdbuttons ? FSkinImage.HDSAVEAS : FSkinImage.SAVEAS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
String defaultName = editorType.getController().getNextAvailableName();
FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, new Callback<String>() {
@Override
public void run(String result) {
if (!StringUtils.isEmpty(result)) {
editorType.getController().saveAs(result);
}
}
});
}
}));
}
if (allowRename()) {
addItem(new FMenuItem(localizer.getMessage("lblRenameDeck"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FOptionPane.showInputDialog(localizer.getMessage("lblNewNameDeck"), deck.getName(), new Callback<String>() {
addItem(new FMenuItem(localizer.getMessage("lblRenameDeck"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, e -> FOptionPane.showInputDialog(
localizer.getMessage("lblNewNameDeck"), deck.getName(), new Callback<String>() {
@Override
public void run(String result) {
editorType.getController().rename(result);
}
});
}
}));
}))
);
}
if (allowDelete()) {
addItem(new FMenuItem(localizer.getMessage("lblDeleteDeck"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FOptionPane.showConfirmDialog(
localizer.getMessage("lblConfirmDelete") + " '" + deck.getName() + "'?",
localizer.getMessage("lblDeleteDeck"), localizer.getMessage("lblDelete"), localizer.getMessage("lblCancel"), false, new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
editorType.getController().delete();
Forge.back();
}
}
});
}
}));
addItem(new FMenuItem(localizer.getMessage("lblDeleteDeck"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, e -> FOptionPane.showConfirmDialog(
localizer.getMessage("lblConfirmDelete") + " '" + deck.getName() + "'?",
localizer.getMessage("lblDeleteDeck"),
localizer.getMessage("lblDelete"),
localizer.getMessage("lblCancel"), false,
new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
editorType.getController().delete();
Forge.back();
}
}
}))
);
}
addItem(new FMenuItem(localizer.getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FDeckViewer.copyDeckToClipboard(deck);
}
}));
((DeckEditorPage)getSelectedPage()).buildDeckMenu(this);
addItem(new FMenuItem(localizer.getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, e -> FDeckViewer.copyDeckToClipboard(deck)));
((DeckEditorPage) getSelectedPage()).buildDeckMenu(this);
}
};
menu.show(btnMoreOptions, 0, btnMoreOptions.getHeight());
@@ -1211,14 +1113,11 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
if (!StringUtils.isEmpty(dest)) {
label += " " + dest;
}
menu.addItem(new FMenuItem(label, icon, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (max == 1) {
callback.run(max);
} else {
GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback);
}
menu.addItem(new FMenuItem(label, icon, e -> {
if (max == 1) {
callback.run(max);
} else {
GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback);
}
}));
}
@@ -1705,50 +1604,41 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
//add option to add or remove card from favorites
final CardPreferences prefs = CardPreferences.getPrefs(card);
if (prefs.getStarCount() == 0) {
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAddFavorites"), Forge.hdbuttons ? FSkinImage.HDSTAR_FILLED : FSkinImage.STAR_FILLED, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
prefs.setStarCount(1);
CardPreferences.save();
}
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAddFavorites"), Forge.hdbuttons ? FSkinImage.HDSTAR_FILLED : FSkinImage.STAR_FILLED, e -> {
prefs.setStarCount(1);
CardPreferences.save();
}));
} else {
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFavorites"), Forge.hdbuttons ? FSkinImage.HDSTAR_OUTLINE : FSkinImage.STAR_OUTLINE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
prefs.setStarCount(0);
CardPreferences.save();
}
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFavorites"), Forge.hdbuttons ? FSkinImage.HDSTAR_OUTLINE : FSkinImage.STAR_OUTLINE, e -> {
prefs.setStarCount(0);
CardPreferences.save();
}));
}
//if card has more than one art option, add item to change user's preferred art
final List<PaperCard> artOptions = FModel.getMagicDb().getCommonCards().getAllCardsNoAlt(card.getName());
if (artOptions.size() > 1) {
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblChangePreferredArt"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
//sort options so current option is on top and selected by default
List<PaperCard> sortedOptions = new ArrayList<>();
sortedOptions.add(card);
for (PaperCard option : artOptions) {
if (option != card) {
sortedOptions.add(option);
menu.addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblChangePreferredArt"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, e -> {
//sort options so current option is on top and selected by default
List<PaperCard> sortedOptions = new ArrayList<>();
sortedOptions.add(card);
for (PaperCard option : artOptions) {
if (option != card) {
sortedOptions.add(option);
}
}
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectPreferredArt") + " " + card.getName(), sortedOptions, new Callback<PaperCard>() {
@Override
public void run(PaperCard result) {
if (result != null) {
if (result != card) {
cardManager.replaceAll(card, result);
}
prefs.setPreferredArt(result.getEdition(), result.getArtIndex());
CardPreferences.save();
}
}
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectPreferredArt") + " " + card.getName(), sortedOptions, new Callback<PaperCard>() {
@Override
public void run(PaperCard result) {
if (result != null) {
if (result != card) {
cardManager.replaceAll(card, result);
}
prefs.setPreferredArt(result.getEdition(), result.getArtIndex());
CardPreferences.save();
}
}
});
}
});
}));
}
}
@@ -1757,14 +1647,11 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
@Override
protected void buildDeckMenu(FPopupMenu menu) {
if (cardManager.getConfig().getShowUniqueCardsOption()) {
menu.addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
boolean wantUnique = !cardManager.getWantUnique();
cardManager.setWantUnique(wantUnique);
refresh();
cardManager.getConfig().setUniqueCardsOnly(wantUnique);
}
menu.addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), e -> {
boolean wantUnique = !cardManager.getWantUnique();
cardManager.setWantUnique(wantUnique);
refresh();
cardManager.getConfig().setUniqueCardsOnly(wantUnique);
}));
}
}

View File

@@ -33,8 +33,6 @@ import forge.gui.util.SOptionPane;
import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox;
import forge.toolbox.FDialog;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FOptionPane;
import forge.toolbox.FTextArea;
import forge.util.Callback;
@@ -93,56 +91,40 @@ public class FDeckImportDialog extends FDialog {
this.currentDeckIsEmpty = !replacingDeck;
this.createNewDeckControl = replacingDeck;
initButton(0, Forge.getLocalizer().getMessage("lblImport"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
List<DeckRecognizer.Token> tokens = controller.parseInput(txtInput.getText()); //ensure deck updated based on any changes to options
initButton(0, Forge.getLocalizer().getMessage("lblImport"), e -> FThreads.invokeInBackgroundThread(() -> {
List<DeckRecognizer.Token> tokens = controller.parseInput(txtInput.getText()); //ensure deck updated based on any changes to options
if (controller.isSmartCardArtEnabled())
tokens = controller.optimiseCardArtInTokens();
if (controller.isSmartCardArtEnabled())
tokens = controller.optimiseCardArtInTokens();
//if there are any cards that cannot be imported, let user know this and give them the option to cancel
StringBuilder sb = new StringBuilder();
for (DeckRecognizer.Token token : tokens) {
if (token.getType() == TokenType.CARD_FROM_NOT_ALLOWED_SET
|| token.getType() == TokenType.CARD_FROM_INVALID_SET
|| token.getType() == TokenType.UNKNOWN_CARD
|| token.getType() == TokenType.UNSUPPORTED_CARD) {
if (sb.length() > 0)
sb.append("\n");
sb.append(token.getQuantity()).append(" ").append(token.getText());
}
}
if (sb.length() > 0) {
if (SOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, Forge.getLocalizer().getMessage("lblImportRemainingCards"), SOptionPane.INFORMATION_ICON, importOrCancel) == 1) {
return;
}
}
final Deck deck = controller.accept(); //must accept in background thread in case a dialog is shown
if (deck == null) { return; }
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
hide();
if (callback != null)
callback.run(deck);
}
});
}
});
//if there are any cards that cannot be imported, let user know this and give them the option to cancel
StringBuilder sb = new StringBuilder();
for (DeckRecognizer.Token token : tokens) {
if (token.getType() == TokenType.CARD_FROM_NOT_ALLOWED_SET
|| token.getType() == TokenType.CARD_FROM_INVALID_SET
|| token.getType() == TokenType.UNKNOWN_CARD
|| token.getType() == TokenType.UNSUPPORTED_CARD) {
if (sb.length() > 0)
sb.append("\n");
sb.append(token.getQuantity()).append(" ").append(token.getText());
}
}
});
initButton(1, Forge.getLocalizer().getMessage("lblCancel"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (sb.length() > 0) {
if (SOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblFollowingCardsCannotBeImported") + "\n\n" + sb, Forge.getLocalizer().getMessage("lblImportRemainingCards"), SOptionPane.INFORMATION_ICON, importOrCancel) == 1) {
return;
}
}
final Deck deck = controller.accept(); //must accept in background thread in case a dialog is shown
if (deck == null) { return; }
FThreads.invokeInEdtLater(() -> {
hide();
}
});
if (callback != null)
callback.run(deck);
});
}));
initButton(1, Forge.getLocalizer().getMessage("lblCancel"), e -> hide());
List<DeckRecognizer.Token> tokens = controller.parseInput(txtInput.getText());
if (controller.isSmartCardArtEnabled())
@@ -152,32 +134,13 @@ public class FDeckImportDialog extends FDialog {
if (token.getType() == TokenType.LEGAL_CARD) {
showOptions = true;
dateTimeCheck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
updateDropDownEnabled();
}
});
newEditionCheck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {setArtPreferenceInController();}
});
onlyCoreExpCheck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {setArtPreferenceInController();}
});
smartCardArtCheck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
controller.setSmartCardArtOptimisation(smartCardArtCheck.isSelected());
}
});
createNewDeckCheck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
createNewDeckControl = createNewDeckCheck.isSelected();
controller.setCreateNewDeck(createNewDeckControl);
}
dateTimeCheck.setCommand(e -> updateDropDownEnabled());
newEditionCheck.setCommand(e -> setArtPreferenceInController());
onlyCoreExpCheck.setCommand(e -> setArtPreferenceInController());
smartCardArtCheck.setCommand(e -> controller.setSmartCardArtOptimisation(smartCardArtCheck.isSelected()));
createNewDeckCheck.setCommand(e -> {
createNewDeckControl = createNewDeckCheck.isSelected();
controller.setCreateNewDeck(createNewDeckControl);
});
updateDropDownEnabled();
setArtPreferenceInController();

View File

@@ -16,8 +16,6 @@ import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.screens.FScreen;
import forge.screens.match.MatchController;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FOptionPane;
public class FDeckViewer extends FScreen {
@@ -62,23 +60,13 @@ public class FDeckViewer extends FScreen {
break;
}
FMenuItem item = new FMenuItem(captionPrefix + " (" + count + ")", icon, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckViewer.setCurrentSection(section);
}
});
FMenuItem item = new FMenuItem(captionPrefix + " (" + count + ")", icon, e -> deckViewer.setCurrentSection(section));
if (section == deckViewer.currentSection) {
item.setSelected(true);
}
addItem(item);
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
copyDeckToClipboard(deckViewer.deck);
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, e -> copyDeckToClipboard(deckViewer.deck)));
}
};

View File

@@ -15,8 +15,6 @@ import forge.menu.FMenuItem;
import forge.screens.FScreen;
import forge.screens.TabPageScreen;
import forge.toolbox.FDialog;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.GuiChoose;
import forge.util.Callback;
@@ -29,12 +27,7 @@ public class FSideboardDialog extends FDialog {
callback = callback0;
tabs = add(new SideboardTabs(sideboard, main));
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
}
});
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> hide());
if (sideboard.isEmpty()) { //show main deck by default if sideboard is empty
tabs.setSelectedPage(tabs.getMainDeckPage());
}
@@ -89,12 +82,7 @@ public class FSideboardDialog extends FDialog {
protected TabPageBase(CardPool cardPool, FImage icon0) {
super("", icon0);
cardManager.setItemActivateHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
onCardActivated(cardManager.getSelectedItem());
}
});
cardManager.setItemActivateHandler(e -> onCardActivated(cardManager.getSelectedItem()));
cardManager.setContextMenuBuilder(new ContextMenuBuilder<PaperCard>() {
@Override
public void buildMenu(final FDropDownMenu menu, final PaperCard card) {
@@ -121,17 +109,14 @@ public class FSideboardDialog extends FDialog {
if (!StringUtils.isEmpty(dest)) {
label += " " + dest;
}
menu.addItem(new FMenuItem(label, icon, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
PaperCard card = cardManager.getSelectedItem();
int max = cardManager.getItemCount(card);
if (max == 1) {
callback.run(max);
}
else {
GuiChoose.getInteger(card + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback);
}
menu.addItem(new FMenuItem(label, icon, e -> {
PaperCard card = cardManager.getSelectedItem();
int max = cardManager.getItemCount(card);
if (max == 1) {
callback.run(max);
}
else {
GuiChoose.getInteger(card + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback);
}
}));
}

View File

@@ -7,7 +7,6 @@ import forge.itemmanager.ItemManagerConfig;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.Aggregates;
import forge.util.Utils;
@@ -44,18 +43,10 @@ public class FVanguardChooser extends FScreen {
public FVanguardChooser(boolean isAi0, FEventHandler selectionChangedHandler) {
super("");
isAi = isAi0;
lstVanguards.setItemActivateHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.back();
}
});
btnRandom.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
selectRandom();
Forge.back();
}
lstVanguards.setItemActivateHandler(e -> Forge.back());
btnRandom.setCommand(e -> {
selectRandom();
Forge.back();
});
lstVanguards.setup(ItemManagerConfig.VANGUARDS);
lstVanguards.setPool(isAi ? allAiAvatars : allHumanAvatars, true);

View File

@@ -10,8 +10,6 @@ import forge.assets.FSkinFont;
import forge.gui.error.BugReporter;
import forge.screens.FScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FScrollPane;
import forge.toolbox.FTextArea;
import forge.util.Callback;
@@ -41,32 +39,14 @@ public class BugReportDialog extends FScreen { //use screen rather than dialog s
super(title);
lblHeader.setFont(FSkinFont.get(12));
tvDetails = add(new TemplateView(text0));
btnReport.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
BugReporter.sendSentry();
Forge.back();
}
});
btnSave.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
BugReporter.saveToFile(tvDetails.text);
}
});
btnDiscard.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.back();
}
btnReport.setCommand(e -> {
BugReporter.sendSentry();
Forge.back();
});
btnSave.setCommand(e -> BugReporter.saveToFile(tvDetails.text));
btnDiscard.setCommand(e -> Forge.back());
if (showExitAppBtn) {
btnExit.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.exit(true);
}
});
btnExit.setCommand(e -> Forge.exit(true));
}
else {
btnExit.setVisible(false);

View File

@@ -17,13 +17,7 @@
*/
package forge.itemmanager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import com.badlogic.gdx.Gdx;
@@ -213,7 +207,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
cols.add(colOverrides.get(colConfig.getDef()));
}
}
Collections.sort(cols, (arg0, arg1) -> Integer.compare(arg0.getConfig().getIndex(), arg1.getConfig().getIndex()));
Collections.sort(cols, Comparator.comparingInt(arg0 -> arg0.getConfig().getIndex()));
sortCols.clear();
if (cbxSortOptions != null) {
@@ -788,7 +782,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
Iterable<Entry<T, Integer>> items = pool;
if (useFilter) {
Predicate<Entry<T, Integer>> pred = Predicates.compose(filterPredicate, pool.FN_GET_KEY);
Predicate<Entry<T, Integer>> pred = Predicates.compose(filterPredicate, (Function<Entry<T, Integer>, T>) Entry::getKey);
items = Iterables.filter(pool, pred);
}
model.addItems(items);

View File

@@ -146,27 +146,15 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
protected void buildMenu() {
//add a menu item for each filter to allow easily editing just that filter
for (final IFilterControl<T> control : model.getControls()) {
FMenuItem item = new FMenuItem(control.getFilter().toString(), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
model.editFilterControl(control, onFilterChange);
}
});
FMenuItem item = new FMenuItem(control.getFilter().toString(), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT,
e -> model.editFilterControl(control, onFilterChange));
item.setTextRenderer(new TextRenderer()); //ensure symbols are displayed
addItem(item);
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblEditExpression"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
edit();
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFilter"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
reset();
itemManager.applyNewOrModifiedFilter(AdvancedSearchFilter.this);
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblEditExpression"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, e -> edit()));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFilter"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, e -> {
reset();
itemManager.applyNewOrModifiedFilter(AdvancedSearchFilter.this);
}));
}
};

View File

@@ -30,6 +30,6 @@ public class CardCMCFilter extends ValueRangeFilter<PaperCard> {
if (predicate == null) {
return Predicates.alwaysTrue();
}
return Predicates.compose(predicate, PaperCard.FN_GET_RULES);
return Predicates.compose(predicate, PaperCard::getRules);
}
}

View File

@@ -30,6 +30,6 @@ public class CardColorlessCostFilter extends ValueRangeFilter<PaperCard> {
if (predicate == null) {
return Predicates.alwaysTrue();
}
return Predicates.compose(predicate, PaperCard.FN_GET_RULES);
return Predicates.compose(predicate, PaperCard::getRules);
}
}

View File

@@ -31,6 +31,6 @@ public class CardPowerFilter extends ValueRangeFilter<PaperCard> {
return Predicates.alwaysTrue();
}
predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE);
return Predicates.compose(predicate, PaperCard.FN_GET_RULES);
return Predicates.compose(predicate, PaperCard::getRules);
}
}

View File

@@ -20,19 +20,16 @@ public class CardRarityFilter extends ComboBoxFilter<PaperCard, CardRarity> {
@Override
protected String getDisplayText(CardRarity value) {
return CardRarity.FN_GET_LONG_NAME.apply(value);
return value.getLongName();
}
@Override
protected Predicate<PaperCard> buildPredicate() {
return new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard input) {
if (filterValue == null) {
return true;
}
return input.getRarity() == filterValue;
return input -> {
if (filterValue == null) {
return true;
}
return input.getRarity() == filterValue;
};
}
}

View File

@@ -31,6 +31,6 @@ public class CardToughnessFilter extends ValueRangeFilter<PaperCard> {
return Predicates.alwaysTrue();
}
predicate = Predicates.and(predicate, CardRulesPredicates.Presets.IS_CREATURE);
return Predicates.compose(predicate, PaperCard.FN_GET_RULES);
return Predicates.compose(predicate, PaperCard::getRules);
}
}

View File

@@ -48,13 +48,9 @@ public class CardTypeFilter extends StatTypeFilter<PaperCard> {
}
if (types.size() == buttonMap.size()) {
return new Predicate<PaperCard>() { //use custom return true delegate to validate the item is a card
@Override
public boolean apply(PaperCard card) {
return true;
}
};
//use custom return true delegate to validate the item is a card
return card -> true;
}
return Predicates.compose(Predicates.or(types), PaperCard.FN_GET_RULES);
return Predicates.compose(Predicates.or(types), PaperCard::getRules);
}
}

View File

@@ -5,8 +5,6 @@ import forge.item.InventoryItem;
import forge.itemmanager.ItemManager;
import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public abstract class ComboBoxFilter<T extends InventoryItem, V> extends ItemFilter<T> {
protected V filterValue;
@@ -39,24 +37,20 @@ public abstract class ComboBoxFilter<T extends InventoryItem, V> extends ItemFil
comboBox.setFont(FSkinFont.get(12));
comboBox.addItem(allText);
comboBox.setChangedHandler(new FEventHandler() {
@SuppressWarnings("unchecked")
@Override
public void handleEvent(FEvent e) {
if (preventHandling) { return; }
comboBox.setChangedHandler(e -> {
if (preventHandling) { return; }
int index = comboBox.getSelectedIndex();
if (index == -1) {
//Do nothing when index set to -1
}
else if (index == 0) {
filterValue = null;
applyChange();
}
else {
filterValue = (V)comboBox.getSelectedItem();
applyChange();
}
int index = comboBox.getSelectedIndex();
if (index == -1) {
//Do nothing when index set to -1
}
else if (index == 0) {
filterValue = null;
applyChange();
}
else {
filterValue = (V)comboBox.getSelectedItem();
applyChange();
}
});
}

View File

@@ -30,17 +30,14 @@ public class DeckFolderFilter extends ListLabelFilter<DeckProxy> {
@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 input -> {
String path = input.getPath();
for (String folder : folders) {
if (path.startsWith(folder)) {
return true;
}
return false;
}
return false;
};
}

View File

@@ -24,11 +24,6 @@ public class DeckFormatFilter extends FormatFilter<DeckProxy> {
if (format == null) {
return Predicates.alwaysTrue();
}
return new Predicate<DeckProxy>() {
@Override
public boolean apply(DeckProxy input) {
return format.isDeckLegal(input.getDeck());
}
};
return input -> format.isDeckLegal(input.getDeck());
}
}

View File

@@ -22,8 +22,6 @@ import forge.screens.settings.SettingsScreen;
import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FGroupList;
import forge.toolbox.FList;
import forge.util.Callback;
@@ -50,44 +48,38 @@ public abstract class FormatFilter<T extends InventoryItem> extends ItemFilter<T
cbxFormats.setEnabled(!Forge.isMobileAdventureMode);
selectedFormat = cbxFormats.getText();
cbxFormats.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (preventHandling) { return; }
cbxFormats.setChangedHandler(e -> {
if (preventHandling) { return; }
int index = cbxFormats.getSelectedIndex();
if (index == -1) {
//Do nothing when index set to -1
}
else if (index == 0) {
format = null;
int index = cbxFormats.getSelectedIndex();
if (index == -1) {
//Do nothing when index set to -1
}
else if (index == 0) {
format = null;
applyChange();
}
else if (index == cbxFormats.getItemCount() - 2) {
preventHandling = true;
cbxFormats.setText(selectedFormat); //restore previous selection by default
preventHandling = false;
ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect();
archivedFormatSelect.setOnCloseCallBack(() -> {
format = archivedFormatSelect.getSelectedFormat();
cbxFormats.setText(format.getName());
applyChange();
}
else if (index == cbxFormats.getItemCount() - 2) {
preventHandling = true;
cbxFormats.setText(selectedFormat); //restore previous selection by default
preventHandling = false;
ArchivedFormatSelect archivedFormatSelect = new ArchivedFormatSelect();
archivedFormatSelect.setOnCloseCallBack(new Runnable(){
@Override
public void run() {
format = archivedFormatSelect.getSelectedFormat();
cbxFormats.setText(format.getName());
applyChange();
}
});
Forge.openScreen(archivedFormatSelect);
}
else if (index == cbxFormats.getItemCount() - 1) {
preventHandling = true;
cbxFormats.setText(selectedFormat); //restore previous selection by default
preventHandling = false;
Forge.openScreen(new MultiSetSelect());
}
else {
format = (GameFormat)cbxFormats.getSelectedItem();
applyChange();
}
});
Forge.openScreen(archivedFormatSelect);
}
else if (index == cbxFormats.getItemCount() - 1) {
preventHandling = true;
cbxFormats.setText(selectedFormat); //restore previous selection by default
preventHandling = false;
Forge.openScreen(new MultiSetSelect());
}
else {
format = (GameFormat)cbxFormats.getSelectedItem();
applyChange();
}
});
}

View File

@@ -45,16 +45,13 @@ public abstract class ItemFilter<T extends InventoryItem> {
public final <U extends InventoryItem> Predicate<U> buildPredicate(Class<U> genericType) {
final Predicate<T> predicate = buildPredicate();
return new Predicate<U>() {
@SuppressWarnings("unchecked")
@Override
public boolean apply(U item) {
try {
return predicate.apply((T)item);
}
catch (Exception ex) {
return showUnsupportedItem(item); //if can't cast U to T, filter item out unless derived class can handle it
}
return item -> {
try {
//noinspection unchecked
return predicate.apply((T)item);
}
catch (Exception ex) {
return showUnsupportedItem(item); //if can't cast U to T, filter item out unless derived class can handle it
}
};
}

View File

@@ -10,8 +10,6 @@ import forge.itemmanager.ItemManager;
import forge.itemmanager.SFilterUtil;
import forge.itemmanager.SItemManagerUtil;
import forge.itemmanager.SItemManagerUtil.StatTypes;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
public abstract class StatTypeFilter<T extends InventoryItem> extends ToggleButtonsFilter<T> {
@@ -27,14 +25,11 @@ public abstract class StatTypeFilter<T extends InventoryItem> extends ToggleButt
buttonMap.put(st, button);
//hook so long-pressing a button toggles itself on and toggles off all other buttons
button.setLongPressHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lockFiltering = true;
SFilterUtil.showOnlyStat(st, button, buttonMap);
lockFiltering = false;
applyChange();
}
button.setLongPressHandler(e -> {
lockFiltering = true;
SFilterUtil.showOnlyStat(st, button, buttonMap);
lockFiltering = false;
applyChange();
});
}

View File

@@ -11,8 +11,6 @@ import forge.item.InventoryItem;
import forge.itemmanager.ItemManager;
import forge.itemmanager.SFilterUtil;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FTextField;
@@ -52,12 +50,7 @@ public class TextSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
txtSearch = new SearchField();
widget.add(txtSearch);
txtSearch.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
applyChange();
}
});
txtSearch.setChangedHandler(e -> applyChange());
}
@Override

View File

@@ -72,12 +72,9 @@ public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemF
.icon(icon).iconScaleFactor(1f)
.align(Align.center)
.selectable(true).selected(true)
.command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (lockFiltering) { return; }
applyChange();
}
.command(e -> {
if (lockFiltering) { return; }
applyChange();
}));
}

View File

@@ -9,8 +9,6 @@ import forge.item.InventoryItem;
import forge.itemmanager.ItemManager;
import forge.itemmanager.SFilterUtil;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FSpinner;
import forge.util.ComparableOp;
@@ -60,24 +58,18 @@ public abstract class ValueRangeFilter<T extends InventoryItem> extends ItemFilt
upperBound = addSpinner(widget, false);
lowerBound.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (upperBound.getValue() < lowerBound.getValue()) {
upperBound.setValue(lowerBound.getValue());
}
applyChange();
lowerBound.setChangedHandler(e -> {
if (upperBound.getValue() < lowerBound.getValue()) {
upperBound.setValue(lowerBound.getValue());
}
applyChange();
});
upperBound.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (lowerBound.getValue() > upperBound.getValue()) {
lowerBound.setValue(upperBound.getValue());
}
applyChange();
upperBound.setChangedHandler(e -> {
if (lowerBound.getValue() > upperBound.getValue()) {
lowerBound.setValue(upperBound.getValue());
}
applyChange();
});
}

View File

@@ -209,12 +209,7 @@ public abstract class FScreen extends FContainer {
protected final FLabel btnBack, lblCaption;
public DefaultHeader(String headerCaption) {
btnBack = add(new FLabel.Builder().icon(new BackIcon(HEIGHT, HEIGHT)).pressedColor(getBtnPressedColor()).align(Align.center).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.back();
}
}).build());
btnBack = add(new FLabel.Builder().icon(new BackIcon(HEIGHT, HEIGHT)).pressedColor(getBtnPressedColor()).align(Align.center).command(e -> Forge.back()).build());
lblCaption = add(new FLabel.Builder().text(headerCaption).font(FONT).align(Align.center).build());
}

View File

@@ -4,24 +4,15 @@ import forge.Forge;
import forge.menu.FPopupMenu;
import forge.screens.match.views.VPrompt;
import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public abstract class MultiStepWizardScreen<T> extends FScreen {
protected final WizardStep<T>[] steps;
protected final T model;
private WizardStep<T> currentStep;
private final VPrompt prompt = add(new VPrompt(Forge.getLocalizer().getMessage("lblBack"), Forge.getLocalizer().getMessage("lblNext"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
advanceStep(-1);
}
}, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
advanceStep(1);
}
}));
private final VPrompt prompt = add(new VPrompt(Forge.getLocalizer().getMessage("lblBack"),
Forge.getLocalizer().getMessage("lblNext"),
e -> advanceStep(-1), e -> advanceStep(1)
));
protected MultiStepWizardScreen(String headerCaption, WizardStep<T>[] steps0, T model0) {
super(headerCaption);

View File

@@ -13,8 +13,6 @@ import forge.assets.FSkinImage;
import forge.assets.FTextureRegionImage;
import forge.screens.FScreen;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.util.Callback;
@@ -92,21 +90,15 @@ public class AvatarSelector extends FScreen {
.build();
if (index == -1) {
lbl.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
callback.run(getRandomAvatar(usedAvatars));
Forge.back();
}
lbl.setCommand(e -> {
callback.run(getRandomAvatar(usedAvatars));
Forge.back();
});
}
else {
lbl.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
callback.run(index);
Forge.back();
}
lbl.setCommand(e -> {
callback.run(index);
Forge.back();
});
}
scroller.add(lbl);

View File

@@ -1,19 +1,12 @@
package forge.screens.constructed;
import forge.gamemodes.match.LocalLobby;
import forge.gamemodes.net.event.UpdateLobbyPlayerEvent;
import forge.interfaces.IPlayerChangeListener;
import forge.screens.home.NewGameMenu;
public class ConstructedScreen extends LobbyScreen {
public ConstructedScreen() {
super(null, NewGameMenu.getMenu(), new LocalLobby());
setPlayerChangeListener(new IPlayerChangeListener() {
@Override
public final void update(final int index, final UpdateLobbyPlayerEvent event) {
getLobby().applyToSlot(index, event);
}
});
setPlayerChangeListener((index, event) -> getLobby().applyToSlot(index, event));
}
}

View File

@@ -114,7 +114,7 @@ public class PlayerPanel extends FContainer {
public void handleEvent(FEvent e) {
btnDeck.setEnabled(mayEdit);
btnDeck.setText(deckChooser.getSelectedDeckType().toString() + ":" + (Forge.isLandscapeMode() ? " " : "\n") +
Lang.joinHomogenous(((DeckManager)e.getSource()).getSelectedItems(), DeckProxy.FN_GET_NAME));
Lang.joinHomogenous(((DeckManager)e.getSource()).getSelectedItems(), DeckProxy::getName));
if (allowNetworking && btnDeck.isEnabled() && humanAiSwitch.isToggled()) { //if its ready but changed the deck, update it
screen.updateMyDeck(index);
}
@@ -180,42 +180,33 @@ public class PlayerPanel extends FContainer {
}
}
});
lstSchemeDecks = new FDeckChooser(GameType.Archenemy, isAi, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if( ((DeckManager)e.getSource()).getSelectedItem() != null){
btnSchemeDeck.setText(Forge.getLocalizer().getMessage("lblSchemeDeck")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((DeckManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnSchemeDeck.isEnabled() && humanAiSwitch.isToggled()) {
screen.updateMyDeck(index);
}
}else{
btnSchemeDeck.setText(Forge.getLocalizer().getMessage("lblSchemeDeck"));
}
}
});
lstPlanarDecks = new FDeckChooser(GameType.Planechase, isAi, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if( ((DeckManager)e.getSource()).getSelectedItem() != null){
btnPlanarDeck.setText(Forge.getLocalizer().getMessage("lblPlanarDeck")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((DeckManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnPlanarDeck.isEnabled() && humanAiSwitch.isToggled()) {
screen.updateMyDeck(index);
}
}else{
btnPlanarDeck.setText(Forge.getLocalizer().getMessage("lblPlanarDeck"));
}
}
});
lstVanguardAvatars = new FVanguardChooser(isAi, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
btnVanguardAvatar.setText(Forge.getLocalizer().getMessage("lblVanguard")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((CardManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnVanguardAvatar.isEnabled() && humanAiSwitch.isToggled()) {
lstSchemeDecks = new FDeckChooser(GameType.Archenemy, isAi, e -> {
if( ((DeckManager)e.getSource()).getSelectedItem() != null){
btnSchemeDeck.setText(Forge.getLocalizer().getMessage("lblSchemeDeck")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((DeckManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnSchemeDeck.isEnabled() && humanAiSwitch.isToggled()) {
screen.updateMyDeck(index);
}
}else{
btnSchemeDeck.setText(Forge.getLocalizer().getMessage("lblSchemeDeck"));
}
});
lstPlanarDecks = new FDeckChooser(GameType.Planechase, isAi, e -> {
if( ((DeckManager)e.getSource()).getSelectedItem() != null){
btnPlanarDeck.setText(Forge.getLocalizer().getMessage("lblPlanarDeck")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((DeckManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnPlanarDeck.isEnabled() && humanAiSwitch.isToggled()) {
screen.updateMyDeck(index);
}
}else{
btnPlanarDeck.setText(Forge.getLocalizer().getMessage("lblPlanarDeck"));
}
});
lstVanguardAvatars = new FVanguardChooser(isAi, e -> {
btnVanguardAvatar.setText(Forge.getLocalizer().getMessage("lblVanguard")
+ ":" + (Forge.isLandscapeMode() ? " " : "\n") + ((CardManager)e.getSource()).getSelectedItem().getName());
if (allowNetworking && btnVanguardAvatar.isEnabled() && humanAiSwitch.isToggled()) {
screen.updateMyDeck(index);
}
});
@@ -246,68 +237,44 @@ public class PlayerPanel extends FContainer {
add(devModeSwitch);
}
add(btnDeck);
btnDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deckChooser.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(deckChooser);
}
btnDeck.setCommand(e -> {
deckChooser.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(deckChooser);
});
add(btnCommanderDeck);
btnCommanderDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstCommanderDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectCommanderDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstCommanderDecks);
}
btnCommanderDeck.setCommand(e -> {
lstCommanderDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectCommanderDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstCommanderDecks);
});
add(btnOathbreakDeck);
btnOathbreakDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstOathbreakerDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectOathbreakerDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstOathbreakerDecks);
}
btnOathbreakDeck.setCommand(e -> {
lstOathbreakerDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectOathbreakerDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstOathbreakerDecks);
});
add(btnTinyLeadersDeck);
btnTinyLeadersDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstTinyLeadersDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectTinyLeadersDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstTinyLeadersDecks);
}
btnTinyLeadersDeck.setCommand(e -> {
lstTinyLeadersDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectTinyLeadersDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstTinyLeadersDecks);
});
add(btnBrawlDeck);
btnBrawlDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstBrawlDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectBrawlDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstBrawlDecks);
}
btnBrawlDeck.setCommand(e -> {
lstBrawlDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectBrawlDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstBrawlDecks);
});
add(btnSchemeDeck);
btnSchemeDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstSchemeDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectSchemeDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstSchemeDecks);
}
btnSchemeDeck.setCommand(e -> {
lstSchemeDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectSchemeDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstSchemeDecks);
});
add(btnPlanarDeck);
btnPlanarDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstPlanarDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectPlanarDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstPlanarDecks);
}
btnPlanarDeck.setCommand(e -> {
lstPlanarDecks.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectPlanarDeckFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstPlanarDecks);
});
add(btnVanguardAvatar);
btnVanguardAvatar.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
lstVanguardAvatars.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectVanguardFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstVanguardAvatars);
}
btnVanguardAvatar.setCommand(e -> {
lstVanguardAvatars.setHeaderCaption(Forge.getLocalizer().getMessage("lblSelectVanguardFor").replace("%s", txtPlayerName.getText()));
Forge.openScreen(lstVanguardAvatars);
});
if (mayEdit == mayEdit0) {
@@ -837,28 +804,23 @@ public class PlayerPanel extends FContainer {
private FLabel createNameRandomizer() {
final FLabel newNameBtn = new FLabel.Builder().iconInBackground(false)
.icon(Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT).opaque(false).build();
newNameBtn.setCommand(new FEventHandler() {
newNameBtn.setCommand(e -> getNewName(new Callback<String>() {
@Override
public void handleEvent(FEvent e) {
getNewName(new Callback<String>() {
@Override
public void run(String newName) {
if (newName == null) { return; }
public void run(String newName) {
if (newName == null) { return; }
txtPlayerName.setText(newName);
txtPlayerName.setText(newName);
if (index == 0) {
prefs.setPref(FPref.PLAYER_NAME, newName);
prefs.save();
screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName));
}
if (allowNetworking) {
screen.firePlayerChangeListener(index);
}
}
});
if (index == 0) {
prefs.setPref(FPref.PLAYER_NAME, newName);
prefs.save();
screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName));
}
if (allowNetworking) {
screen.firePlayerChangeListener(index);
}
}
});
}));
return newNameBtn;
}
@@ -1103,7 +1065,7 @@ public class PlayerPanel extends FContainer {
private static final ImmutableList<String> genderOptions = ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblMale"), Forge.getLocalizer().getInstance().getMessage("lblFemale"), Forge.getLocalizer().getInstance().getMessage("lblAny"));
private static final ImmutableList<String> typeOptions = ImmutableList.of(Forge.getLocalizer().getInstance().getMessage("lblFantasy"), Forge.getLocalizer().getInstance().getMessage("lblGeneric"), Forge.getLocalizer().getInstance().getMessage("lblAny"));
private final void getNewName(final Callback<String> callback) {
private void getNewName(final Callback<String> callback) {
final String title = Forge.getLocalizer().getMessage("lblGetNewRandomName");
final String message = Forge.getLocalizer().getMessage("lbltypeofName");
final FSkinImage icon = FOptionPane.QUESTION_ICON;

View File

@@ -13,8 +13,6 @@ import forge.assets.FSkinImage;
import forge.assets.FTextureRegionImage;
import forge.screens.FScreen;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.util.Callback;
@@ -92,21 +90,15 @@ public class SleevesSelector extends FScreen {
.build();
if (index == -1) {
lbl.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
callback.run(getRandomSleeves(usedSleeves));
Forge.back();
}
lbl.setCommand(e -> {
callback.run(getRandomSleeves(usedSleeves));
Forge.back();
});
}
else {
lbl.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
callback.run(index);
Forge.back();
}
lbl.setCommand(e -> {
callback.run(index);
Forge.back();
});
}
scroller.add(lbl);

View File

@@ -4,6 +4,7 @@ import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.badlogic.gdx.utils.Align;
@@ -274,7 +275,7 @@ public class LoadGauntletScreen extends LaunchScreen {
public void refresh() {
List<GauntletData> sorted = new ArrayList<>();
sorted.addAll(gauntlets);
Collections.sort(sorted, (x, y) -> x.getName().toLowerCase().compareTo(y.getName().toLowerCase()));
Collections.sort(sorted, Comparator.comparing(x -> x.getName().toLowerCase()));
setListData(sorted);
}

View File

@@ -24,7 +24,6 @@ import forge.screens.planarconquest.ConquestMenu;
import forge.screens.quest.QuestMenu;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
@@ -71,99 +70,73 @@ public class HomeScreen extends FScreen {
private HomeScreen() {
super((Header)null);
addButton(Forge.getLocalizer().getMessage("lblNewGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 0;
Forge.lastButtonIndex = activeButtonIndex;
NewGameMenu.getPreferredScreen().open();
}
addButton(Forge.getLocalizer().getMessage("lblNewGame"), e -> {
activeButtonIndex = 0;
Forge.lastButtonIndex = activeButtonIndex;
NewGameMenu.getPreferredScreen().open();
});
addButton(Forge.getLocalizer().getMessage("lblLoadGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 1;
Forge.lastButtonIndex = activeButtonIndex;
LoadGameMenu.getPreferredScreen().open();
}
addButton(Forge.getLocalizer().getMessage("lblLoadGame"), e -> {
activeButtonIndex = 1;
Forge.lastButtonIndex = activeButtonIndex;
LoadGameMenu.getPreferredScreen().open();
});
addButton(Forge.getLocalizer().getMessage("lblPlayOnline"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 2;
Forge.lastButtonIndex = activeButtonIndex;
OnlineScreen.Lobby.open();
}
addButton(Forge.getLocalizer().getMessage("lblPlayOnline"), e -> {
activeButtonIndex = 2;
Forge.lastButtonIndex = activeButtonIndex;
OnlineScreen.Lobby.open();
});
addButton(Forge.getLocalizer().getMessage("lblDeckManager"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 3;
Forge.lastButtonIndex = activeButtonIndex;
if (deckManager == null) {
deckManager = new FDeckChooser(GameType.DeckManager, false, null) {
@Override
protected float doLandscapeLayout(float width, float height) {
//don't show header in landscape mode
getHeader().setBounds(0, 0, 0, 0);
doLayout(0, width, height);
return 0;
}
};
deckManager.setHeaderCaption(Forge.getLocalizer().getMessage("lblDeckManager"));
}
Forge.openScreen(deckManager);
}
});
addButton(Forge.getLocalizer().getMessage("lblAchievements"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 4;
Forge.lastButtonIndex = activeButtonIndex;
AchievementsScreen.show();
}
});
addButton(Forge.getLocalizer().getMessage("lblSettings"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = 5;
Forge.lastButtonIndex = activeButtonIndex;
SettingsScreen.show(true);
}
});
addButton(Forge.getLocalizer().getMessage("lblHelp"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInEdtLater(new Runnable() {
addButton(Forge.getLocalizer().getMessage("lblDeckManager"), e -> {
activeButtonIndex = 3;
Forge.lastButtonIndex = activeButtonIndex;
if (deckManager == null) {
deckManager = new FDeckChooser(GameType.DeckManager, false, null) {
@Override
public void run() {
try {
if (Forge.getDeviceAdapter().isConnectedToInternet()) {
FOptionPane.showOptionDialog("Join Discord option will open the invite link to join Forge Discord server. Forge Support option will open the Forge Support Channel.", "Choose option", FOptionPane.INFORMATION_ICON, ImmutableList.of("Join Discord", "Forge Support"), -1, new Callback<Integer>() {
@Override
public void run(Integer result) {
switch (result) {
case 0:
Gdx.net.openURI("https://discord.gg/3v9JCVr");
break;
case 1:
Gdx.net.openURI("https://discord.com/channels/267367946135928833/692000787856883752");
break;
default:
break;
}
}
});
} else {
FOptionPane.showErrorDialog("Internet Connection required to open Forge Discord server", "No Internet");
}
} catch (Exception e) {
e.printStackTrace();
}
protected float doLandscapeLayout(float width, float height) {
//don't show header in landscape mode
getHeader().setBounds(0, 0, 0, 0);
doLayout(0, width, height);
return 0;
}
});
};
deckManager.setHeaderCaption(Forge.getLocalizer().getMessage("lblDeckManager"));
}
Forge.openScreen(deckManager);
});
addButton(Forge.getLocalizer().getMessage("lblAchievements"), e -> {
activeButtonIndex = 4;
Forge.lastButtonIndex = activeButtonIndex;
AchievementsScreen.show();
});
addButton(Forge.getLocalizer().getMessage("lblSettings"), e -> {
activeButtonIndex = 5;
Forge.lastButtonIndex = activeButtonIndex;
SettingsScreen.show(true);
});
addButton(Forge.getLocalizer().getMessage("lblHelp"), e -> FThreads.invokeInEdtLater(() -> {
try {
if (Forge.getDeviceAdapter().isConnectedToInternet()) {
FOptionPane.showOptionDialog("Join Discord option will open the invite link to join Forge Discord server. Forge Support option will open the Forge Support Channel.", "Choose option", FOptionPane.INFORMATION_ICON, ImmutableList.of("Join Discord", "Forge Support"), -1, new Callback<Integer>() {
@Override
public void run(Integer result) {
switch (result) {
case 0:
Gdx.net.openURI("https://discord.gg/3v9JCVr");
break;
case 1:
Gdx.net.openURI("https://discord.com/channels/267367946135928833/692000787856883752");
break;
default:
break;
}
}
});
} else {
FOptionPane.showErrorDialog("Internet Connection required to open Forge Discord server", "No Internet");
}
} catch (Exception e1) {
e1.printStackTrace();
}
}));
baseButtonCount = buttons.size();
}
@@ -209,13 +182,10 @@ public class HomeScreen extends FScreen {
for (int i = baseButtonCount; i < buttons.size(); i++) {
if (buttons.get(i).getText().equals(caption)) {
final int index = i;
buttons.get(i).setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = index;
Forge.lastButtonIndex = activeButtonIndex;
command.handleEvent(e);
}
buttons.get(i).setCommand(e -> {
activeButtonIndex = index;
Forge.lastButtonIndex = activeButtonIndex;
command.handleEvent(e);
});
activeButtonIndex = i;
return;
@@ -223,13 +193,10 @@ public class HomeScreen extends FScreen {
}
final int index = buttons.size();
activeButtonIndex = index;
addButton(caption, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activeButtonIndex = index;
Forge.lastButtonIndex = activeButtonIndex;
command.handleEvent(e);
}
addButton(caption, e -> {
activeButtonIndex = index;
Forge.lastButtonIndex = activeButtonIndex;
command.handleEvent(e);
});
revalidate();
buttonScroller.scrollIntoView(buttons.get(index));

View File

@@ -14,8 +14,6 @@ import forge.screens.limited.LoadDraftScreen;
import forge.screens.limited.LoadSealedScreen;
import forge.screens.planarconquest.LoadConquestScreen;
import forge.screens.quest.LoadQuestScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public class LoadGameMenu extends FPopupMenu {
public enum LoadGameScreen {
@@ -31,12 +29,9 @@ public class LoadGameMenu extends FPopupMenu {
LoadGameScreen(final String caption0, final FImage icon0, final Class<? extends FScreen> screenClass0) {
screenClass = screenClass0;
item = new FMenuItem(Forge.getLocalizer().getMessage(caption0), icon0, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
open(true); //remove current screen from chain
setPreferredScreen(LoadGameScreen.this);
}
item = new FMenuItem(Forge.getLocalizer().getMessage(caption0), icon0, e -> {
open(true); //remove current screen from chain
setPreferredScreen(LoadGameScreen.this);
});
}

View File

@@ -16,8 +16,6 @@ import forge.screens.limited.NewDraftScreen;
import forge.screens.limited.NewSealedScreen;
import forge.screens.planarconquest.NewConquestScreen;
import forge.screens.quest.NewQuestScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public class NewGameMenu extends FPopupMenu {
@@ -37,12 +35,9 @@ public class NewGameMenu extends FPopupMenu {
NewGameScreen(final String caption0, final FImage icon0, final Class<? extends FScreen> screenClass0) {
screenClass = screenClass0;
item = new FMenuItem(caption0, icon0, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
open(true); //remove current screen from chain
setPreferredScreen(NewGameScreen.this);
}
item = new FMenuItem(caption0, icon0, e -> {
open(true); //remove current screen from chain
setPreferredScreen(NewGameScreen.this);
});
}

View File

@@ -128,17 +128,9 @@ public class DraftingProcessScreen extends FDeckEditor {
}
if (getEditorType() == EditorType.QuestDraft) {
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
if (questDraftController.cancelDraft()) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
canCloseCallback.run(true);
}
});
}
FThreads.invokeInBackgroundThread(() -> {
if (questDraftController.cancelDraft()) {
FThreads.invokeInEdtLater(() -> canCloseCallback.run(true));
}
});
return;

View File

@@ -41,21 +41,16 @@ public class NewSealedScreen extends LaunchScreen {
@Override
protected void startMatch() {
ThreadUtil.invokeInGameThread(new Runnable() { //must run in game thread to prevent blocking UI thread
@Override
public void run() {
final DeckGroup sealed = SealedCardPoolGenerator.generateSealedDeck(false);
if (sealed == null) { return; }
//must run in game thread to prevent blocking UI thread
ThreadUtil.invokeInGameThread(() -> {
final DeckGroup sealed = SealedCardPoolGenerator.generateSealedDeck(false);
if (sealed == null) { return; }
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
DeckPreferences.setSealedDeck(sealed.getName());
Forge.openScreen(new FDeckEditor(EditorType.Sealed, sealed.getName(), false));
Forge.setBackScreen(new LoadSealedScreen(), false); //ensure pressing back goes to load sealed screen
}
});
}
FThreads.invokeInEdtLater(() -> {
DeckPreferences.setSealedDeck(sealed.getName());
Forge.openScreen(new FDeckEditor(EditorType.Sealed, sealed.getName(), false));
Forge.setBackScreen(new LoadSealedScreen(), false); //ensure pressing back goes to load sealed screen
});
});
}
}

View File

@@ -41,8 +41,6 @@ import forge.toolbox.FCardPanel;
import forge.toolbox.FContainer;
import forge.toolbox.FDialog;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
@@ -103,34 +101,20 @@ public class VAssignCombatDamage extends FDialog {
pnlAttacker = add(new AttDefCardPanel(attacker));
pnlDefenders = add(new DefendersPanel(blockers));
initButton(0, Forge.getLocalizer().getMessage("lblAuto"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
resetAssignedDamage();
initialAssignDamage(true);
finish();
}
initButton(0, Forge.getLocalizer().getMessage("lblAuto"), e -> {
resetAssignedDamage();
initialAssignDamage(true);
finish();
});
initButton(1, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
finish();
}
});
initButton(2, Forge.getLocalizer().getMessage("lblReset"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
resetAssignedDamage();
initialAssignDamage(false);
}
initButton(1, Forge.getLocalizer().getMessage("lblOK"), e -> finish());
initButton(2, Forge.getLocalizer().getMessage("lblReset"), e -> {
resetAssignedDamage();
initialAssignDamage(false);
});
if (maySkip) {
initButton(2, Forge.getLocalizer().getMessage("lblSkip"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
skip = true;
finish();
}
initButton(2, Forge.getLocalizer().getMessage("lblSkip"), e -> {
skip = true;
finish();
});
}
@@ -222,18 +206,8 @@ public class VAssignCombatDamage extends FDialog {
obj = add(new MiscAttDefPanel(defender.toString(), FSkinImage.UNKNOWN));
}
label = add(new FLabel.Builder().text("0").font(FSkinFont.get(18)).align(Align.center).build());
btnSubtract = add(new FLabel.ButtonBuilder().icon(FSkinImage.MINUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
assignDamageTo(card, false);
}
}).build());
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
assignDamageTo(card, true);
}
}).build());
btnSubtract = add(new FLabel.ButtonBuilder().icon(FSkinImage.MINUS).command(e -> assignDamageTo(card, false)).build());
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(e -> assignDamageTo(card, true)).build());
}
@Override

View File

@@ -42,8 +42,6 @@ import forge.toolbox.FCardPanel;
import forge.toolbox.FContainer;
import forge.toolbox.FDialog;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
@@ -90,18 +88,10 @@ public class VAssignGenericAmount extends FDialog {
pnlSource = add(new EffectSourcePanel(effectSource));
pnlTargets = add(new TargetsPanel(targets));
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
finish();
}
});
initButton(1, Forge.getLocalizer().getMessage("lblReset"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
resetAssignedDamage();
initialAssignAmount();
}
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> finish());
initButton(1, Forge.getLocalizer().getMessage("lblReset"), e -> {
resetAssignedDamage();
initialAssignAmount();
});
initialAssignAmount();
@@ -200,18 +190,8 @@ public class VAssignGenericAmount extends FDialog {
obj = add(new MiscTargetPanel(entity.toString(), FSkinImage.UNKNOWN));
}
label = add(new FLabel.Builder().text("0").font(FSkinFont.get(18)).align(Align.center).build());
btnSubtract = add(new FLabel.ButtonBuilder().icon(FSkinImage.MINUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
assignAmountTo(entity, false);
}
}).build());
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
assignAmountTo(entity, true);
}
}).build());
btnSubtract = add(new FLabel.ButtonBuilder().icon(FSkinImage.MINUS).command(e -> assignAmountTo(entity, false)).build());
btnAdd = add(new FLabel.ButtonBuilder().icon(Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS).command(e -> assignAmountTo(entity, true)).build());
}
@Override

View File

@@ -8,8 +8,6 @@ import forge.screens.match.MatchController;
import forge.toolbox.FCheckBox;
import forge.toolbox.FChoiceList;
import forge.toolbox.FDialog;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FOptionPane;
import forge.util.TextBounds;
@@ -35,29 +33,16 @@ public class VAutoYields extends FDialog {
}
});
chkDisableAll = add(new FCheckBox(Forge.getLocalizer().getMessage("lblDisableAllAutoYields"), MatchController.instance.getDisableAutoYields()));
chkDisableAll.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
MatchController.instance.setDisableAutoYields(chkDisableAll.isSelected());
}
});
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
}
});
initButton(1, Forge.getLocalizer().getMessage("lblRemoveYield"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
String selected = lstAutoYields.getSelectedItem();
if (selected != null) {
lstAutoYields.removeItem(selected);
MatchController.instance.setShouldAutoYield(selected, false);
setButtonEnabled(1, lstAutoYields.getCount() > 0);
lstAutoYields.cleanUpSelections();
VAutoYields.this.revalidate();
}
chkDisableAll.setCommand(e -> MatchController.instance.setDisableAutoYields(chkDisableAll.isSelected()));
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> hide());
initButton(1, Forge.getLocalizer().getMessage("lblRemoveYield"), e -> {
String selected = lstAutoYields.getSelectedItem();
if (selected != null) {
lstAutoYields.removeItem(selected);
MatchController.instance.setShouldAutoYield(selected, false);
setButtonEnabled(1, lstAutoYields.getCount() > 0);
lstAutoYields.cleanUpSelections();
VAutoYields.this.revalidate();
}
});
setButtonEnabled(1, autoYields.size() > 0);

View File

@@ -134,7 +134,7 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
}
}
private final int addCards(CardAreaPanel cardPanel, float x, float y, float cardWidth, float cardHeight) {
private int addCards(CardAreaPanel cardPanel, float x, float y, float cardWidth, float cardHeight) {
int totalCount = 0;
List<CardAreaPanel> attachedPanels = cardPanel.getAttachedPanels();
if (!attachedPanels.isEmpty()) {
@@ -206,12 +206,8 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
@Override
public void activate(int index) {
final CardAreaPanel cardPanel = CardAreaPanel.get(orderedCards.get(index));
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread in case a dialog needs to be shown
@Override
public void run() {
cardPanel.selectCard(false);
}
});
//must invoke in game thread in case a dialog needs to be shown
ThreadUtil.invokeInGameThread(() -> cardPanel.selectCard(false));
}
public static class CardAreaPanel extends FCardPanel {
@@ -331,26 +327,13 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
if (count > 1) //prevent double choice lists or activate handle
return false;
if (renderedCardContains(x, y)) {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread in case a dialog needs to be shown
@Override
public void run() {
if (GuiBase.getInterface().isRunningOnDesktop() && Forge.mouseButtonID == Input.Buttons.RIGHT) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
showZoom();
}
});
return;
} else if (!selectCard(false)) {
//if no cards in stack can be selected, just show zoom/details for card
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
showZoom();
}
});
}
//must invoke in game thread in case a dialog needs to be shown
ThreadUtil.invokeInGameThread(() -> {
if (GuiBase.getInterface().isRunningOnDesktop() && Forge.mouseButtonID == Input.Buttons.RIGHT) {
FThreads.invokeInEdtLater(CardAreaPanel.this::showZoom);
} else if (!selectCard(false)) {
//if no cards in stack can be selected, just show zoom/details for card
FThreads.invokeInEdtLater(CardAreaPanel.this::showZoom);
}
});
return true;
@@ -361,12 +344,8 @@ public abstract class VCardDisplayArea extends VDisplayArea implements ActivateH
@Override
public boolean flick(float x, float y) {
if (renderedCardContains(x, y)) {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread in case a dialog needs to be shown
@Override
public void run() {
selectCard(true);
}
});
//must invoke in game thread in case a dialog needs to be shown
ThreadUtil.invokeInGameThread(() -> selectCard(true));
return true;
}
return false;

View File

@@ -5,282 +5,89 @@ import forge.menu.FCheckBoxMenuItem;
import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem;
import forge.screens.match.MatchController;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.ThreadUtil;
public class VDevMenu extends FDropDownMenu {
@Override
protected void buildMenu() {
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblGenerateMana"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke all these in game thread since they may require synchronous user input
@Override
public void run() {
MatchController.instance.getGameController().cheat().generateMana();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblTutor"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().tutorForCard();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRollbackPhase"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke all these in game thread since they may require synchronous user input
@Override
public void run() {
MatchController.instance.getGameController().cheat().rollbackPhase();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCastSpellOrPlayLand"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().castASpell();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToHand"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCardToHand();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToBattlefield"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCardToBattlefield();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToLibrary"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCardToLibrary();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToGraveyard"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCardToGraveyard();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToExile"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCardToExile();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRepeatAddCard"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().repeatLastAddition();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblExileFromHand"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().exileCardsFromHand();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblExileFromPlay"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().exileCardsFromBattlefield();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFromGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().removeCardsFromGame();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSetLife"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().setPlayerLife();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblWinGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().winGame();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSetupGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().setupGameState();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblDumpGame"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().dumpGameState();
}
});
}
}));
//must invoke all these in game thread since they may require synchronous user input
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblGenerateMana"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().generateMana())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblTutor"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().tutorForCard())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRollbackPhase"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().rollbackPhase())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCastSpellOrPlayLand"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().castASpell())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToHand"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCardToHand())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToBattlefield"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCardToBattlefield())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToLibrary"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCardToLibrary())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToGraveyard"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCardToGraveyard())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCardToExile"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCardToExile())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRepeatAddCard"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().repeatLastAddition())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblExileFromHand"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().exileCardsFromHand())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblExileFromPlay"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().exileCardsFromBattlefield())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRemoveFromGame"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().removeCardsFromGame())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSetLife"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().setPlayerLife())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblWinGame"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().winGame())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSetupGame"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().setupGameState())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblDumpGame"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().dumpGameState())
));
final boolean unlimitedLands = MatchController.instance.getGameController().canPlayUnlimitedLands();
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUnlimitedLands"), unlimitedLands,
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
MatchController.instance.getGameController().cheat().setCanPlayUnlimitedLands(!unlimitedLands);
}
}));
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUnlimitedLands"), unlimitedLands, e ->
MatchController.instance.getGameController().cheat().setCanPlayUnlimitedLands(!unlimitedLands)
));
final boolean viewAll = MatchController.instance.getGameController().mayLookAtAllCards();
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblViewAll"), viewAll,
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
MatchController.instance.getGameController().cheat().setViewAllCards(!viewAll);
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAddCounterPermanent"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().addCountersToPermanent();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSubCounterPermanent"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().removeCountersFromPermanent();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblTapPermanent"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().tapPermanents();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblUntapPermanent"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().untapPermanents();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRiggedRoll"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().riggedPlanarRoll();
}
});
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblWalkTo"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.getGameController().cheat().planeswalkTo();
}
});
}
}));
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblViewAll"), viewAll, e ->
MatchController.instance.getGameController().cheat().setViewAllCards(!viewAll)
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAddCounterPermanent"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().addCountersToPermanent())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSubCounterPermanent"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().removeCountersFromPermanent())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblTapPermanent"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().tapPermanents())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblUntapPermanent"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().untapPermanents())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblRiggedRoll"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().riggedPlanarRoll())
));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblWalkTo"), e ->
ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().cheat().planeswalkTo())
));
}
}

View File

@@ -17,17 +17,9 @@ public class VGameMenu extends FDropDownMenu {
@Override
protected void buildMenu() {
addItem(new FMenuItem(MatchController.instance.getConcedeCaption(), FSkinImage.CONCEDE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
MatchController.instance.concede();
}
});
}
}));
addItem(new FMenuItem(MatchController.instance.getConcedeCaption(), FSkinImage.CONCEDE, e ->
ThreadUtil.invokeInGameThread(MatchController.instance::concede)
));
/*addItem(new FMenuItem("Save Game", FSkinImage.SAVE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
@@ -69,23 +61,17 @@ public class VGameMenu extends FDropDownMenu {
}
}));
if (!Forge.isMobileAdventureMode) {
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
//pause game when spectating AI Match
if (!MatchController.instance.hasLocalPlayers()) {
if(!MatchController.instance.isGamePaused())
MatchController.instance.pauseMatch();
}
SettingsScreen.show(false);
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblShowWinLoseOverlay"), FSkinImage.ENDTURN, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
MatchController.instance.showWinlose();
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, e -> {
//pause game when spectating AI Match
if (!MatchController.instance.hasLocalPlayers()) {
if(!MatchController.instance.isGamePaused())
MatchController.instance.pauseMatch();
}
SettingsScreen.show(false);
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblShowWinLoseOverlay"), FSkinImage.ENDTURN, e ->
MatchController.instance.showWinlose()
));
}
}
}

View File

@@ -5,8 +5,6 @@ import forge.assets.FSkin;
import forge.game.GameView;
import forge.game.player.PlayerView;
import forge.screens.match.MatchController;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
/**
* Default controller for a ViewWinLose object. This class can
@@ -34,26 +32,13 @@ public class ControlWinLose {
/** */
public void addListeners() {
view.getBtnContinue().setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
actionOnContinue();
}
});
view.getBtnContinue().setCommand(e -> actionOnContinue());
view.getBtnRestart().setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
actionOnRestart();
}
});
view.getBtnRestart().setCommand(e -> actionOnRestart());
view.getBtnQuit().setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
actionOnQuit();
view.getBtnQuit().setEnabled(false);
}
view.getBtnQuit().setCommand(e -> {
actionOnQuit();
view.getBtnQuit().setEnabled(false);
});
if(humancount == 0)
view.getBtnRestart().setEnabled(false);

View File

@@ -29,33 +29,30 @@ public class GauntletWinLose extends ControlWinLose {
protected void showOutcome(final boolean isMatchOver, final String message1, final String message2, final FSkinProp icon, final List<String> lstEventNames, final List<String> lstEventRecords, final int len, final int num) {
if (!isMatchOver) { return; } //don't show progress dialog unless match over
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
StringBuilder sb = new StringBuilder();
if (!lstEventNames.isEmpty()) {
for (int i = 0; i < len; i++) {
if (i <= num) {
sb.append(i + 1).append(". ").append(lstEventNames.get(i)).append(" (").append(lstEventRecords.get(i)).append(")\n");
} else {
sb.append(i + 1).append(". ??????\n");
}
FThreads.invokeInBackgroundThread(() -> {
StringBuilder sb = new StringBuilder();
if (!lstEventNames.isEmpty()) {
for (int i = 0; i < len; i++) {
if (i <= num) {
sb.append(i + 1).append(". ").append(lstEventNames.get(i)).append(" (").append(lstEventRecords.get(i)).append(")\n");
} else {
sb.append(i + 1).append(". ??????\n");
}
}
if (message1 != null) {
sb.append("\n");
sb.append(message1).append("\n\n");
sb.append(message2);
}
else {
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1); //remove final new line character
}
}
SOptionPane.showMessageDialog(sb.toString(), Forge.getLocalizer().getMessage("lblGauntletProgress"), icon);
}
if (message1 != null) {
sb.append("\n");
sb.append(message1).append("\n\n");
sb.append(message2);
}
else {
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1); //remove final new line character
}
}
SOptionPane.showMessageDialog(sb.toString(), Forge.getLocalizer().getMessage("lblGauntletProgress"), icon);
});
}

View File

@@ -23,8 +23,6 @@ import forge.gamemodes.quest.QuestController;
import forge.gamemodes.quest.QuestDraftUtils;
import forge.model.FModel;
import forge.screens.match.MatchController;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
/**
* <p>
@@ -90,34 +88,31 @@ public class QuestDraftWinLose extends ControlWinLose {
view.getBtnContinue().setEnabled(!isMatchOver);
view.getBtnQuit().setText(quitString);
view.getBtnQuit().setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (warningString == null /*||
FOptionPane.showOptionDialog(warningString, warningCaption, FSkin.getImages().get(FSkinProp.ICO_WARNING), ImmutableList.of("Yes", "No"), 1) == 0*/) {
if (warningString != null) {
PlayerView humanPlayer = null;
for (PlayerView playerView : MatchController.instance.getLocalPlayers()) {
humanPlayer = playerView;
}
for (PlayerView playerView : lastGame.getPlayers()) {
if (humanPlayer == null) {
throw new IllegalStateException("Forfeit tournament button was pressed in a match without human players.");
}
if (playerView != humanPlayer) {
quest.getAchievements().getCurrentDraft().setWinner(playerView.getName());
quest.save();
// TODO: update needed here?
}
}
//The player is probably not interested in watching more AI matches.
QuestDraftUtils.cancelFurtherMatches();
} else {
MatchController.instance.getGameController().nextGameDecision(NextGameDecision.QUIT);
controller.actionOnQuit();
QuestDraftUtils.matchInProgress = false;
QuestDraftUtils.continueMatches(MatchController.instance);
view.getBtnQuit().setCommand(e -> {
if (warningString == null /*||
FOptionPane.showOptionDialog(warningString, warningCaption, FSkin.getImages().get(FSkinProp.ICO_WARNING), ImmutableList.of("Yes", "No"), 1) == 0*/) {
if (warningString != null) {
PlayerView humanPlayer = null;
for (PlayerView playerView : MatchController.instance.getLocalPlayers()) {
humanPlayer = playerView;
}
for (PlayerView playerView : lastGame.getPlayers()) {
if (humanPlayer == null) {
throw new IllegalStateException("Forfeit tournament button was pressed in a match without human players.");
}
if (playerView != humanPlayer) {
quest.getAchievements().getCurrentDraft().setWinner(playerView.getName());
quest.save();
// TODO: update needed here?
}
}
//The player is probably not interested in watching more AI matches.
QuestDraftUtils.cancelFurtherMatches();
} else {
MatchController.instance.getGameController().nextGameDecision(NextGameDecision.QUIT);
controller.actionOnQuit();
QuestDraftUtils.matchInProgress = false;
QuestDraftUtils.continueMatches(MatchController.instance);
}
}
});

View File

@@ -25,8 +25,6 @@ import forge.model.FModel;
import forge.toolbox.FButton;
import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOverlay;
import forge.toolbox.FTextArea;
@@ -75,19 +73,13 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
});
txtLog.setFont(FSkinFont.get(12));
btnCopyLog = add(new FLabel.ButtonBuilder().text(Forge.getLocalizer().getMessage("btnCopyToClipboard")).selectable().command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.getClipboard().setContents(txtLog.getText());
}
}).build());
btnCopyLog = add(new FLabel.ButtonBuilder().text(Forge.getLocalizer().getMessage("btnCopyToClipboard")).selectable()
.command(e -> Forge.getClipboard().setContents(txtLog.getText())).build()
);
btnShowBattlefield = add(new FLabel.ButtonBuilder().text(Forge.getLocalizer().getMessage("lblShowBattlefield")).font(FSkinFont.get(12)).selectable().command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
}
}).build());
btnShowBattlefield = add(new FLabel.ButtonBuilder().text(Forge.getLocalizer().getMessage("lblShowBattlefield")).font(FSkinFont.get(12)).selectable()
.command(e -> hide()).build()
);
lblTitle.setText(composeTitle(game0));
// Control of the win/lose is handled differently for various game

View File

@@ -18,8 +18,6 @@ import forge.localinstance.properties.ForgePreferences.FPref;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FScrollPane;
import forge.toolbox.FTextField;
import forge.util.Utils;
@@ -36,12 +34,7 @@ public class OnlineChatScreen extends FScreen implements IOnlineChatInterface {
super(null, OnlineMenu.getMenu());
txtSendMessage.setGhostText(Forge.getLocalizer().getMessage("lblEnterMessageToSend"));
txtSendMessage.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
sendMessage();
}
});
txtSendMessage.setChangedHandler(e -> sendMessage());
}
private void sendMessage() {

View File

@@ -12,8 +12,6 @@ import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FOptionPane;
import forge.util.Callback;
@@ -29,37 +27,34 @@ public class OnlineMenu extends FPopupMenu {
OnlineScreen(final String caption0, final FImage icon0, final Class<? extends FScreen> screenClass0) {
screenClass = screenClass0;
item = new FMenuItem(Forge.getLocalizer().getMessage(caption0), icon0, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if(screenClass == null) {
FOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblLeaveLobbyDescription"),
Forge.getLocalizer().getMessage("lblDisconnect"), new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
if (FServerManager.getInstance() != null)
if(FServerManager.getInstance().isHosting()) {
FServerManager.getInstance().unsetReady();
FServerManager.getInstance().stopServer();
}
item = new FMenuItem(Forge.getLocalizer().getMessage(caption0), icon0, e -> {
if(screenClass == null) {
FOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblLeaveLobbyDescription"),
Forge.getLocalizer().getMessage("lblDisconnect"), new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
if (FServerManager.getInstance() != null)
if(FServerManager.getInstance().isHosting()) {
FServerManager.getInstance().unsetReady();
FServerManager.getInstance().stopServer();
}
if (OnlineLobbyScreen.getfGameClient() != null)
OnlineLobbyScreen.closeClient();
if (OnlineLobbyScreen.getfGameClient() != null)
OnlineLobbyScreen.closeClient();
Forge.back();
screen = null;
OnlineLobbyScreen.clearGameLobby();
}
Forge.back();
screen = null;
OnlineLobbyScreen.clearGameLobby();
}
});
return;
}
Forge.back(); //remove current screen from chain
open();
setPreferredScreen(OnlineScreen.this);
}
});
return;
}
Forge.back(); //remove current screen from chain
open();
setPreferredScreen(OnlineScreen.this);
});
}

View File

@@ -38,8 +38,6 @@ import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FCardPanel;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.GuiChoose;
import forge.util.Aggregates;
@@ -153,13 +151,8 @@ public class ConquestAEtherScreen extends FScreen {
CardRarity rarity = btnRarityFilter.selectedOption.getRarity(MyRandom.getRandom().nextDouble());
while (true) {
final CardRarity allowedRarity = rarity;
rewardPool = Iterables.filter(filteredPool, new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard card) {
return allowedRarity == card.getRarity()
|| allowedRarity == CardRarity.Rare && card.getRarity() == CardRarity.Special;
}
});
rewardPool = Iterables.filter(filteredPool, card -> allowedRarity == card.getRarity()
|| allowedRarity == CardRarity.Rare && card.getRarity() == CardRarity.Special);
if (Iterables.isEmpty(rewardPool)) { //if pool is empty, must reduce rarity and try again
if (rarity == minRarity) {
return;
@@ -366,20 +359,15 @@ public class ConquestAEtherScreen extends FScreen {
caption = caption0;
options = ImmutableList.copyOf(options0);
setSelectedOption(options.get(0));
setCommand(new FEventHandler() {
setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, selectedOption, null, new Callback<List<AEtherFilter>>() {
@Override
public void handleEvent(FEvent e) {
GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, selectedOption, null, new Callback<List<AEtherFilter>>() {
@Override
public void run(List<AEtherFilter> result) {
if (!result.isEmpty()) {
setSelectedOption(result.get(0));
updateFilteredPool();
}
}
});
public void run(List<AEtherFilter> result) {
if (!result.isEmpty()) {
setSelectedOption(result.get(0));
updateFilteredPool();
}
}
});
}));
}
private void setSelectedOption(AEtherFilter selectedOption0) {

View File

@@ -30,8 +30,6 @@ import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem;
import forge.model.FModel;
import forge.screens.TabPageScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
public class ConquestCollectionScreen extends TabPageScreen<ConquestCollectionScreen> {
@@ -45,58 +43,46 @@ public class ConquestCollectionScreen extends TabPageScreen<ConquestCollectionSc
new CollectionTab(Forge.getLocalizer().getMessage("lblExile"), FSkinImage.EXILE)
}, true);
btnExileRetrieveMultiple.setVisible(false); //hide unless in multi-select mode
btnExileRetrieveMultiple.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final CardManager list = ((CollectionTab)getSelectedPage()).list;
final Collection<PaperCard> cards = list.getSelectedItems();
btnExileRetrieveMultiple.setCommand(e -> {
final CardManager list = ((CollectionTab)getSelectedPage()).list;
final Collection<PaperCard> cards = list.getSelectedItems();
if (cards.isEmpty()) {
//toggle off multi-select mode if no items selected
list.toggleMultiSelectMode(-1);
return;
}
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
if (getSelectedPage() == tabPages.get(0)) {
int value = 0;
for (PaperCard card : cards) {
value += ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_EXILE_VALUE);
}
if (FModel.getConquest().getModel().exileCards(cards, value)) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
updateShards();
getCollectionTab().list.removeItemsFlat(cards);
getExileTab().list.addItemsFlat(cards);
updateTabCaptions();
}
});
}
}
else {
int cost = 0;
for (PaperCard card : cards) {
cost += ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_RETRIEVE_COST);
}
if (FModel.getConquest().getModel().retrieveCardsFromExile(cards, cost)) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
updateShards();
getCollectionTab().list.addItemsFlat(cards);
getExileTab().list.removeItemsFlat(cards);
updateTabCaptions();
}
});
}
}
}
});
if (cards.isEmpty()) {
//toggle off multi-select mode if no items selected
list.toggleMultiSelectMode(-1);
return;
}
FThreads.invokeInBackgroundThread(() -> {
if (getSelectedPage() == tabPages.get(0)) {
int value = 0;
for (PaperCard card : cards) {
value += ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_EXILE_VALUE);
}
if (FModel.getConquest().getModel().exileCards(cards, value)) {
FThreads.invokeInEdtLater(() -> {
updateShards();
getCollectionTab().list.removeItemsFlat(cards);
getExileTab().list.addItemsFlat(cards);
updateTabCaptions();
});
}
}
else {
int cost = 0;
for (PaperCard card : cards) {
cost += ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_RETRIEVE_COST);
}
if (FModel.getConquest().getModel().retrieveCardsFromExile(cards, cost)) {
FThreads.invokeInEdtLater(() -> {
updateShards();
getCollectionTab().list.addItemsFlat(cards);
getExileTab().list.removeItemsFlat(cards);
updateTabCaptions();
});
}
}
});
});
}
@@ -236,62 +222,37 @@ public class ConquestCollectionScreen extends TabPageScreen<ConquestCollectionSc
final ConquestData model = FModel.getConquest().getModel();
if (model.isInExile(card)) {
final int cost = ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_RETRIEVE_COST);
item = new FMenuItem(Forge.getLocalizer().getMessage("lblRetrieveForNAE", String.valueOf(cost), "{AE}"), Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
if (model.retrieveCardsFromExile(ImmutableList.of(card), cost)) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
parentScreen.updateShards();
parentScreen.getCollectionTab().list.addItem(card, 1);
parentScreen.getExileTab().list.removeItem(card, 1);
parentScreen.updateTabCaptions();
}
});
}
}
item = new FMenuItem(Forge.getLocalizer().getMessage("lblRetrieveForNAE", String.valueOf(cost), "{AE}"), Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, e -> FThreads.invokeInBackgroundThread(() -> {
if (model.retrieveCardsFromExile(ImmutableList.of(card), cost)) {
FThreads.invokeInEdtLater(() -> {
parentScreen.updateShards();
parentScreen.getCollectionTab().list.addItem(card, 1);
parentScreen.getExileTab().list.removeItem(card, 1);
parentScreen.updateTabCaptions();
});
}
}, true);
}), true);
}
else {
final int value = ConquestUtil.getShardValue(card, CQPref.AETHER_BASE_EXILE_VALUE);
item = new FMenuItem(Forge.getLocalizer().getMessage("lblExileForNAE", String.valueOf(value), "{AE}"), FSkinImage.EXILE, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
if (model.exileCards(ImmutableList.of(card), value)) {
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
parentScreen.updateShards();
parentScreen.getCollectionTab().list.removeItem(card, 1);
parentScreen.getExileTab().list.addItem(card, 1);
parentScreen.updateTabCaptions();
}
});
}
}
item = new FMenuItem(Forge.getLocalizer().getMessage("lblExileForNAE", String.valueOf(value), "{AE}"), FSkinImage.EXILE, e -> FThreads.invokeInBackgroundThread(() -> {
if (model.exileCards(ImmutableList.of(card), value)) {
FThreads.invokeInEdtLater(() -> {
parentScreen.updateShards();
parentScreen.getCollectionTab().list.removeItem(card, 1);
parentScreen.getExileTab().list.addItem(card, 1);
parentScreen.updateTabCaptions();
});
}
}, true);
}), true);
}
item.setTextRenderer(new TextRenderer());
menu.addItem(item);
}
});
setSelectionChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (getMultiSelectMode()) {
parentScreen.updateExileRetrieveButtonCaption();
}
setSelectionChangedHandler(e -> {
if (getMultiSelectMode()) {
parentScreen.updateExileRetrieveButtonCaption();
}
});
}
@@ -336,14 +297,11 @@ public class ConquestCollectionScreen extends TabPageScreen<ConquestCollectionSc
@Override
protected Predicate<PaperCard> buildPredicate() {
return new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard input) {
if (filterValue == null) {
return true;
}
return filterValue.getCardPool().contains(input);
return input -> {
if (filterValue == null) {
return true;
}
return filterValue.getCardPool().contains(input);
};
}
}

View File

@@ -34,8 +34,6 @@ import forge.itemmanager.filters.TextSearchFilter;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList;
import forge.toolbox.FList.CompactModeHandler;
import forge.toolbox.FOptionPane;
@@ -55,32 +53,21 @@ public class ConquestCommandersScreen extends FScreen {
super(Forge.getLocalizer().getMessage("lblSelectCommander"), ConquestMenu.getMenu());
lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS);
lstCommanders.setItemActivateHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.back();
lstCommanders.setItemActivateHandler(e -> Forge.back());
btnViewDeck.setCommand(e -> {
final ConquestCommander commander = lstCommanders.getSelectedItem();
if (commander != null) {
preventRefreshOnActivate = true;
FDeckViewer.show(commander.getDeck());
}
});
btnViewDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final ConquestCommander commander = lstCommanders.getSelectedItem();
if (commander != null) {
preventRefreshOnActivate = true;
FDeckViewer.show(commander.getDeck());
}
}
});
btnEditDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final ConquestCommander commander = lstCommanders.getSelectedItem();
if (commander != null) {
/*preload deck to cache*/
ImageCache.preloadCache(commander.getDeck());
preventRefreshOnActivate = true; //refresh not needed since deck changes won't affect commander display
Forge.openScreen(new ConquestDeckEditor(commander));
}
btnEditDeck.setCommand(e -> {
final ConquestCommander commander = lstCommanders.getSelectedItem();
if (commander != null) {
/*preload deck to cache*/
ImageCache.preloadCache(commander.getDeck());
preventRefreshOnActivate = true; //refresh not needed since deck changes won't affect commander display
Forge.openScreen(new ConquestDeckEditor(commander));
}
});
}
@@ -300,14 +287,11 @@ public class ConquestCommandersScreen extends FScreen {
@Override
protected Predicate<ConquestCommander> buildPredicate() {
return new Predicate<ConquestCommander>() {
@Override
public boolean apply(ConquestCommander input) {
if (filterValue == null) {
return true;
}
return input.getOriginPlane() == filterValue;
return input -> {
if (filterValue == null) {
return true;
}
return input.getOriginPlane() == filterValue;
};
}
}

View File

@@ -12,19 +12,14 @@ import forge.itemmanager.ColumnDef;
import forge.itemmanager.ItemColumn;
import forge.itemmanager.ItemManagerConfig;
import forge.model.FModel;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public class ConquestDeckEditor extends FDeckEditor {
public ConquestDeckEditor(final ConquestCommander commander) {
super(EditorType.PlanarConquest, new DeckProxy(commander.getDeck(), Forge.getLocalizer().getMessage("lblConquestCommander"),
GameType.PlanarConquest, FModel.getConquest().getDecks()), true);
setSaveHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
commander.reloadDeck(); //ensure commander receives deck changes
}
setSaveHandler(e -> {
commander.reloadDeck(); //ensure commander receives deck changes
});
}

View File

@@ -5,7 +5,6 @@ import java.util.List;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.Align;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -35,11 +34,8 @@ public class ConquestPlaneSelector extends FDisplayObject {
private static final float MONITOR_LEFT_MULTIPLIER = 19f / 443f;
private static final float ARROW_THICKNESS = Utils.scale(3);
private static List<ConquestPlane> planes = ImmutableList.copyOf(Iterables.filter(FModel.getPlanes(), new Predicate<ConquestPlane>() {
@Override
public boolean apply(ConquestPlane plane) {
return !plane.isUnreachable(); //filter out unreachable planes
}
private static List<ConquestPlane> planes = ImmutableList.copyOf(Iterables.filter(FModel.getPlanes(), plane -> {
return !plane.isUnreachable(); //filter out unreachable planes
}));
private final FTimer timer = new FTimer(2.5f) {
@@ -228,11 +224,6 @@ public class ConquestPlaneSelector extends FDisplayObject {
}
public void updateReachablePlanes() {
planes = ImmutableList.copyOf(Iterables.filter(FModel.getPlanes(), new Predicate<ConquestPlane>() {
@Override
public boolean apply(ConquestPlane plane) {
return !plane.isUnreachable();
}
}));
planes = ImmutableList.copyOf(Iterables.filter(FModel.getPlanes(), plane -> !plane.isUnreachable()));
}
}

View File

@@ -13,8 +13,6 @@ import forge.gamemodes.planarconquest.ConquestPreferences;
import forge.gamemodes.planarconquest.ConquestPreferences.CQPref;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FList;
@@ -58,21 +56,18 @@ public class ConquestPlaneswalkScreen extends FScreen {
private PlaneswalkButton() {
super(new FLabel.Builder().font(FSkinFont.get(20)).parseSymbols().pressedColor(ConquestAEtherScreen.FILTER_BUTTON_PRESSED_COLOR)
.textColor(ConquestAEtherScreen.FILTER_BUTTON_TEXT_COLOR).alphaComposite(1f).align(Align.center));
setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ConquestData model = FModel.getConquest().getModel();
ConquestPlane selectedPlane = planeSelector.getSelectedPlane();
if (model.isPlaneUnlocked(selectedPlane)) {
model.planeswalkTo(selectedPlane);
model.saveData();
Forge.back();
}
else if (model.spendPlaneswalkEmblems(unlockCost)) {
model.unlockPlane(selectedPlane);
model.saveData();
updateCaption();
}
setCommand(e -> {
ConquestData model = FModel.getConquest().getModel();
ConquestPlane selectedPlane = planeSelector.getSelectedPlane();
if (model.isPlaneUnlocked(selectedPlane)) {
model.planeswalkTo(selectedPlane);
model.saveData();
Forge.back();
}
else if (model.spendPlaneswalkEmblems(unlockCost)) {
model.unlockPlane(selectedPlane);
model.saveData();
updateCaption();
}
});
}

View File

@@ -20,8 +20,6 @@ import forge.gamemodes.planarconquest.ConquestReward;
import forge.item.PaperCard;
import forge.toolbox.FCardPanel;
import forge.toolbox.FDialog;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.util.Utils;
@@ -183,21 +181,13 @@ public class ConquestRewardDialog extends FScrollPane {
add(ConquestRewardDialog.this);
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
if (callback != null) {
callback.run();
}
}
});
initButton(1, Forge.getLocalizer().getMessage("lblSkip"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
animation.skip();
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> {
hide();
if (callback != null) {
callback.run();
}
});
initButton(1, Forge.getLocalizer().getMessage("lblSkip"), e -> animation.skip());
//disable both buttons initially
setButtonEnabled(0, false);

View File

@@ -14,7 +14,6 @@ import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
@@ -59,12 +58,9 @@ public class ConquestStatsScreen extends FScreen implements IVConquestStats {
}
}
cbPlanes.setAlignment(Align.center);
cbPlanes.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ConquestPlane plane = cbPlanes.getSelectedIndex() > 0 ? (ConquestPlane)cbPlanes.getSelectedItem() : null;
FModel.getConquest().getModel().updateStatLabels(ConquestStatsScreen.this, plane);
}
cbPlanes.setChangedHandler(e -> {
ConquestPlane plane = cbPlanes.getSelectedIndex() > 0 ? (ConquestPlane)cbPlanes.getSelectedItem() : null;
FModel.getConquest().getModel().updateStatLabels(ConquestStatsScreen.this, plane);
});
}

View File

@@ -32,8 +32,6 @@ import forge.screens.home.NewGameMenu.NewGameScreen;
import forge.screens.planarconquest.ConquestMenu.LaunchReason;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList;
import forge.toolbox.FTextArea;
import forge.util.FileUtil;
@@ -59,26 +57,11 @@ public class LoadConquestScreen extends LaunchScreen {
lblOldConquests.setAlignment(Align.center);
btnNewConquest.setFont(FSkinFont.get(16));
btnNewConquest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
NewGameScreen.PlanarConquest.open();
}
});
btnNewConquest.setCommand(e -> NewGameScreen.PlanarConquest.open());
btnRenameConquest.setFont(btnNewConquest.getFont());
btnRenameConquest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
renameConquest(lstConquests.getSelectedConquest());
}
});
btnRenameConquest.setCommand(e -> renameConquest(lstConquests.getSelectedConquest()));
btnDeleteConquest.setFont(btnNewConquest.getFont());
btnDeleteConquest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deleteConquest(lstConquests.getSelectedConquest());
}
});
btnDeleteConquest.setCommand(e -> deleteConquest(lstConquests.getSelectedConquest()));
}
@Override
@@ -88,54 +71,48 @@ public class LoadConquestScreen extends LaunchScreen {
updateEnabledButtons();
revalidate();
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
final File dirConquests = new File(ForgeConstants.CONQUEST_SAVE_DIR);
final ConquestController qc = FModel.getConquest();
FThreads.invokeInBackgroundThread(() -> {
final File dirConquests = new File(ForgeConstants.CONQUEST_SAVE_DIR);
final ConquestController qc = FModel.getConquest();
Map<String, ConquestData> arrConquests = new HashMap<>();
if (dirConquests.listFiles() != null) {
for (File f : dirConquests.listFiles()) {
if (f.isDirectory()) {
ConquestData data = new ConquestData(f);
arrConquests.put(data.getName(), data);
}
Map<String, ConquestData> arrConquests = new HashMap<>();
if (dirConquests.listFiles() != null) {
for (File f : dirConquests.listFiles()) {
if (f.isDirectory()) {
ConquestData data = new ConquestData(f);
arrConquests.put(data.getName(), data);
}
}
}
// Populate list with available conquest data.
lstConquests.setConquests(new ArrayList<>(arrConquests.values()));
// Populate list with available conquest data.
lstConquests.setConquests(new ArrayList<>(arrConquests.values()));
// If there are quests available, force select.
if (arrConquests.size() > 0) {
final String questname = FModel.getConquestPreferences().getPref(CQPref.CURRENT_CONQUEST);
// If there are quests available, force select.
if (arrConquests.size() > 0) {
final String questname = FModel.getConquestPreferences().getPref(CQPref.CURRENT_CONQUEST);
// Attempt to select previous conquest.
ConquestData currentConquest = arrConquests.get(questname);
if (currentConquest != null) {
lstConquests.setSelectedConquest(currentConquest);
}
else {
lstConquests.setSelectedIndex(0);
}
// Drop into AllZone.
qc.setModel(lstConquests.getSelectedConquest());
// Attempt to select previous conquest.
ConquestData currentConquest = arrConquests.get(questname);
if (currentConquest != null) {
lstConquests.setSelectedConquest(currentConquest);
}
else {
qc.setModel(null);
lstConquests.setSelectedIndex(0);
}
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
lblOldConquests.setText(Forge.getLocalizer().getMessage("lblOldConquestDataPutIntoDirAndRestartForge", ForgeConstants.CONQUEST_SAVE_DIR));
updateEnabledButtons();
revalidate();
lstConquests.scrollIntoView(lstConquests.selectedIndex);
}
});
// Drop into AllZone.
qc.setModel(lstConquests.getSelectedConquest());
}
else {
qc.setModel(null);
}
Gdx.app.postRunnable(() -> {
lblOldConquests.setText(Forge.getLocalizer().getMessage("lblOldConquestDataPutIntoDirAndRestartForge", ForgeConstants.CONQUEST_SAVE_DIR));
updateEnabledButtons();
revalidate();
lstConquests.scrollIntoView(lstConquests.selectedIndex);
});
});
}
@@ -192,71 +169,62 @@ public class LoadConquestScreen extends LaunchScreen {
private void renameConquest(final ConquestData conquest) {
if (conquest == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
String questName;
String oldConquestName = conquest.getName();
while (true) {
questName = SOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewConquestName"), Forge.getLocalizer().getMessage("lblRenameConquest"), null, oldConquestName);
if (questName == null) { return; }
ThreadUtil.invokeInGameThread(() -> {
String questName;
String oldConquestName = conquest.getName();
while (true) {
questName = SOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewConquestName"), Forge.getLocalizer().getMessage("lblRenameConquest"), null, oldConquestName);
if (questName == null) { return; }
questName = QuestUtil.cleanString(questName);
if (questName.equals(oldConquestName)) { return; } //quit if chose same name
questName = QuestUtil.cleanString(questName);
if (questName.equals(oldConquestName)) { return; } //quit if chose same name
if (questName.isEmpty()) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblPleaseSpecifyConquestName"));
continue;
}
boolean exists = false;
for (ConquestData questData : lstConquests) {
if (questData.getName().equalsIgnoreCase(questName)) {
exists = true;
break;
}
}
if (exists) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblConquestNameExistsPleasePickAnotherName"));
continue;
}
break;
if (questName.isEmpty()) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblPleaseSpecifyConquestName"));
continue;
}
//ensure prefs updated if current conquest is renamed
ConquestPreferences prefs = FModel.getConquestPreferences();
if (conquest.getName().equals(prefs.getPref(CQPref.CURRENT_CONQUEST))) {
prefs.setPref(CQPref.CURRENT_CONQUEST, questName);
prefs.save();
boolean exists = false;
for (ConquestData questData : lstConquests) {
if (questData.getName().equalsIgnoreCase(questName)) {
exists = true;
break;
}
}
conquest.rename(questName);
if (exists) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblConquestNameExistsPleasePickAnotherName"));
continue;
}
break;
}
//ensure prefs updated if current conquest is renamed
ConquestPreferences prefs = FModel.getConquestPreferences();
if (conquest.getName().equals(prefs.getPref(CQPref.CURRENT_CONQUEST))) {
prefs.setPref(CQPref.CURRENT_CONQUEST, questName);
prefs.save();
}
conquest.rename(questName);
});
}
private void deleteConquest(final ConquestData conquest) {
if (conquest == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
if (!SOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblAreYouSuerDeleteConquest", conquest.getName()),
Forge.getLocalizer().getMessage("lblDeleteConquest"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) {
return;
}
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
FileUtil.deleteDirectory(conquest.getDirectory());
lstConquests.removeConquest(conquest);
updateEnabledButtons();
}
});
ThreadUtil.invokeInGameThread(() -> {
if (!SOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblAreYouSuerDeleteConquest", conquest.getName()),
Forge.getLocalizer().getMessage("lblDeleteConquest"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) {
return;
}
FThreads.invokeInEdtLater(() -> {
FileUtil.deleteDirectory(conquest.getDirectory());
lstConquests.removeConquest(conquest);
updateEnabledButtons();
});
});
}
@@ -335,12 +303,7 @@ public class LoadConquestScreen extends LaunchScreen {
public void setConquests(List<ConquestData> qd0) {
List<ConquestData> sorted = new ArrayList<>();
sorted.addAll(qd0);
Collections.sort(sorted, new Comparator<ConquestData>() {
@Override
public int compare(final ConquestData x, final ConquestData y) {
return x.getName().toLowerCase().compareTo(y.getName().toLowerCase());
}
});
Collections.sort(sorted, Comparator.comparing(x -> x.getName().toLowerCase()));
setListData(sorted);
}

View File

@@ -35,8 +35,6 @@ import forge.screens.home.NewGameMenu.NewGameScreen;
import forge.screens.quest.QuestMenu.LaunchReason;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList;
import forge.toolbox.FTextArea;
import forge.util.ThreadUtil;
@@ -61,26 +59,11 @@ public class LoadQuestScreen extends LaunchScreen {
lblOldQuests.setAlignment(Align.center);
btnNewQuest.setFont(FSkinFont.get(16));
btnNewQuest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
NewGameScreen.QuestMode.open();
}
});
btnNewQuest.setCommand(e -> NewGameScreen.QuestMode.open());
btnRenameQuest.setFont(btnNewQuest.getFont());
btnRenameQuest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
renameQuest(lstQuests.getSelectedQuest());
}
});
btnRenameQuest.setCommand(e -> renameQuest(lstQuests.getSelectedQuest()));
btnDeleteQuest.setFont(btnNewQuest.getFont());
btnDeleteQuest.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deleteQuest(lstQuests.getSelectedQuest());
}
});
btnDeleteQuest.setCommand(e -> deleteQuest(lstQuests.getSelectedQuest()));
}
@Override
@@ -90,63 +73,52 @@ public class LoadQuestScreen extends LaunchScreen {
updateEnabledButtons();
revalidate();
FThreads.invokeInBackgroundThread(new Runnable() {
@Override
public void run() {
final File dirQuests = new File(ForgeConstants.QUEST_SAVE_DIR);
final QuestController qc = FModel.getQuest();
FThreads.invokeInBackgroundThread(() -> {
final File dirQuests = new File(ForgeConstants.QUEST_SAVE_DIR);
final QuestController qc = FModel.getQuest();
// Iterate over files and load quest data for each.
FilenameFilter takeDatFiles = new FilenameFilter() {
@Override
public boolean accept(final File dir, final String name) {
return name.endsWith(".dat");
}
};
File[] arrFiles = dirQuests.listFiles(takeDatFiles);
Map<String, QuestData> arrQuests = new HashMap<>();
for (File f : arrFiles) {
try {
arrQuests.put(f.getName(), QuestDataIO.loadData(f));
} catch (IOException e) {
System.err.println(String.format("Failed to load quest '%s'", f.getName()));
// Failed to load last quest, don't continue with quest loading stuff
return;
}
// Iterate over files and load quest data for each.
FilenameFilter takeDatFiles = (dir, name) -> name.endsWith(".dat");
File[] arrFiles = dirQuests.listFiles(takeDatFiles);
Map<String, QuestData> arrQuests = new HashMap<>();
for (File f : arrFiles) {
try {
arrQuests.put(f.getName(), QuestDataIO.loadData(f));
} catch (IOException e) {
System.err.println(String.format("Failed to load quest '%s'", f.getName()));
// Failed to load last quest, don't continue with quest loading stuff
return;
}
}
// Populate list with available quest data.
lstQuests.setQuests(new ArrayList<>(arrQuests.values()));
// Populate list with available quest data.
lstQuests.setQuests(new ArrayList<>(arrQuests.values()));
// If there are quests available, force select.
if (arrQuests.size() > 0) {
final String questname = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST);
// If there are quests available, force select.
if (arrQuests.size() > 0) {
final String questname = FModel.getQuestPreferences().getPref(QPref.CURRENT_QUEST);
// Attempt to select previous quest.
if (arrQuests.get(questname) != null) {
lstQuests.setSelectedQuest(arrQuests.get(questname));
}
else {
lstQuests.setSelectedIndex(0);
}
// Drop into AllZone.
qc.load(lstQuests.getSelectedQuest());
// Attempt to select previous quest.
if (arrQuests.get(questname) != null) {
lstQuests.setSelectedQuest(arrQuests.get(questname));
}
else {
qc.load(null);
lstQuests.setSelectedIndex(0);
}
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
final String str= ForgeConstants.QUEST_SAVE_DIR.replace('\\', '/');
lblOldQuests.setText(Forge.getLocalizer().getMessage("lblOldQuestData").replace("%s",str));
updateEnabledButtons();
revalidate();
lstQuests.scrollIntoView(lstQuests.selectedIndex);
}
});
// Drop into AllZone.
qc.load(lstQuests.getSelectedQuest());
}
else {
qc.load(null);
}
Gdx.app.postRunnable(() -> {
final String str= ForgeConstants.QUEST_SAVE_DIR.replace('\\', '/');
lblOldQuests.setText(Forge.getLocalizer().getMessage("lblOldQuestData").replace("%s",str));
updateEnabledButtons();
revalidate();
lstQuests.scrollIntoView(lstQuests.selectedIndex);
});
});
}
@@ -202,65 +174,56 @@ public class LoadQuestScreen extends LaunchScreen {
private void renameQuest(final QuestData quest) {
if (quest == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
String questName;
String oldQuestName = quest.getName();
while (true) {
questName = SOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewQuestName"), Forge.getLocalizer().getMessage("lblRenameQuest"), null, oldQuestName);
if (questName == null) { return; }
ThreadUtil.invokeInGameThread(() -> {
String questName;
String oldQuestName = quest.getName();
while (true) {
questName = SOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewQuestName"), Forge.getLocalizer().getMessage("lblRenameQuest"), null, oldQuestName);
if (questName == null) { return; }
questName = QuestUtil.cleanString(questName);
if (questName.equals(oldQuestName)) { return; } //quit if chose same name
questName = QuestUtil.cleanString(questName);
if (questName.equals(oldQuestName)) { return; } //quit if chose same name
if (questName.isEmpty()) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblQuestNameEmpty"));
continue;
}
boolean exists = false;
for (QuestData questData : lstQuests) {
if (questData.getName().equalsIgnoreCase(questName)) {
exists = true;
break;
}
}
if (exists) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblQuestExists"));
continue;
}
break;
if (questName.isEmpty()) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblQuestNameEmpty"));
continue;
}
quest.rename(questName);
boolean exists = false;
for (QuestData questData : lstQuests) {
if (questData.getName().equalsIgnoreCase(questName)) {
exists = true;
break;
}
}
if (exists) {
SOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblQuestExists"));
continue;
}
break;
}
quest.rename(questName);
});
}
private void deleteQuest(final QuestData quest) {
if (quest == null) { return; }
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
if (!SOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblConfirmDelete") + " '" + quest.getName() + "'?",
Forge.getLocalizer().getMessage("lblDeleteQuest"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) {
return;
}
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
new File(ForgeConstants.QUEST_SAVE_DIR, quest.getName() + ".dat").delete();
new File(ForgeConstants.QUEST_SAVE_DIR, quest.getName() + ".dat.bak").delete();
lstQuests.removeQuest(quest);
updateEnabledButtons();
}
});
ThreadUtil.invokeInGameThread(() -> {
if (!SOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblConfirmDelete") + " '" + quest.getName() + "'?",
Forge.getLocalizer().getMessage("lblDeleteQuest"), Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblCancel"))) {
return;
}
FThreads.invokeInEdtLater(() -> {
new File(ForgeConstants.QUEST_SAVE_DIR, quest.getName() + ".dat").delete();
new File(ForgeConstants.QUEST_SAVE_DIR, quest.getName() + ".dat.bak").delete();
lstQuests.removeQuest(quest);
updateEnabledButtons();
});
});
}
@@ -339,12 +302,7 @@ public class LoadQuestScreen extends LaunchScreen {
public void setQuests(List<QuestData> qd0) {
List<QuestData> sorted = new ArrayList<>();
sorted.addAll(qd0);
Collections.sort(sorted, new Comparator<QuestData>() {
@Override
public int compare(final QuestData x, final QuestData y) {
return x.getName().toLowerCase().compareTo(y.getName().toLowerCase());
}
});
Collections.sort(sorted, Comparator.comparing(x -> x.getName().toLowerCase()));
setListData(sorted);
}

View File

@@ -22,8 +22,6 @@ import forge.model.FModel;
import forge.screens.TabPageScreen;
import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FList;
import forge.toolbox.FScrollPane;
@@ -178,12 +176,9 @@ public class QuestBazaarScreen extends TabPageScreen<QuestBazaarScreen> {
btnBuy.setEnabled(false);
}
else {
btnBuy.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
QuestUtil.buyQuestItem(item);
((BazaarPage)((QuestBazaarScreen)Forge.getCurrentScreen()).getSelectedPage()).update();
}
btnBuy.setCommand(e -> {
QuestUtil.buyQuestItem(item);
((BazaarPage)((QuestBazaarScreen)Forge.getCurrentScreen()).getSelectedPage()).update();
});
}
}

View File

@@ -19,7 +19,6 @@ import forge.itemmanager.ItemManagerConfig;
import forge.model.FModel;
import forge.screens.FScreen;
import forge.toolbox.FButton;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FTextField;
@@ -38,18 +37,15 @@ public class QuestDecksScreen extends FScreen {
.align(Align.center).font(FSkinFont.get(16))
.text(Forge.getLocalizer().getMessage("lblBuildorselectadeck")).build());
private final FEventHandler onDeckSelectionChanged = new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
DeckProxy deck = lstDecks.getSelectedItem();
if (deck != null) {
FModel.getQuest().setCurrentDeck(deck.toString());
}
else {
FModel.getQuest().setCurrentDeck(QPref.CURRENT_DECK.getDefault());
}
FModel.getQuest().save();
private final FEventHandler onDeckSelectionChanged = e -> {
DeckProxy deck = lstDecks.getSelectedItem();
if (deck != null) {
FModel.getQuest().setCurrentDeck(deck.toString());
}
else {
FModel.getQuest().setCurrentDeck(QPref.CURRENT_DECK.getDefault());
}
FModel.getQuest().save();
};
private boolean needRefreshOnActivate = true;
@@ -59,61 +55,30 @@ public class QuestDecksScreen extends FScreen {
super("", QuestMenu.getMenu());
lstDecks.setup(ItemManagerConfig.QUEST_DECKS);
lstDecks.setItemActivateHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.back();
}
});
lstDecks.setItemActivateHandler(e -> Forge.back());
btnNewDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //must run in game thread to prevent blocking UI thread
@Override
public void run() {
if (!QuestUtil.checkActiveQuest(Forge.getLocalizer().getMessage("lblCreateaDeck"))) {
return;
}
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
QuestDeckEditor editor = new QuestDeckEditor(commanderMode);
editor.setSaveHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
//ensure list is refreshed if new deck is saved
needRefreshOnActivate = true;
}
});
Forge.openScreen(editor);
}
});
}
//must run in game thread to prevent blocking UI thread
btnNewDeck.setCommand(e -> ThreadUtil.invokeInGameThread(() -> {
if (!QuestUtil.checkActiveQuest(Forge.getLocalizer().getMessage("lblCreateaDeck"))) {
return;
}
FThreads.invokeInEdtLater(() -> {
QuestDeckEditor editor = new QuestDeckEditor(commanderMode);
editor.setSaveHandler(e1 -> {
//ensure list is refreshed if new deck is saved
needRefreshOnActivate = true;
});
Forge.openScreen(editor);
});
}));
btnEditDeck.setCommand(e -> editSelectedDeck());
btnViewDeck.setCommand(e -> {
final DeckProxy deck = lstDecks.getSelectedItem();
if (deck != null) {
FDeckViewer.show(deck.getDeck());
}
});
btnEditDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
editSelectedDeck();
}
});
btnViewDeck.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final DeckProxy deck = lstDecks.getSelectedItem();
if (deck != null) {
FDeckViewer.show(deck.getDeck());
}
}
});
btnRandom.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
DeckgenUtil.randomSelect(lstDecks);
}
});
btnRandom.setCommand(e -> DeckgenUtil.randomSelect(lstDecks));
}
@Override

View File

@@ -17,8 +17,6 @@ import forge.screens.FScreen;
import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
@@ -89,47 +87,35 @@ public class QuestStatsScreen extends FScreen {
super(Forge.getLocalizer().getMessage("lblQuestStatistics"), QuestMenu.getMenu());
lblZep.setHeight(Utils.scale(60));
cbxPet.setDropDownChangeHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final int slot = 1;
final int index = cbxPet.getSelectedIndex();
List<QuestPetController> pets = FModel.getQuest().getPetsStorage().getAvaliablePets(slot, FModel.getQuest().getAssets());
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
FModel.getQuest().selectPet(slot, petName);
cbxPet.setDropDownChangeHandler(e -> {
final int slot = 1;
final int index = cbxPet.getSelectedIndex();
List<QuestPetController> pets = FModel.getQuest().getPetsStorage().getAvaliablePets(slot, FModel.getQuest().getAssets());
String petName = index <= 0 || index > pets.size() ? null : pets.get(index - 1).getName();
FModel.getQuest().selectPet(slot, petName);
FModel.getQuest().save();
});
cbxMatchLength.setDropDownChangeHandler(e -> {
String match = cbxMatchLength.getSelectedItem();
if (match != null) {
FModel.getQuest().setMatchLength(match.substring(match.length() - 1));
FModel.getQuest().save();
}
});
cbxMatchLength.setDropDownChangeHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
String match = cbxMatchLength.getSelectedItem();
if (match != null) {
FModel.getQuest().setMatchLength(match.substring(match.length() - 1));
FModel.getQuest().save();
}
}
cbPlant.setCommand(e -> {
// This can't be translated. As the English string "Plant" is used to find the Plant pet.
FModel.getQuest().selectPet(0, cbPlant.isSelected() ? "Plant" : null);
FModel.getQuest().save();
});
cbPlant.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
// This can't be translated. As the English string "Plant" is used to find the Plant pet.
FModel.getQuest().selectPet(0, cbPlant.isSelected() ? "Plant" : null);
FModel.getQuest().save();
}
});
lblZep.setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (!QuestUtil.checkActiveQuest(Forge.getLocalizer().getMessage("lblLaunchaZeppelin"))) {
return;
}
FModel.getQuest().getAchievements().setCurrentChallenges(null);
FModel.getQuest().getAssets().setItemLevel(QuestItemType.ZEPPELIN, 2);
update();
lblZep.setCommand(e -> {
if (!QuestUtil.checkActiveQuest(Forge.getLocalizer().getMessage("lblLaunchaZeppelin"))) {
return;
}
FModel.getQuest().getAchievements().setCurrentChallenges(null);
FModel.getQuest().getAssets().setItemLevel(QuestItemType.ZEPPELIN, 2);
update();
});
}

View File

@@ -84,12 +84,7 @@ public class GuiDownloader extends FDialog {
radProxyNone.setSelected(true);
getButton(0).setText("Start");
initButton(1, "Cancel", new FEventHandler() {
@Override
public void handleEvent(final FEvent e) {
cmdClose.run();
}
});
initButton(1, "Cancel", e -> cmdClose.run());
progressBar.reset();
progressBar.setShowProgressTrail(true);
@@ -102,14 +97,11 @@ public class GuiDownloader extends FDialog {
super.show();
service.initialize(txtAddress, txtPort, progressBar, getButton(0), cmdClose, new Runnable() {
@Override
public void run() {
if (!(service instanceof GuiDownloadZipService)) { //retain continuous rendering for zip service
Forge.stopContinuousRendering();
}
progressBar.setShowProgressTrail(false);
service.initialize(txtAddress, txtPort, progressBar, getButton(0), cmdClose, () -> {
if (!(service instanceof GuiDownloadZipService)) { //retain continuous rendering for zip service
Forge.stopContinuousRendering();
}
progressBar.setShowProgressTrail(false);
}, null);
}

View File

@@ -2,7 +2,6 @@ package forge.sound;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Music.OnCompletionListener;
import com.badlogic.gdx.files.FileHandle;
import forge.Forge;
import forge.adventure.stage.GameHUD;
@@ -23,12 +22,7 @@ public class AudioMusic implements IAudioMusic {
if (GameHUD.getInstance().audioIsPlaying())
return;
}
music.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(Music music) {
onComplete.run();
}
});
music.setOnCompletionListener(music -> onComplete.run());
music.play();
}

View File

@@ -91,36 +91,20 @@ public class DualListBox<T> extends FDialog {
// Dual List control buttons
addButton = add(new FButton(">", onAdd));
addAllButton = add(new FButton(">>", new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
addAll();
}
}));
addAllButton = add(new FButton(">>", e -> addAll()));
removeButton = add(new FButton("<", onRemove));
removeAllButton = add(new FButton("<<", new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
removeAll();
}
}));
removeAllButton = add(new FButton("<<", e -> removeAll()));
final FEventHandler onAccept = new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
callback.run(destList.extractListData());
}
final FEventHandler onAccept = e -> {
hide();
callback.run(destList.extractListData());
};
// Dual List Complete Buttons
initButton(0, Forge.getLocalizer().getMessage("lblOK"), onAccept);
initButton(1, Forge.getLocalizer().getMessage("lblAuto"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
addAll();
onAccept.handleEvent(e);
}
initButton(1, Forge.getLocalizer().getMessage("lblAuto"), e -> {
addAll();
onAccept.handleEvent(e);
});
selectOrder = add(new FLabel.Builder().align(Align.center).text(Forge.getLocalizer().getMessage("lblSelectOrder")).build());

View File

@@ -364,12 +364,7 @@ public class FButton extends FDisplayObject implements IButton {
//use FEventHandler one except when references as IButton
@Override
public void setCommand(final UiCommand command0) {
setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
command0.run();
}
});
setCommand(e -> command0.run());
}
@Override

View File

@@ -260,17 +260,14 @@ public class FComboBox<T> extends FTextField implements IComboBox<T> {
@Override
protected void buildMenu() {
for (final T item : FComboBox.this.items) {
FMenuItem menuItem = new FMenuItem(getDisplayText(item), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (dropDownItemTap != null) {
dropDownItemTap.handleEvent(new FEvent(FComboBox.this, FEventType.TAP, item));
}
if (item != selectedItem) {
setSelectedItem(item);
if (dropDownChangeHandler != null) {
dropDownChangeHandler.handleEvent(new FEvent(FComboBox.this, FEventType.CHANGE, item));
}
FMenuItem menuItem = new FMenuItem(getDisplayText(item), e -> {
if (dropDownItemTap != null) {
dropDownItemTap.handleEvent(new FEvent(FComboBox.this, FEventType.TAP, item));
}
if (item != selectedItem) {
setSelectedItem(item);
if (dropDownChangeHandler != null) {
dropDownChangeHandler.handleEvent(new FEvent(FComboBox.this, FEventType.CHANGE, item));
}
}
});

View File

@@ -15,7 +15,6 @@ import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.Callback;
import forge.util.FileUtil;
import forge.util.Utils;
@@ -57,55 +56,37 @@ public class FFileChooser extends FDialog {
}
txtFilename.setFont(FSkinFont.get(12));
txtFilename.setText(defaultFilename0);
txtFilename.setChangedHandler(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
refreshFileList();
txtFilename.setChangedHandler(e -> refreshFileList());
initButton(0, Forge.getLocalizer().getMessage("lblOK"), e -> activateSelectedFile(true));
initButton(1, Forge.getLocalizer().getMessage("lblNewFolder"), e -> {
final File dir = getCurrentDir();
if (dir == null) {
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblCannotAddNewFolderToInvaildFolder"), Forge.getLocalizer().getMessage("lblInvalidFolder"));
return;
}
});
initButton(0, Forge.getLocalizer().getMessage("lblOK"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
activateSelectedFile(true);
}
});
initButton(1, Forge.getLocalizer().getMessage("lblNewFolder"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
final File dir = getCurrentDir();
if (dir == null) {
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblCannotAddNewFolderToInvaildFolder"), Forge.getLocalizer().getMessage("lblInvalidFolder"));
return;
}
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewFolderName"), new Callback<String>() {
@Override
public void run(String result) {
if (StringUtils.isEmpty(result)) { return; }
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblEnterNewFolderName"), new Callback<String>() {
@Override
public void run(String result) {
if (StringUtils.isEmpty(result)) { return; }
try {
File newDir = new File(dir, result);
if (newDir.mkdirs()) {
txtFilename.setText(newDir.getAbsolutePath());
refreshFileList();
return;
}
try {
File newDir = new File(dir, result);
if (newDir.mkdirs()) {
txtFilename.setText(newDir.getAbsolutePath());
refreshFileList();
return;
}
catch (Exception e) {
e.printStackTrace();
}
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterFolderNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName"));
}
});
}
});
initButton(2, Forge.getLocalizer().getMessage("lblCancel"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
hide();
}
catch (Exception e) {
e.printStackTrace();
}
FOptionPane.showErrorDialog(Forge.getLocalizer().getMessage("lblEnterFolderNameNotValid", result), Forge.getLocalizer().getMessage("lblInvalidName"));
}
});
});
initButton(2, Forge.getLocalizer().getMessage("lblCancel"), e -> hide());
baseDir = baseDir0;
callback = callback0;
@@ -160,12 +141,7 @@ public class FFileChooser extends FDialog {
FilenameFilter filter = null;
if (choiceType == ChoiceType.GetDirectory) {
//don't list files if getting directory
filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isDirectory();
}
};
filter = (dir1, name) -> new File(dir1, name).isDirectory();
}
lstFiles.setListData(dir.listFiles(filter));
}
@@ -371,19 +347,9 @@ public class FFileChooser extends FDialog {
final String renameBehavior = value.isDirectory() ? Forge.getLocalizer().getMessage("lblRenameFolder") : Forge.getLocalizer().getMessage("lblRenameFile");
final String deleteBehavior = value.isDirectory() ? Forge.getLocalizer().getMessage("lblDeleteFolder") : Forge.getLocalizer().getMessage("lblDeleteFile");
addItem(new FMenuItem(renameBehavior, Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT,
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
renameFile(value);
}
}));
e -> renameFile(value)));
addItem(new FMenuItem(deleteBehavior, Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT,
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
deleteFile(index, value);
}
}));
e -> deleteFile(index, value)));
}
};

View File

@@ -9,7 +9,6 @@ import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.assets.FSkinTexture;
import forge.screens.FScreen;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList.DefaultListItemRenderer;
import forge.toolbox.FList.ListItemRenderer;
import forge.util.Utils;
@@ -176,12 +175,9 @@ public class FGroupList<E> extends FScrollPane {
header = null;
}
else {
header = add(new FLabel.ButtonBuilder().text(name0).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
isCollapsed = !isCollapsed;
FGroupList.this.revalidate();
}
header = add(new FLabel.ButtonBuilder().text(name0).command(e -> {
isCollapsed = !isCollapsed;
FGroupList.this.revalidate();
}).build());
}
setVisible(false); //hide by default unless it has items

View File

@@ -464,12 +464,7 @@ public class FLabel extends FDisplayObject implements IButton {
//use FEventHandler one except when references as IButton
@Override
public void setCommand(final UiCommand command0) {
setCommand(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
command0.run();
}
});
setCommand(e -> command0.run());
}
@Override

View File

@@ -21,7 +21,6 @@ import forge.card.CardZoom;
import forge.game.card.CardView;
import forge.localinstance.skin.FSkinProp;
import forge.screens.match.views.VPrompt;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.Callback;
import forge.util.Utils;
import forge.util.WaitCallback;
@@ -269,12 +268,7 @@ public class FOptionPane extends FDialog {
final int optionsSize = options.size();
for (int i = 0; i < optionsSize; i++) {
final int option = i;
initButton(i, options.get(i), new FEventHandler() {
@Override
public void handleEvent(final FEvent e) {
setResult(option);
}
});
initButton(i, options.get(i), e -> setResult(option));
}
defaultOption = defaultOption0;
}

View File

@@ -59,31 +59,20 @@ public class FTextField extends FDisplayObject implements ITextField {
protected void buildMenu() {
if (text.length() > 0) {
if (!readOnly) {
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCut"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.getClipboard().setContents(getSelectedText());
textBeforeKeyInput = text;
insertText("");
endEdit();
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCut"), e -> {
Forge.getClipboard().setContents(getSelectedText());
textBeforeKeyInput = text;
insertText("");
endEdit();
}));
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCopy"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.getClipboard().setContents(getSelectedText());
}
}));
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblCopy"), e -> Forge.getClipboard().setContents(getSelectedText())));
}
if (!readOnly) {
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblPaste"), new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
textBeforeKeyInput = text;
insertText(Forge.getClipboard().getContents());
endEdit();
}
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblPaste"), e -> {
textBeforeKeyInput = text;
insertText(Forge.getClipboard().getContents());
endEdit();
}));
}
}