- Modified setting. "Text/Mana Overlay" replaced with individual toggle setting for Card Name, P/T and Mana Cost overlays.

This commit is contained in:
spr
2013-07-11 23:00:01 +00:00
parent c591902722
commit 8331e86624
4 changed files with 843 additions and 817 deletions

View File

@@ -1,222 +1,224 @@
package forge.gui.home.settings;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.apache.commons.lang3.tuple.Pair;
import forge.Command;
import forge.Constant.Preferences;
import forge.Singletons;
import forge.control.FControl.Screens;
import forge.control.RestartUtil;
import forge.game.ai.AiProfileUtil;
import forge.gui.framework.ICDoc;
import forge.gui.framework.SLayoutIO;
import forge.gui.toolbox.FSkin;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
import java.util.ArrayList;
import java.util.List;
/**
* Controls the preferences submenu in the home UI.
*
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
*
*/
public enum CSubmenuPreferences implements ICDoc {
/** */
SINGLETON_INSTANCE;
private final List<Pair<JCheckBox, FPref>> lstControls = new ArrayList<Pair<JCheckBox,FPref>>();
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@SuppressWarnings("serial")
@Override
public void initialize() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final ForgePreferences prefs = Singletons.getModel().getPreferences();
view.getLstChooseSkin().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
updateSkin();
}
});
view.getLstChooseAIProfile().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
updateAIProfile();
}
});
// This updates variable right now and is not standard
view.getCbDevMode().addItemListener(new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent arg0) {
final boolean toggle = view.getCbDevMode().isSelected();
prefs.setPref(FPref.DEV_MODE_ENABLED, String.valueOf(toggle));
Preferences.DEV_MODE = toggle;
prefs.save();
}
});
lstControls.clear(); // just in case
lstControls.add(Pair.of(view.getCbCompactMainMenu(), FPref.UI_COMPACT_MAIN_MENU));
lstControls.add(Pair.of(view.getCbAnte(), FPref.UI_ANTE));
lstControls.add(Pair.of(view.getCbManaBurn(), FPref.UI_MANABURN));
lstControls.add(Pair.of(view.getCbScaleLarger(), FPref.UI_SCALE_LARGER));
lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY));
lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE));
lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
lstControls.add(Pair.of(view.getCbRemoveArtifacts(), FPref.DECKGEN_ARTIFACTS));
lstControls.add(Pair.of(view.getCbSingletons(), FPref.DECKGEN_SINGLETONS));
lstControls.add(Pair.of(view.getCbUploadDraft(), FPref.UI_UPLOAD_DRAFT));
lstControls.add(Pair.of(view.getCbStackLand(), FPref.UI_SMOOTH_LAND));
lstControls.add(Pair.of(view.getCbRandomFoil(), FPref.UI_RANDOM_FOIL));
lstControls.add(Pair.of(view.getCbTextMana(), FPref.UI_CARD_OVERLAY));
lstControls.add(Pair.of(view.getCbRandomizeArt(), FPref.UI_RANDOM_CARD_ART));
lstControls.add(Pair.of(view.getCbEnableSounds(), FPref.UI_ENABLE_SOUNDS));
lstControls.add(Pair.of(view.getCbAltSoundSystem(), FPref.UI_ALT_SOUND_SYSTEM));
lstControls.add(Pair.of(view.getCbUiForTouchScreen(), FPref.UI_FOR_TOUCHSCREN));
for(final Pair<JCheckBox, FPref> kv : lstControls) {
kv.getKey().addItemListener(new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent arg0) {
prefs.setPref(kv.getValue(), String.valueOf(kv.getKey().isSelected()));
prefs.save();
}
});
}
view.getBtnReset().setCommand(new Command() {
@Override
public void run() {
ForgePreferences prefs = Singletons.getModel().getPreferences();
prefs.reset();
prefs.save();
update();
}
});
view.getBtnDeleteEditorUI().setCommand(new Command() {
@Override
public void run() {
String fd = SLayoutIO.getFilePreferred(Screens.DECK_EDITOR_CONSTRUCTED);
File f = new File(fd);
f.delete();
}
});
view.getBtnDeleteMatchUI().setCommand(new Command() {
@Override
public void run() {
String fd = SLayoutIO.getFilePreferred(Screens.MATCH_SCREEN);
File f = new File(fd);
f.delete();
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final ForgePreferences prefs = Singletons.getModel().getPreferences();
updateSkinNames();
updateAIProfiles();
view.getCbDevMode().setSelected(prefs.getPrefBoolean(FPref.DEV_MODE_ENABLED));
for(Pair<JCheckBox, FPref> kv: lstControls) {
kv.getKey().setSelected(prefs.getPrefBoolean(kv.getValue()));
}
view.reloadShortcuts();
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() { view.getCbRemoveSmall().requestFocusInWindow(); }
});
}
private void updateSkinNames() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String[] uglyNames = FSkin.getSkins().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
final String[] prettyNames = new String[uglyNames.length];
final String currentName = Singletons.getModel().getPreferences().getPref(FPref.UI_SKIN);
int currentIndex = 0;
for (int i = 0; i < uglyNames.length; i++) {
prettyNames[i] = WordUtils.capitalize(uglyNames[i].replace('_', ' '));
if (currentName.equalsIgnoreCase(prettyNames[i])) { currentIndex = i; }
}
view.getLstChooseSkin().setListData(prettyNames);
view.getLstChooseSkin().setSelectedIndex(currentIndex);
view.getLstChooseSkin().ensureIndexIsVisible(view.getLstChooseSkin().getSelectedIndex());
}
private void updateAIProfiles() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final List<String> profileNames = AiProfileUtil.getProfilesDisplayList();
final String currentName = Singletons.getModel().getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE);
int currentIndex = 0;
for (int i = 0; i < profileNames.size(); i++) {
if (currentName.equalsIgnoreCase(profileNames.get(i))) { currentIndex = i; }
}
view.getLstChooseAIProfile().setListData(profileNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
view.getLstChooseAIProfile().setSelectedIndex(currentIndex);
view.getLstChooseAIProfile().ensureIndexIsVisible(view.getLstChooseAIProfile().getSelectedIndex());
}
@SuppressWarnings("serial")
private void updateSkin() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String name = view.getLstChooseSkin().getSelectedValue().toString();
final ForgePreferences prefs = Singletons.getModel().getPreferences();
if (name.equals(prefs.getPref(FPref.UI_SKIN))) { return; }
view.getScrChooseSkin().setVisible(false);
view.getLblChooseSkin().setText("Please restart Forge (click here to close).");
view.getLblChooseSkin().setHoverable(true);
view.getLblChooseSkin().setCommand(new Command() { @Override
public void run() { RestartUtil.restartApplication(null); } });
prefs.setPref(FPref.UI_SKIN, name);
prefs.save();
}
private void updateAIProfile() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String name = view.getLstChooseAIProfile().getSelectedValue().toString();
final ForgePreferences prefs = Singletons.getModel().getPreferences();
if (name.equals(prefs.getPref(FPref.UI_CURRENT_AI_PROFILE))) { return; }
prefs.setPref(FPref.UI_CURRENT_AI_PROFILE, name);
prefs.save();
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
*/
@Override
public Command getCommandOnSelect() {
return null;
}
}
package forge.gui.home.settings;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.apache.commons.lang3.tuple.Pair;
import forge.Command;
import forge.Constant.Preferences;
import forge.Singletons;
import forge.control.FControl.Screens;
import forge.control.RestartUtil;
import forge.game.ai.AiProfileUtil;
import forge.gui.framework.ICDoc;
import forge.gui.framework.SLayoutIO;
import forge.gui.toolbox.FSkin;
import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref;
import java.util.ArrayList;
import java.util.List;
/**
* Controls the preferences submenu in the home UI.
*
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
*
*/
public enum CSubmenuPreferences implements ICDoc {
/** */
SINGLETON_INSTANCE;
private final List<Pair<JCheckBox, FPref>> lstControls = new ArrayList<Pair<JCheckBox,FPref>>();
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@SuppressWarnings("serial")
@Override
public void initialize() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final ForgePreferences prefs = Singletons.getModel().getPreferences();
view.getLstChooseSkin().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
updateSkin();
}
});
view.getLstChooseAIProfile().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
updateAIProfile();
}
});
// This updates variable right now and is not standard
view.getCbDevMode().addItemListener(new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent arg0) {
final boolean toggle = view.getCbDevMode().isSelected();
prefs.setPref(FPref.DEV_MODE_ENABLED, String.valueOf(toggle));
Preferences.DEV_MODE = toggle;
prefs.save();
}
});
lstControls.clear(); // just in case
lstControls.add(Pair.of(view.getCbCompactMainMenu(), FPref.UI_COMPACT_MAIN_MENU));
lstControls.add(Pair.of(view.getCbAnte(), FPref.UI_ANTE));
lstControls.add(Pair.of(view.getCbManaBurn(), FPref.UI_MANABURN));
lstControls.add(Pair.of(view.getCbScaleLarger(), FPref.UI_SCALE_LARGER));
lstControls.add(Pair.of(view.getCbEnforceDeckLegality(), FPref.ENFORCE_DECK_LEGALITY));
lstControls.add(Pair.of(view.getCbCloneImgSource(), FPref.UI_CLONE_MODE_SOURCE));
lstControls.add(Pair.of(view.getCbRemoveSmall(), FPref.DECKGEN_NOSMALL));
lstControls.add(Pair.of(view.getCbRemoveArtifacts(), FPref.DECKGEN_ARTIFACTS));
lstControls.add(Pair.of(view.getCbSingletons(), FPref.DECKGEN_SINGLETONS));
lstControls.add(Pair.of(view.getCbUploadDraft(), FPref.UI_UPLOAD_DRAFT));
lstControls.add(Pair.of(view.getCbStackLand(), FPref.UI_SMOOTH_LAND));
lstControls.add(Pair.of(view.getCbRandomFoil(), FPref.UI_RANDOM_FOIL));
lstControls.add(Pair.of(view.getCbOverlayCardName(), FPref.UI_OVERLAY_CARD_NAME));
lstControls.add(Pair.of(view.getCbOverlayCardPower(), FPref.UI_OVERLAY_CARD_POWER));
lstControls.add(Pair.of(view.getCbOverlayCardManaCost(), FPref.UI_OVERLAY_CARD_MANA_COST));
lstControls.add(Pair.of(view.getCbRandomizeArt(), FPref.UI_RANDOM_CARD_ART));
lstControls.add(Pair.of(view.getCbEnableSounds(), FPref.UI_ENABLE_SOUNDS));
lstControls.add(Pair.of(view.getCbAltSoundSystem(), FPref.UI_ALT_SOUND_SYSTEM));
lstControls.add(Pair.of(view.getCbUiForTouchScreen(), FPref.UI_FOR_TOUCHSCREN));
for(final Pair<JCheckBox, FPref> kv : lstControls) {
kv.getKey().addItemListener(new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent arg0) {
prefs.setPref(kv.getValue(), String.valueOf(kv.getKey().isSelected()));
prefs.save();
}
});
}
view.getBtnReset().setCommand(new Command() {
@Override
public void run() {
ForgePreferences prefs = Singletons.getModel().getPreferences();
prefs.reset();
prefs.save();
update();
}
});
view.getBtnDeleteEditorUI().setCommand(new Command() {
@Override
public void run() {
String fd = SLayoutIO.getFilePreferred(Screens.DECK_EDITOR_CONSTRUCTED);
File f = new File(fd);
f.delete();
}
});
view.getBtnDeleteMatchUI().setCommand(new Command() {
@Override
public void run() {
String fd = SLayoutIO.getFilePreferred(Screens.MATCH_SCREEN);
File f = new File(fd);
f.delete();
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final ForgePreferences prefs = Singletons.getModel().getPreferences();
updateSkinNames();
updateAIProfiles();
view.getCbDevMode().setSelected(prefs.getPrefBoolean(FPref.DEV_MODE_ENABLED));
for(Pair<JCheckBox, FPref> kv: lstControls) {
kv.getKey().setSelected(prefs.getPrefBoolean(kv.getValue()));
}
view.reloadShortcuts();
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() { view.getCbRemoveSmall().requestFocusInWindow(); }
});
}
private void updateSkinNames() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String[] uglyNames = FSkin.getSkins().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
final String[] prettyNames = new String[uglyNames.length];
final String currentName = Singletons.getModel().getPreferences().getPref(FPref.UI_SKIN);
int currentIndex = 0;
for (int i = 0; i < uglyNames.length; i++) {
prettyNames[i] = WordUtils.capitalize(uglyNames[i].replace('_', ' '));
if (currentName.equalsIgnoreCase(prettyNames[i])) { currentIndex = i; }
}
view.getLstChooseSkin().setListData(prettyNames);
view.getLstChooseSkin().setSelectedIndex(currentIndex);
view.getLstChooseSkin().ensureIndexIsVisible(view.getLstChooseSkin().getSelectedIndex());
}
private void updateAIProfiles() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final List<String> profileNames = AiProfileUtil.getProfilesDisplayList();
final String currentName = Singletons.getModel().getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE);
int currentIndex = 0;
for (int i = 0; i < profileNames.size(); i++) {
if (currentName.equalsIgnoreCase(profileNames.get(i))) { currentIndex = i; }
}
view.getLstChooseAIProfile().setListData(profileNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
view.getLstChooseAIProfile().setSelectedIndex(currentIndex);
view.getLstChooseAIProfile().ensureIndexIsVisible(view.getLstChooseAIProfile().getSelectedIndex());
}
@SuppressWarnings("serial")
private void updateSkin() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String name = view.getLstChooseSkin().getSelectedValue().toString();
final ForgePreferences prefs = Singletons.getModel().getPreferences();
if (name.equals(prefs.getPref(FPref.UI_SKIN))) { return; }
view.getScrChooseSkin().setVisible(false);
view.getLblChooseSkin().setText("Please restart Forge (click here to close).");
view.getLblChooseSkin().setHoverable(true);
view.getLblChooseSkin().setCommand(new Command() { @Override
public void run() { RestartUtil.restartApplication(null); } });
prefs.setPref(FPref.UI_SKIN, name);
prefs.save();
}
private void updateAIProfile() {
final VSubmenuPreferences view = VSubmenuPreferences.SINGLETON_INSTANCE;
final String name = view.getLstChooseAIProfile().getSelectedValue().toString();
final ForgePreferences prefs = Singletons.getModel().getPreferences();
if (name.equals(prefs.getPref(FPref.UI_CURRENT_AI_PROFILE))) { return; }
prefs.setPref(FPref.UI_CURRENT_AI_PROFILE, name);
prefs.save();
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
*/
@Override
public Command getCommandOnSelect() {
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -38,7 +38,9 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
UI_RANDOM_FOIL ("false"),
UI_SMOOTH_LAND ("false"),
UI_AVATARS ("0,1"),
UI_CARD_OVERLAY ("true"),
UI_OVERLAY_CARD_NAME ("true"),
UI_OVERLAY_CARD_POWER ("true"),
UI_OVERLAY_CARD_MANA_COST ("true"),
UI_UPLOAD_DRAFT ("false"),
UI_SCALE_LARGER ("true"),
UI_MAX_STACK ("3"),

View File

@@ -125,7 +125,6 @@ public class CardPanel extends JPanel implements CardContainer {
private boolean isAnimationPanel;
private int cardXOffset, cardYOffset, cardWidth, cardHeight;
private boolean isSelected;
private boolean showCastingCost;
/**
* <p>
@@ -281,18 +280,6 @@ public class CardPanel extends JPanel implements CardContainer {
return this.isSelected;
}
/**
* <p>
* Setter for the field <code>showCastingCost</code>.
* </p>
*
* @param showCastingCost
* a boolean.
*/
public final void setShowCastingCost(final boolean showCastingCost) {
this.showCastingCost = showCastingCost;
}
/** {@inheritDoc} */
@Override
public final void paint(final Graphics g) {
@@ -361,7 +348,7 @@ public class CardPanel extends JPanel implements CardContainer {
int height = CardFaceSymbols.getHeight();
CardFaceSymbols.draw(g, cost, (this.cardXOffset + (this.cardWidth / 2)) - (width / 2), deltaY + this.cardYOffset + (this.cardHeight / 2) - height/2);
}
/** {@inheritDoc} */
@Override
protected final void paintChildren(final Graphics g) {
@@ -371,7 +358,7 @@ public class CardPanel extends JPanel implements CardContainer {
return;
}
if (this.showCastingCost && this.cardWidth < 200) {
if (showCardManaCostOverlay() && this.cardWidth < 200) {
Card gameCard = this.getGameCard();
boolean showSplitMana = gameCard.isSplitCard() && gameCard.getCurState() == CardCharacteristicName.Original;
if ( !showSplitMana ) {
@@ -593,34 +580,37 @@ public class CardPanel extends JPanel implements CardContainer {
* a {@link forge.Card} object.
*/
public final void setText(final Card card) {
if ((card == null) || !Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_CARD_OVERLAY)) {
if ((card == null)) {
return;
}
if (card.isFaceDown()) {
this.titleText.setText("");
this.showCastingCost = false;
} else {
this.titleText.setText(card.getName());
this.showCastingCost = true;
if (showCardNameOverlay()) {
this.titleText.setText(card.getName());
}
}
if (showCardPowerOverlay()) {
String sPt = "";
if (card.isCreature() && card.isPlaneswalker()) {
sPt = String.format("%d/%d (%d)", card.getNetAttack(), card.getNetDefense(), card.getCounters(CounterType.LOYALTY));
} else if (card.isCreature()) {
sPt = String.format("%d/%d", card.getNetAttack(), card.getNetDefense());
} else if (card.isPlaneswalker()) {
int loyalty = card.getCounters(CounterType.LOYALTY);
sPt = String.valueOf(loyalty == 0 ? card.getBaseLoyalty() : loyalty);
}
this.ptText.setText(sPt);
}
String sPt = "";
if (card.isCreature() && card.isPlaneswalker()) {
sPt = String.format("%d/%d (%d)", card.getNetAttack(), card.getNetDefense(), card.getCounters(CounterType.LOYALTY));
} else if (card.isCreature()) {
sPt = String.format("%d/%d", card.getNetAttack(), card.getNetDefense());
} else if (card.isPlaneswalker()) {
int loyalty = card.getCounters(CounterType.LOYALTY);
sPt = String.valueOf(loyalty == 0 ? card.getBaseLoyalty() : loyalty);
}
this.ptText.setText(sPt);
int damage = card.getDamage();
this.damageText.setText(damage > 0 ? "\u00BB " + String.valueOf(damage) + " \u00AB" : "");
}
/**
* <p>
* getCard.
@@ -646,13 +636,11 @@ public class CardPanel extends JPanel implements CardContainer {
}
final BufferedImage image = card == null ? null : ImageCache.getImage(card, imagePanel.getWidth(), imagePanel.getHeight());
if ((this.getGameCard() != null) && Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_CARD_OVERLAY)) {
this.setText(this.getGameCard());
}
this.setText(this.getGameCard());
this.setImage(image);
}
/**
* Gets the game card.
*
@@ -775,4 +763,22 @@ public class CardPanel extends JPanel implements CardContainer {
public static final float getBorderSize() {
return BLACK_BORDER_SIZE;
}
private boolean isPreferenceEnabled(FPref preferenceName) {
return Singletons.getModel().getPreferences().getPrefBoolean(preferenceName);
}
private boolean showCardNameOverlay() {
return isPreferenceEnabled(FPref.UI_OVERLAY_CARD_NAME);
}
private boolean showCardPowerOverlay() {
return isPreferenceEnabled(FPref.UI_OVERLAY_CARD_POWER);
}
private boolean showCardManaCostOverlay() {
return isPreferenceEnabled(FPref.UI_OVERLAY_CARD_MANA_COST) && !this.getCard().isFaceDown();
}
}