mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
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:
@@ -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 ));
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user