Sealed mode home screen menu fully working.

Deck editor button moved to utilities menu.
This commit is contained in:
Doublestrike
2011-12-14 23:53:26 +00:00
parent 4b3de0987c
commit 16e7595ca5
9 changed files with 394 additions and 91 deletions

1
.gitattributes vendored
View File

@@ -10772,6 +10772,7 @@ src/main/java/forge/control/ControlWinLose.java -text
src/main/java/forge/control/home/ControlConstructed.java -text
src/main/java/forge/control/home/ControlDraft.java -text
src/main/java/forge/control/home/ControlQuest.java -text
src/main/java/forge/control/home/ControlSealed.java -text
src/main/java/forge/control/home/ControlSettings.java -text
src/main/java/forge/control/home/ControlUtilities.java -text
src/main/java/forge/control/home/package-info.java -text svneol=native#text/plain

View File

@@ -1,9 +1,5 @@
package forge.control;
import forge.Command;
import forge.deck.Deck;
import forge.game.GameType;
import forge.gui.deckeditor.DeckEditorCommon;
import forge.view.home.HomeTopLevel;
/**
@@ -18,31 +14,13 @@ public class ControlHomeUI {
view = v0;
}
/** @param d0   Deck*/
public void showDeckEditor(Deck d0) {
GameType gt = GameType.Constructed;
DeckEditorCommon editor = new DeckEditorCommon(gt);
final Command exit = new Command() {
private static final long serialVersionUID = -9133358399503226853L;
@Override
public void execute() {
view.getConstructedController().updateDeckNames();
}
};
editor.show(exit);
if (d0 != null) {
editor.getCustomMenu().showDeck(d0, gt);
}
editor.setVisible(true);
}
/** */
public void exit() {
System.exit(0);
}
/** @return HomeTopLevel */
public HomeTopLevel getView() {
return view;
}
}

View File

@@ -57,7 +57,10 @@ public class ControlConstructed {
// Reference values for colors, needed for deck generation classes.
// TODO enum me or get from another enum
colorVals = new HashMap<String, String>();
colorVals.put("Random", "AI");
colorVals.put("Random 1", "AI");
colorVals.put("Random 2", "AI");
colorVals.put("Random 3", "AI");
colorVals.put("Random 4", "AI");
colorVals.put("Black", "black");
colorVals.put("Blue", "blue");
colorVals.put("Green", "green");

View File

@@ -0,0 +1,175 @@
package forge.control.home;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.UtilFunctions;
import forge.AllZone;
import forge.Constant;
import forge.PlayerType;
import forge.control.ControlAllUI;
import forge.deck.Deck;
import forge.deck.DeckManager;
import forge.game.GameType;
import forge.game.limited.SealedDeck;
import forge.gui.GuiUtils;
import forge.item.CardPrinted;
import forge.item.ItemPool;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.view.GuiTopLevel;
import forge.view.home.ViewSealed;
/**
* Controls behavior of swing components in "sealed" mode menu.
*
*/
public class ControlSealed {
private ViewSealed view;
private DeckManager deckManager;
/**
* Controls behavior of swing components in "sealed" mode menu.
*
* @param v0 &emsp; ViewSealed
*/
public ControlSealed(ViewSealed v0) {
view = v0;
deckManager = AllZone.getDeckManager();
}
/** */
public void start() {
String human = view.getLstHumanDecks().getSelectedValue().toString();
if (human == null) {
JOptionPane.showMessageDialog(null,
"Please build and/or select a deck for yourself.",
"No deck", JOptionPane.ERROR_MESSAGE);
return;
}
String ai = view.getLstHumanDecks().getSelectedValue().toString();
if (ai == null) {
JOptionPane.showMessageDialog(null,
"Please build and/or select a deck for the computer.",
"No deck", JOptionPane.ERROR_MESSAGE);
return;
}
Constant.Runtime.HUMAN_DECK[0] = deckManager.getDeck(human);
Constant.Runtime.COMPUTER_DECK[0] = deckManager.getDeck(ai);
ControlAllUI c = ((GuiTopLevel) AllZone.getDisplay()).getController();
c.changeState(1);
c.getMatchController().initMatch();
AllZone.getGameAction().newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0]);
}
/** */
public void updateDeckLists() {
List<String> aiNames = new ArrayList<String>();
List<String> humanNames = new ArrayList<String>();
for (Deck d : deckManager.getDecks()) {
if (d.getDeckType().equals(GameType.Sealed)) {
if (d.getPlayerType() == PlayerType.COMPUTER) {
aiNames.add(d.getName());
}
else {
humanNames.add(d.getName());
}
}
}
view.getLstHumanDecks().setListData(oa2sa(humanNames.toArray()));
view.getLstAIDecks().setListData(oa2sa(aiNames.toArray()));
}
/** */
public void setupSealed() {
Deck deck = new Deck(GameType.Sealed);
// ReadBoosterPack booster = new ReadBoosterPack();
// CardList pack = booster.getBoosterPack5();
ArrayList<String> sealedTypes = new ArrayList<String>();
sealedTypes.add("Full Cardpool");
sealedTypes.add("Block / Set");
sealedTypes.add("Custom");
final String prompt = "Choose Sealed Deck Format:";
final Object o = GuiUtils.getChoice(prompt, sealedTypes.toArray());
SealedDeck sd = null;
if (o.toString().equals(sealedTypes.get(0))) {
sd = new SealedDeck("Full");
}
else if (o.toString().equals(sealedTypes.get(1))) {
sd = new SealedDeck("Block");
}
else if (o.toString().equals(sealedTypes.get(2))) {
sd = new SealedDeck("Custom");
}
else {
throw new IllegalStateException("choice <<" + UtilFunctions.safeToString(o)
+ ">> does not equal any of the sealedTypes.");
}
final ItemPool<CardPrinted> sDeck = sd.getCardpool();
deck.addSideboard(sDeck);
for (final String element : Constant.Color.BASIC_LANDS) {
for (int j = 0; j < 18; j++) {
deck.addSideboard(element + "|" + sd.getLandSetCode()[0]);
}
}
final String sDeckName = JOptionPane.showInputDialog(null,
ForgeProps.getLocalized(NewConstants.Lang.OldGuiNewGame.NewGameText.SAVE_SEALED_MSG),
ForgeProps.getLocalized(NewConstants.Lang.OldGuiNewGame.NewGameText.SAVE_SEALED_TTL),
JOptionPane.QUESTION_MESSAGE);
deck.setName(sDeckName);
deck.setPlayerType(PlayerType.HUMAN);
Constant.Runtime.HUMAN_DECK[0] = deck;
Constant.Runtime.setGameType(GameType.Sealed);
Deck aiDeck = sd.buildAIDeck(sDeck.toForgeCardList());
//final Deck aiDeck = sd.buildAIDeck(sd.getCardpool().toForgeCardList());
// AI will use different cardpool
aiDeck.setName("AI_" + sDeckName);
aiDeck.setPlayerType(PlayerType.COMPUTER);
deckManager.addDeck(aiDeck);
DeckManager.writeDeck(aiDeck, DeckManager.makeFileName(aiDeck));
//this.updateDeckComboBoxes();
view.getParentView().getUtilitiesController().showDeckEditor(GameType.Sealed, deck);
Constant.Runtime.COMPUTER_DECK[0] = aiDeck;
}
/**
* Exhaustively converts object array to string array.
* Probably a much easier way to do this.
*
* @param o0 &emsp; Object[]
* @return String[]
*/
public String[] oa2sa(Object[] o0) {
String[] output = new String[o0.length];
for (int i = 0; i < o0.length; i++) {
output[i] = o0[i].toString();
}
return output;
}
}

View File

@@ -2,17 +2,23 @@ package forge.control.home;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import forge.Command;
import forge.GuiDownloadPicturesLQ;
import forge.GuiDownloadPrices;
import forge.GuiDownloadQuestImages;
import forge.GuiDownloadSetPicturesLQ;
import forge.GuiImportPicture;
import forge.deck.Deck;
import forge.error.BugzReporter;
import forge.game.GameType;
import forge.gui.deckeditor.DeckEditorCommon;
import forge.properties.ForgeProps;
import forge.properties.NewConstants.Lang;
import forge.view.home.ViewUtilities;
@@ -23,7 +29,7 @@ import forge.view.home.ViewUtilities;
*/
public class ControlUtilities {
private ViewUtilities view;
private boolean licensingExpanded = false;
/**
*
* Controls logic and listeners for Utilities panel of the home screen.
@@ -99,17 +105,89 @@ public class ControlUtilities {
gdp.setVisible(true);
}
});
this.view.getBtnDeckEditor().addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent arg0) {
showDeckEditor(null, null);
}
});
this.view.getTarLicensing().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (licensingExpanded) {
hideLicenseInfo();
licensingExpanded = false;
}
else {
showLicenseInfo();
licensingExpanded = true;
}
}
});
}
private void doDownloadPics() {
new GuiDownloadPicturesLQ(null);
}
private void doDownloadSetPics() {
new GuiDownloadSetPicturesLQ(null);
}
private void doDownloadQuestImages() {
new GuiDownloadQuestImages(null);
}
private void showLicenseInfo() {
view.getTarLicensing().setText(
"This program is free software : you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation, either version 3 of the License, or "
+ "(at your option) any later version."
+ "\r\n"
+ "This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
+ "GNU General Public License for more details."
+ "\r\n"
+ "You should have received a copy of the GNU General Public License "
+ "along with this program. If not, see <http://www.gnu.org/licenses/>."
);
}
private void hideLicenseInfo() {
view.getTarLicensing().setText("Click here for license information.");
}
/**
* @param gt0 &emsp; GameType
* @param d0 &emsp; Deck
*/
public void showDeckEditor(GameType gt0, Deck d0) {
if (gt0 == null) {
gt0 = GameType.Constructed;
}
DeckEditorCommon editor = new DeckEditorCommon(gt0);
final Command exit = new Command() {
private static final long serialVersionUID = -9133358399503226853L;
@Override
public void execute() {
view.getParentView().getConstructedController().updateDeckNames();
view.getParentView().getSealedController().updateDeckLists();
}
};
editor.show(exit);
if (d0 != null) {
editor.getCustomMenu().showDeck(d0, gt0);
}
editor.setVisible(true);
}
}

View File

@@ -31,6 +31,8 @@ import forge.AllZone;
import forge.control.ControlHomeUI;
import forge.control.home.ControlConstructed;
import forge.control.home.ControlDraft;
import forge.control.home.ControlSealed;
import forge.control.home.ControlUtilities;
import forge.view.toolbox.FButton;
import forge.view.toolbox.FPanel;
import forge.view.toolbox.FRoundedPanel;
@@ -45,7 +47,7 @@ import forge.view.toolbox.FSkin;
@SuppressWarnings("serial")
public class HomeTopLevel extends FPanel {
private JPanel pnlMenu, pnlContent;
private FButton btnDraft, btnConstructed, btnSealed, btnQuest, btnSettings, btnUtilities, btnEditor, btnExit;
private FButton btnDraft, btnConstructed, btnSealed, btnQuest, btnSettings, btnUtilities, btnExit;
private FSkin skin;
private String constraints;
private String imgDirAddress;
@@ -127,12 +129,6 @@ public class HomeTopLevel extends FPanel {
});
btnUtilities.setText("Utilities");
btnEditor = new FButton();
btnEditor.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent arg0) { control.showDeckEditor(null); }
});
btnEditor.setText("Deck Editor");
btnExit = new FButton();
btnExit.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent arg0) { control.exit(); }
@@ -152,7 +148,6 @@ public class HomeTopLevel extends FPanel {
pnlMenu.add(btnQuest, constraints);
pnlMenu.add(btnSettings, constraints);
pnlMenu.add(btnUtilities, constraints);
pnlMenu.add(btnEditor, constraints);
pnlMenu.add(btnExit, constraints);
control = new ControlHomeUI(this);
@@ -251,6 +246,16 @@ public class HomeTopLevel extends FPanel {
return draft.getController();
}
/** @return ControlSealed */
public ControlSealed getSealedController() {
return sealed.getController();
}
/** @return ControlUtilities */
public ControlUtilities getUtilitiesController() {
return utilities.getController();
}
private void clearToggles() {
btnConstructed.setToggled(false);
btnSealed.setToggled(false);

View File

@@ -20,10 +20,11 @@ import net.miginfocom.swing.MigLayout;
import forge.AllZone;
import forge.control.home.ControlConstructed;
import forge.deck.Deck;
import forge.game.GameType;
import forge.view.toolbox.FSkin;
/**
* Populates Swing components of Constructed mode in home screen.
* Assembles swing components for "Constructed" mode menu.
*
*/
@SuppressWarnings("serial")
@@ -40,7 +41,7 @@ public class ViewConstructed extends JPanel {
private ControlConstructed control;
/**
* Populates Swing components of "constructed" mode in home screen.
* Assembles swing components for "Constructed" mode menu.
*
* @param v0 &emsp; HomeTopLevel parent view
*/
@@ -80,7 +81,7 @@ public class ViewConstructed extends JPanel {
public void actionPerformed(ActionEvent arg0) {
String s = lstDecksHuman.getSelectedValue().toString();
Deck d = AllZone.getDeckManager().getDeck(s);
parentView.getController().showDeckEditor(d);
parentView.getUtilitiesController().showDeckEditor(GameType.Constructed, d);
}
});
@@ -109,7 +110,7 @@ public class ViewConstructed extends JPanel {
public void actionPerformed(ActionEvent arg0) {
String s = lstDecksAI.getSelectedValue().toString();
Deck d = AllZone.getDeckManager().getDeck(s);
parentView.getController().showDeckEditor(d);
parentView.getUtilitiesController().showDeckEditor(GameType.Constructed, d);
}
});
btnAIDeckList.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13));

View File

@@ -2,6 +2,8 @@ package forge.view.home;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
@@ -12,25 +14,29 @@ import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import forge.AllZone;
import forge.control.home.ControlSealed;
import forge.view.toolbox.FSkin;
/**
* TODO: Write javadoc for this type.
* Assembles swing components for "Sealed" mode menu.
*
*/
@SuppressWarnings("serial")
public class ViewSealed extends JPanel {
private FSkin skin;
private HomeTopLevel parentView;
private ControlSealed control;
private JList lstHumanDecks, lstAIDecks;
/**
* TODO: Write javadoc for Constructor.
* Assembles swing components for "Sealed" mode menu.
*
* @param v0 &emsp; HomeTopLevel parent view
*/
public ViewSealed(HomeTopLevel v0) {
super();
this.setOpaque(false);
this.setLayout(new MigLayout("insets 0, gap 0"));
this.setLayout(new MigLayout("insets 0, gap 0, wrap 2"));
parentView = v0;
skin = AllZone.getSkin();
@@ -38,26 +44,28 @@ public class ViewSealed extends JPanel {
lblTitle.setFont(skin.getFont1().deriveFont(Font.BOLD, 16));
lblTitle.setForeground(skin.getColor("text"));
lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
this.add(lblTitle, "w 100%!, gap 0 0 2% 2%, span 3 1, wrap");
this.add(lblTitle, "w 100%!, gap 0 0 2% 2%, span 2 1");
String[] human = {"one", "two", "three"};
String[] ai = {"four", "five:", "siz"};
JList humanDecks = new JList(human);
JList aiDecks = new JList(ai);
lstHumanDecks = new JList();
lstAIDecks = new JList();
//
this.add(new JScrollPane(humanDecks), "w 30%!, gapleft 15%, gapright 5%, h 30%!");
this.add(new JScrollPane(aiDecks), "w 30%!, h 30%!, wrap");
this.add(new JScrollPane(lstHumanDecks), "w 40%!, h 30%!, gap 7.5% 5% 2% 2%");
this.add(new JScrollPane(lstAIDecks), "w 40%!, h 37%!, gap 0 0 2% 0, span 1 2, wrap");
SubButton buildHuman = new SubButton("Build New Human Deck");
this.add(buildHuman, "w 30%!, h 5%!, gapleft 15%, gapright 15%, gaptop 1%");
SubButton buildAI = new SubButton("Build New AI Deck");
this.add(buildAI, "w 30%!, h 5%!, gaptop 1%, wrap");
buildHuman.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) { control.setupSealed(); }
});
this.add(buildHuman, "w 40%!, h 5%!, gap 7.5% 5% 0 0, wrap");
// Start button
JButton btnStart = new JButton();
btnStart.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) { control.start(); }
});
btnStart.setRolloverEnabled(true);
btnStart.setPressedIcon(parentView.getStartButtonDown());
btnStart.setRolloverIcon(parentView.getStartButtonOver());
@@ -74,10 +82,30 @@ public class ViewSealed extends JPanel {
pnlButtonContainer.setLayout(new BorderLayout());
pnlButtonContainer.add(btnStart, SwingConstants.CENTER);
control = new ControlSealed(this);
control.updateDeckLists();
lstHumanDecks.setSelectedIndex(0);
lstAIDecks.setSelectedIndex(0);
}
/** @return HomeTopLevel */
public HomeTopLevel getParentView() {
return parentView;
}
/** @return JList */
public JList getLstHumanDecks() {
return lstHumanDecks;
}
/** @return JList */
public JList getLstAIDecks() {
return lstAIDecks;
}
/** @return ControlSealed */
public ControlSealed getController() {
return control;
}
}

View File

@@ -1,40 +1,48 @@
package forge.view.home;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder;
import java.awt.Font;
import forge.AllZone;
import forge.control.home.ControlUtilities;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import forge.AllZone;
import forge.control.home.ControlUtilities;
import forge.view.toolbox.FSkin;
/**
* TODO: Write javadoc for this type.
* Assembles swing components for "Utilities" mode menu.
*
*/
@SuppressWarnings("serial")
public class ViewUtilities extends JPanel {
private HomeTopLevel parentView;
private ControlUtilities control;
private SubButton btnDownloadSetPics, btnDownloadPics, btnDownloadQuestImages, btnReportBug;
private SubButton btnImportPictures, btnHowToPlay, btnDownloadPrices;
private FSkin skin;
private JTextArea tarLicensing;
private SubButton btnDownloadSetPics, btnDownloadPics, btnDownloadQuestImages,
btnReportBug, btnImportPictures, btnHowToPlay, btnDownloadPrices,
btnDeckEditor;
/**
*
* TODO: Write javadoc for Constructor.
* Assembles swing components for "Utilities" mode menu.
* @param v0 &emsp; HomeTopLevel
*/
public ViewUtilities(HomeTopLevel v0) {
super();
this.setOpaque(false);
this.setLayout(new MigLayout("insets 0, gap 0, wrap, ay center"));
parentView = v0;
skin = AllZone.getSkin();
btnDownloadPics = new SubButton("Download LQ Card Pictures");
this.add(btnDownloadPics, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%, gaptop 5%");
btnDownloadSetPics = new SubButton("Download LQ Set Pictures");
this.add(btnDownloadSetPics, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
btnDownloadQuestImages = new SubButton("Download Quest Images");
this.add(btnDownloadQuestImages, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
@@ -47,67 +55,93 @@ public class ViewUtilities extends JPanel {
btnReportBug = new SubButton("Report a Bug");
this.add(btnReportBug, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
btnDeckEditor = new SubButton("Deck Editor");
this.add(btnDeckEditor, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
btnHowToPlay = new SubButton("How To Play");
this.add(btnHowToPlay, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
/*
* slapshot5 - I think this is useless here. If it serves a purpose, just uncomment,
* and hook it up in ControlUtilities.
*
* doublestrike - too right
*/
// TODO make this a dock shortcut
/*
SubButton btnStackReport = new SubButton("Stack Report");
this.add(btnStackReport, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
*/
btnHowToPlay = new SubButton("How To Play");
this.add(btnHowToPlay, "h 30px!, w 50%!, gapleft 25%, gapbottom 2%");
tarLicensing = new JTextArea();
tarLicensing.setOpaque(false);
tarLicensing.setForeground(skin.getColor("text"));
tarLicensing.setFont(skin.getFont1().deriveFont(Font.PLAIN, 15));
tarLicensing.setAlignmentX(SwingConstants.CENTER);
tarLicensing.setLineWrap(true);
tarLicensing.setWrapStyleWord(true);
tarLicensing.setFocusable(false);
tarLicensing.setEditable(false);
tarLicensing.setBorder(null);
tarLicensing.setText("Click here for license information.");
this.add(tarLicensing, "w 80%!, gapleft 10%, ax center");
JLabel lblAbout = new JLabel("About Forge here: Licensing, etc.");
lblAbout.setBorder(new MatteBorder(1, 0, 0, 0, AllZone.getSkin().getColor("borders")));
this.add(lblAbout, "w 80%, gapleft 10%, gaptop 5%");
ViewUtilities.this.control = new ControlUtilities(this);
}
/** @return SubButton */
public SubButton getBtnDownloadPics() {
return btnDownloadPics;
}
/** @return SubButton */
public SubButton getBtnDownloadSetPics() {
return btnDownloadSetPics;
}
/** @return SubButton */
public SubButton getBtnDownloadQuestImages() {
return btnDownloadQuestImages;
}
/** @return SubButton */
public SubButton getBtnReportBug() {
return btnReportBug;
}
/** @return SubButton */
public SubButton getBtnImportPictures() {
return btnImportPictures;
}
/** @return SubButton */
public SubButton getBtnHowToPlay() {
return btnHowToPlay;
}
/** @return SubButton */
public SubButton getBtnDownloadPrices() {
return btnDownloadPrices;
}
/**
*
* TODO: Write javadoc for this method.
* @return the ControlUtilities
*/
/** @return SubButton */
public SubButton getBtnDeckEditor() {
return btnDeckEditor;
}
/** @return JTextArea */
public JTextArea getTarLicensing() {
return tarLicensing;
}
/** @return ControlUtilities */
public ControlUtilities getController() {
return ViewUtilities.this.control;
}
/** @return HomeTopLevel */
public HomeTopLevel getParentView() {
return parentView;
}
} //end class ViewUtilities