diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java index 250c718699f..e9feae4aff1 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java @@ -27,6 +27,7 @@ import forge.gui.GuiUtils; import forge.gui.framework.*; import forge.item.InventoryItem; import forge.item.PaperCard; +import forge.itemmanager.CardManager; import forge.itemmanager.ItemManager; import forge.itemmanager.SItemManagerUtil; import forge.menus.IMenuProvider; @@ -472,6 +473,65 @@ public abstract class ACEditorBase max) { + qty = max; + } + + addMakeFoil(qty); + if (max == 2) { return; } + + addMakeFoil(-max); + } + + /** + * Adds the individual context menu entry for foiling the requested number of cards + * + * @param qty a negative quantity will prompt the user for a number + */ + private void addMakeFoil(int qty) { + final int shortcutModifiers = 0; + String label = "Foil " + SItemManagerUtil.getItemDisplayString(getItemManager().getSelectedItems(), qty, false); + + GuiUtils.addMenuItem(menu, label, null, new Runnable() { + @Override public void run() { + Integer quantity = qty; + if (quantity < 0) { + quantity = GuiChoose.getInteger("Choose a value for X", 1, -quantity, 20); + if (quantity == null) { return; } + } + // remove *quantity* instances of existing card + CDeckEditorUI.SINGLETON_INSTANCE.removeSelectedCards(false, quantity); + // get the currently selected card from the editor + CardManager cardManager = (CardManager) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getCatalogManager(); + PaperCard existingCard = cardManager.getSelectedItem(); + // make a foiled version based on the original + PaperCard foiledCard = new PaperCard( + existingCard.getRules(), + existingCard.getEdition(), + existingCard.getRarity(), + existingCard.getArtIndex(), + true); + // bounce the new card through the inventory and *quantity* into the deck + cardManager.addItem(foiledCard, 1); + cardManager.setSelectedItem(foiledCard); + CDeckEditorUI.SINGLETON_INSTANCE.addSelectedCards(false, quantity); + // clean up the inventory + cardManager.removeItem(foiledCard, 1); + } + }, true, shortcutModifiers == 0); + } + private void addItem(final String verb, final String dest, final boolean toAlternate, final int qty, final int shortcutModifiers) { String label = verb + " " + SItemManagerUtil.getItemDisplayString(getItemManager().getSelectedItems(), qty, false); if (dest != null && !dest.isEmpty()) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java index d0cf569efbb..a823809d781 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorCommander.java @@ -134,7 +134,7 @@ public final class CEditorCommander extends ACEditorBase { */ @Override protected void buildRemoveContextMenu(EditorContextMenuBuilder cmb) { - CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode); + CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode, true); } /* diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java index b692f26e0aa..664fbcbf059 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java @@ -218,11 +218,14 @@ public final class CEditorConstructed extends ACEditorBase { } } - public static void buildRemoveContextMenu(EditorContextMenuBuilder cmb, DeckSection sectionMode) { + public static void buildRemoveContextMenu(EditorContextMenuBuilder cmb, DeckSection sectionMode, boolean foilAvailable) { switch (sectionMode) { case Main: cmb.addMoveItems("Remove", "from deck"); cmb.addMoveAlternateItems("Move", "to sideboard"); + if (foilAvailable) { + cmb.addMakeFoils(); + } break; case Sideboard: cmb.addMoveItems("Remove", "from sideboard"); @@ -259,7 +262,7 @@ public final class CEditorConstructed extends ACEditorBase { */ @Override protected void buildRemoveContextMenu(EditorContextMenuBuilder cmb) { - buildRemoveContextMenu(cmb, sectionMode); + buildRemoveContextMenu(cmb, sectionMode, true); } /* diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java index 40a1ae90875..3c126ff3461 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java @@ -224,7 +224,7 @@ public final class CEditorQuest extends ACEditorBase { */ @Override protected void buildRemoveContextMenu(final EditorContextMenuBuilder cmb) { - CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode); + CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode, false); AddRatingItem(cmb, 1); AddRatingItem(cmb, 2); AddRatingItem(cmb, 3);