TokenViewer Deck "editor"

This commit is contained in:
Chris H
2019-03-30 22:09:16 -04:00
parent 16314d5ebc
commit a050f7c26c
7 changed files with 254 additions and 4 deletions

View File

@@ -103,7 +103,7 @@ public class TokenDb implements ITokenDatabase {
@Override
public List<PaperToken> getAllTokens() {
return null;
return new ArrayList<>(tokensByName.values());
}
@Override
@@ -123,6 +123,6 @@ public class TokenDb implements ITokenDatabase {
@Override
public Iterator<PaperToken> iterator() {
return null;
return tokensByName.values().iterator();
}
}

View File

@@ -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,

View File

@@ -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<PaperToken> {
public TokenManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) {
super(PaperToken.class, cDetailPicture, wantUnique0);
}
@Override
protected void addDefaultFilters() {
}
@Override
protected ItemFilter<PaperToken> createSearchFilter() {
return null;
}
@Override
protected void buildAddFilterMenu(JMenu menu) {
}
}

View File

@@ -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<PaperToken, DeckBase> {
private DragCell allDecksParent = null;
private DragCell deckGenParent = null;
private DragCell probsParent = null;
private final List<PaperToken> 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<Map.Entry<PaperToken, Integer>> items, boolean toAlternate) {
}
@Override
protected void onRemoveItems(Iterable<Map.Entry<PaperToken, Integer>> 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<DeckBase> 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<PaperToken>) 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);
}
}
}

View File

@@ -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()) {

View File

@@ -56,6 +56,9 @@ public enum VSubmenuPreferences implements IVSubmenu<CSubmenuPreferences> {
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<CSubmenuPreferences> {
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<CSubmenuPreferences> {
public final FLabel getBtnUserProfileUI() { return btnUserProfileUI; }
public final FLabel getBtnClearImageCache() { return btnClearImageCache; }
public final FLabel getBtnTokenPreviewer() { return btnTokenPreviewer; }
public final FLabel getBtnResetJavaFutureCompatibilityWarnings() {
return btnResetJavaFutureCompatibilityWarnings;
}

View File

@@ -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