diff --git a/forge-core/src/main/java/forge/token/TokenDb.java b/forge-core/src/main/java/forge/token/TokenDb.java index 685bfc91aeb..7350313806f 100644 --- a/forge-core/src/main/java/forge/token/TokenDb.java +++ b/forge-core/src/main/java/forge/token/TokenDb.java @@ -103,7 +103,7 @@ public class TokenDb implements ITokenDatabase { @Override public List getAllTokens() { - return null; + return new ArrayList<>(tokensByName.values()); } @Override @@ -123,6 +123,6 @@ public class TokenDb implements ITokenDatabase { @Override public Iterator iterator() { - return null; + return tokensByName.values().iterator(); } } diff --git a/forge-gui-desktop/src/main/java/forge/gui/framework/FScreen.java b/forge-gui-desktop/src/main/java/forge/gui/framework/FScreen.java index 77dc5e2c4b2..487d8837261 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/framework/FScreen.java +++ b/forge-gui-desktop/src/main/java/forge/gui/framework/FScreen.java @@ -1,7 +1,5 @@ package forge.gui.framework; -import java.io.File; - import forge.Singletons; import forge.assets.FSkinProp; import forge.properties.FileLocation; @@ -21,6 +19,8 @@ import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinImage; import forge.view.FView; +import java.io.File; + /** * Definitions for Forge screens */ @@ -115,6 +115,16 @@ public class FScreen { "Close Editor", ForgeConstants.EDITOR_LAYOUT_FILE, false); + public static final FScreen TOKEN_VIEWER = new FScreen( + VDeckEditorUI.SINGLETON_INSTANCE, + CDeckEditorUI.SINGLETON_INSTANCE, + "Token Viewer", + FSkin.getImage(FSkinProp.IMG_PACK), + true, + "Close Viewer", + ForgeConstants.EDITOR_LAYOUT_FILE, + false); + public static final FScreen DECK_EDITOR_QUEST = new FScreen( VDeckEditorUI.SINGLETON_INSTANCE, CDeckEditorUI.SINGLETON_INSTANCE, diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/TokenManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/TokenManager.java new file mode 100644 index 00000000000..8dc1d15277c --- /dev/null +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/TokenManager.java @@ -0,0 +1,28 @@ +package forge.itemmanager; + +import forge.item.PaperToken; +import forge.itemmanager.filters.ItemFilter; +import forge.screens.match.controllers.CDetailPicture; + +import javax.swing.*; + +public class TokenManager extends ItemManager { + public TokenManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) { + super(PaperToken.class, cDetailPicture, wantUnique0); + } + + @Override + protected void addDefaultFilters() { + + } + + @Override + protected ItemFilter createSearchFilter() { + return null; + } + + @Override + protected void buildAddFilterMenu(JMenu menu) { + + } +} diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorTokenViewer.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorTokenViewer.java new file mode 100644 index 00000000000..e7424d9c29c --- /dev/null +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorTokenViewer.java @@ -0,0 +1,171 @@ +package forge.screens.deckeditor.controllers; + + +import forge.deck.DeckBase; +import forge.gui.framework.DragCell; +import forge.gui.framework.FScreen; +import forge.item.PaperToken; +import forge.itemmanager.TokenManager; +import forge.model.FModel; +import forge.screens.deckeditor.views.*; +import forge.screens.home.quest.CSubmenuQuestDecks; +import forge.screens.match.controllers.CDetailPicture; + +import java.util.List; +import java.util.Map; + +public class CEditorTokenViewer extends ACEditorBase { + + private DragCell allDecksParent = null; + private DragCell deckGenParent = null; + private DragCell probsParent = null; + + private final List fullCatalogCards = FModel.getMagicDb().getAllTokens().getAllTokens(); + + // remember changed gui elements + private String CCTabLabel = new String(); + private String CCAddLabel = new String(); + private String CDTabLabel = new String(); + private String CDRemLabel = new String(); + private String prevRem4Label = null; + private String prevRem4Tooltip = null; + private Runnable prevRem4Cmd = null; + + /** + * Child controller for quest card shop UI. + * + */ + public CEditorTokenViewer(final CDetailPicture cDetailPicture) { + super(FScreen.TOKEN_VIEWER, cDetailPicture); + + final TokenManager catalogManager = new TokenManager(getCDetailPicture(), false); + final TokenManager deckManager = new TokenManager(cDetailPicture, false); + catalogManager.setCaption("All Tokens"); + catalogManager.setAlwaysNonUnique(true); + this.setCatalogManager(catalogManager); + this.setDeckManager(deckManager); + } + + //=========== Overridden from ACEditorBase + + @Override + protected ACEditorBase.CardLimit getCardLimit() { + return ACEditorBase.CardLimit.None; + } + + @Override + protected void onAddItems(Iterable> items, boolean toAlternate) { + + } + + @Override + protected void onRemoveItems(Iterable> items, boolean toAlternate) { + + } + + @Override + protected void buildAddContextMenu(ACEditorBase.EditorContextMenuBuilder cmb) { + } + + @Override + protected void buildRemoveContextMenu(ACEditorBase.EditorContextMenuBuilder cmb) { + } + + /* + * (non-Javadoc) + * + * @see forge.gui.deckeditor.ACEditorBase#resetTables() + */ + @Override + public void resetTables() { + } + + /* + * (non-Javadoc) + * + * @see forge.gui.deckeditor.ACEditorBase#getController() + */ + @Override + public DeckController getDeckController() { + return null; + } + + /* (non-Javadoc) + * @see forge.gui.deckeditor.ACEditorBase#show(forge.Command) + */ + @SuppressWarnings("serial") + @Override + public void update() { + resetUI(); + + CCTabLabel = VCardCatalog.SINGLETON_INSTANCE.getTabLabel().getText(); + VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText("All tokens"); + + this.getBtnAdd().setVisible(false); + this.getBtnRemove().setVisible(false); + + this.getBtnAddBasicLands().setVisible(false); + + VProbabilities.SINGLETON_INSTANCE.getTabLabel().setVisible(false); + + prevRem4Label = this.getBtnRemove4().getText(); + prevRem4Tooltip = this.getBtnRemove4().getToolTipText(); + prevRem4Cmd = this.getBtnRemove4().getCommand(); + + VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false); + + this.getCatalogManager().setPool(fullCatalogCards); + this.getDeckManager().setPool((Iterable) null); + + this.getBtnRemove4().setVisible(false); + + + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); + probsParent = removeTab(VProbabilities.SINGLETON_INSTANCE); + } + + /* (non-Javadoc) + * @see forge.gui.deckeditor.controllers.ACEditorBase#canSwitchAway() + */ + @Override + public boolean canSwitchAway(boolean isClosing) { + FModel.getQuest().save(); + return true; + } + + /* (non-Javadoc) + * @see forge.gui.deckeditor.controllers.ACEditorBase#resetUIChanges() + */ + @Override + public void resetUIChanges() { + CSubmenuQuestDecks.SINGLETON_INSTANCE.update(); + + + this.getCatalogManager().getPnlButtons().add(this.getBtnAdd4()); + + this.getBtnRemove4().setText(prevRem4Label); + this.getBtnRemove4().setToolTipText(prevRem4Tooltip); + this.getBtnRemove4().setCommand(prevRem4Cmd); + + VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText(CCTabLabel); + VCurrentDeck.SINGLETON_INSTANCE.getTabLabel().setText(CDTabLabel); + + this.getBtnAdd().setText(CCAddLabel); + this.getBtnRemove().setText(CDRemLabel); + + //TODO: Remove filter for SItemManagerUtil.StatTypes.PACK + + //Re-add tabs + if (deckGenParent != null) { + deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE); + } + if (allDecksParent != null) { + allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE); + } + if (probsParent != null) { + probsParent.addDoc(VProbabilities.SINGLETON_INSTANCE); + } + } + +} diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java index 3347ebd987b..56caa7fa3f0 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/CSubmenuPreferences.java @@ -1,5 +1,6 @@ package forge.screens.home.settings; +import forge.GuiBase; import forge.Singletons; import forge.UiCommand; import forge.ai.AiProfileUtil; @@ -13,6 +14,8 @@ import forge.player.GamePlayerUtil; import forge.properties.ForgeConstants; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; +import forge.screens.deckeditor.CDeckEditorUI; +import forge.screens.deckeditor.controllers.CEditorTokenViewer; import forge.sound.SoundSystem; import forge.toolbox.FComboBox; import forge.toolbox.FComboBoxPanel; @@ -190,6 +193,20 @@ public enum CSubmenuPreferences implements ICDoc { } }); + view.getBtnClearImageCache().setCommand(new UiCommand() { + @Override + public void run() { + CSubmenuPreferences.this.clearImageCache(); + } + }); + + view.getBtnTokenPreviewer().setCommand(new UiCommand() { + @Override + public void run() { + CSubmenuPreferences.this.openTokenPreviewer(); + } + }); + view.getBtnResetJavaFutureCompatibilityWarnings().setCommand(new UiCommand() { @Override public void run() { @@ -292,6 +309,20 @@ public enum CSubmenuPreferences implements ICDoc { } } + private void clearImageCache() { + try { + GuiBase.getInterface().clearImageCache(); + } catch(final Exception e) { + System.out.println("Unable to clear cache: " + e.toString()); + } + } + + private void openTokenPreviewer() { + Singletons.getControl().setCurrentScreen(FScreen.TOKEN_VIEWER); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController( + new CEditorTokenViewer(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); + } + private void openContentDirectory() { try { if (Desktop.isDesktopSupported()) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java index 7dd0f70ae1f..8a1b8bc3542 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuPreferences.java @@ -56,6 +56,9 @@ public enum VSubmenuPreferences implements IVSubmenu { private final FLabel btnUserProfileUI = new FLabel.Builder().opaque(true).hoverable(true).text(localizer.getMessage("btnUserProfileUI")).build(); private final FLabel btnContentDirectoryUI = new FLabel.Builder().opaque(true).hoverable(true).text(localizer.getMessage("btnContentDirectoryUI")).build(); private final FLabel btnResetJavaFutureCompatibilityWarnings = new FLabel.Builder().opaque(true).hoverable(true).text(localizer.getMessage("btnResetJavaFutureCompatibilityWarnings")).build(); + private final FLabel btnClearImageCache = new FLabel.Builder().opaque(true).hoverable(true).text(localizer.getMessage("btnClearImageCache")).build(); + private final FLabel btnTokenPreviewer = new FLabel.Builder().opaque(true).hoverable(true).text(localizer.getMessage("btnTokenPreviewer")).build(); + private final FLabel btnPlayerName = new FLabel.Builder().opaque(true).hoverable(true).text("").build(); private final JCheckBox cbRemoveSmall = new OptionsCheckBox(localizer.getMessage("cbRemoveSmall")); @@ -143,6 +146,8 @@ public enum VSubmenuPreferences implements IVSubmenu { pnlPrefs.add(btnDeleteWorkshopUI, twoButtonConstraints2); pnlPrefs.add(btnUserProfileUI, twoButtonConstraints1); pnlPrefs.add(btnContentDirectoryUI, twoButtonConstraints2); + pnlPrefs.add(btnClearImageCache, twoButtonConstraints1); + pnlPrefs.add(btnTokenPreviewer, twoButtonConstraints2); // General Configuration pnlPrefs.add(new SectionLabel(localizer.getMessage("GeneralConfiguration")), sectionConstraints); @@ -781,6 +786,9 @@ public enum VSubmenuPreferences implements IVSubmenu { public final FLabel getBtnUserProfileUI() { return btnUserProfileUI; } + public final FLabel getBtnClearImageCache() { return btnClearImageCache; } + public final FLabel getBtnTokenPreviewer() { return btnTokenPreviewer; } + public final FLabel getBtnResetJavaFutureCompatibilityWarnings() { return btnResetJavaFutureCompatibilityWarnings; } diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 0d7506d5f38..fab21b1c421 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -13,6 +13,8 @@ btnDeleteWorkshopUI = Reset Workshop Layout btnUserProfileUI = Open User Directory btnContentDirectoryUI = Open Content Directory btnResetJavaFutureCompatibilityWarnings = Reset Java Compatibility Warnings +btnClearImageCache = Clear Image Cache +btnTokenPreviewer = Token Previewer btnCopyToClipboard= Copy to Clipboard cbRemoveSmall = Remove Small Creatures cbCardBased = Include Card-based Deck Generation