diff --git a/src/main/java/forge/control/home/ControlConstructed.java b/src/main/java/forge/control/home/ControlConstructed.java index e0c33b40215..98cf64289de 100644 --- a/src/main/java/forge/control/home/ControlConstructed.java +++ b/src/main/java/forge/control/home/ControlConstructed.java @@ -2,15 +2,17 @@ package forge.control.home; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.Map.Entry; +import java.util.Random; import javax.swing.JList; import javax.swing.JOptionPane; @@ -19,6 +21,7 @@ import javax.swing.event.ListSelectionListener; import forge.AllZone; import forge.CardList; +import forge.Command; import forge.Constant; import forge.PlayerType; import forge.deck.Deck; @@ -55,9 +58,7 @@ public class ControlConstructed { this.view = v0; // Reference values for colors, needed for deck generation classes. - // TODO enum me or get from another enum colorVals = new HashMap(); - colorVals.put("Random", "AI"); colorVals.put("Random 1", "AI"); colorVals.put("Random 2", "AI"); colorVals.put("Random 3", "AI"); @@ -77,16 +78,28 @@ public class ControlConstructed { /** */ public void addListeners() { view.getLstColorsAI().getSelectionModel().addListSelectionListener(new AIColorsListener()); - view.getLstColorsAI().setSelectedIndices(new int[] {0, 1}); view.getLstThemesAI().getSelectionModel().addListSelectionListener(new AIThemesListener()); view.getLstDecksAI().getSelectionModel().addListSelectionListener(new AIDecksListener()); view.getLstColorsHuman().getSelectionModel().addListSelectionListener(new HumanColorsListener()); view.getLstThemesHuman().getSelectionModel().addListSelectionListener(new HumanThemesListener()); view.getLstDecksHuman().getSelectionModel().addListSelectionListener(new HumanDecksListener()); + + MouseListener mouseListener = new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) { + int index = view.getLstDecksHuman().locationToIndex(e.getPoint()); + showDecklist(AllZone.getDeckManager().getDeck(deckNames.get(index))); + } + } + }; + + view.getLstDecksHuman().addMouseListener(mouseListener); + view.getLstDecksAI().addMouseListener(mouseListener); view.getLstColorsHuman().setSelectedIndices(new int[] {0, 1}); + view.getLstColorsAI().setSelectedIndices(new int[] {0, 1}); } - //========== LISTENERS + //========== LISTENERS /** Listeners for human lists, which pass control directly to regulation logic. */ public class HumanColorsListener implements ListSelectionListener { @@ -137,7 +150,6 @@ public class ControlConstructed { "Sorry, single color generated decks aren't supported yet." + "\n\rPlease choose at least one more color for the human deck.", "Human deck: 1 color", JOptionPane.ERROR_MESSAGE); - view.remind(currentHumanSelection); result = false; } else if (human0.length == 4) { @@ -145,14 +157,12 @@ public class ControlConstructed { "Sorry, four color generated decks aren't supported yet." + "\n\rPlease use 2, 3, or 5 colors for the human deck.", "Human deck: 4 colors", JOptionPane.ERROR_MESSAGE); - view.remind(currentHumanSelection); result = false; } else if (human0.length > 5) { JOptionPane.showMessageDialog(null, "Human deck: maximum five colors!", "Human deck: too many colors", JOptionPane.ERROR_MESSAGE); - view.remind(currentHumanSelection); result = false; } @@ -174,7 +184,6 @@ public class ControlConstructed { "Sorry, single color generated decks aren't supported yet." + "\n\rPlease choose at least one more color for the AI deck.", "AI deck: 1 color", JOptionPane.ERROR_MESSAGE); - view.remind(currentAISelection); result = false; } else if (ai0.length == 4) { @@ -182,24 +191,41 @@ public class ControlConstructed { "Sorry, four color generated decks aren't supported yet." + "\n\rPlease use 2, 3, or 5 colors for the AI deck.", "AI deck: 4 colors", JOptionPane.ERROR_MESSAGE); - view.remind(currentAISelection); result = false; } else if (ai0.length > 5) { JOptionPane.showMessageDialog(null, "AI deck: maximum five colors!", "AI deck: Too many colors", JOptionPane.ERROR_MESSAGE); - view.remind(currentAISelection); result = false; } return result; } + /** + * Random chooser for theme decks. + * + * @param lst0 {@link javax.swing.JList} + */ + public void randomPick(JList lst0) { + Random r = new Random(); + int i = 0; + if (lst0.getName().equals("lstThemesHuman") || lst0.getName().equals("lstThemesAI")) { + i = r.nextInt(themeNames.size()); + } + else { + i = r.nextInt(deckNames.size()); + } + + lst0.setSelectedIndex(i); + lst0.ensureIndexIsVisible(lst0.getSelectedIndex()); + } + /** * Regulates that only one of the three deck type JLists is in use at a time. * - * @param lst0   a JList that has been clicked + * @param lst0 {@link javax.swing.JList} that has been clicked */ public void regulateHuman(JList lst0) { if (currentHumanSelection != null && lst0 != currentHumanSelection) { @@ -208,16 +234,6 @@ public class ControlConstructed { currentHumanSelection = lst0; - // Random chooser for theme decks - if (lst0.getName() != null && lst0.getName().equals("lstThemesHuman") - && lst0.getSelectedIndex() == 0) { - Random r = new Random(); - - int i = 0; - while (i == 0) { i = r.nextInt(themeNames.size()); } - lst0.setSelectedIndex(i); - } - // Random chooser for pre-constructed decks if (lst0.getName() != null && lst0.getName().equals("lstDecksHuman") && lst0.getSelectedIndex() == 0) { @@ -227,14 +243,6 @@ public class ControlConstructed { while (i == 0) { i = r.nextInt(deckNames.size()); } lst0.setSelectedIndex(i); } - - // Toggle "view" button accordingly - if (lst0.getName() != null && lst0.getName().equals("lstDecksHuman")) { - view.getBtnHumanDeckList().setEnabled(true); - } - else { - view.getBtnHumanDeckList().setEnabled(false); - } } /** @@ -268,14 +276,6 @@ public class ControlConstructed { while (i == 0) { i = r.nextInt(deckNames.size()); } lst0.setSelectedIndex(i); } - - // Toggle "view" button accordingly - if (lst0.getName() != null && lst0.getName().equals("lstDecksAI")) { - view.getBtnAIDeckList().setEnabled(true); - } - else { - view.getBtnAIDeckList().setEnabled(false); - } } //========= DECK GENERATION @@ -432,9 +432,9 @@ public class ControlConstructed { * @return Object[] */ // Four randoms are included which should cover all possibilities. - public Object[] getColorNames() { - return new Object[] {"Random", "Random", "Random", - "Random", "Black", "Blue", "Green", "Red", "White"}; + public String[] getColorNames() { + return new String[] {"Random 1", "Random 2", "Random 3", + "Random 4", "Black", "Blue", "Green", "Red", "White"}; } /** @@ -460,9 +460,7 @@ public class ControlConstructed { deckNames.add(0, "Random"); Collection allDecks = AllZone.getDeckManager().getConstructedDecks(); - for (Deck d : allDecks) { - deckNames.add(d.getName()); - } + for (Deck d : allDecks) { deckNames.add(d.getName()); } // No pre-constructed decks? if (deckNames.size() == 1) { deckNames = new ArrayList(); } @@ -472,91 +470,67 @@ public class ControlConstructed { } /** - * View deck list. * - * @param player   String + * */ - public void viewDeckList(final String player) { - new DeckListAction(player).actionPerformed(null); - } + private void showDecklist(Deck d0) { + HashMap deckMap = new HashMap(); + + for (Entry s : d0.getMain()) { + deckMap.put(s.getKey().getName(), s.getValue()); + } + + String nl = System.getProperty("line.separator"); + StringBuilder deckList = new StringBuilder(); + String dName = d0.getName(); + + deckList.append(dName == null ? "" : dName + nl + nl); + + ArrayList dmKeys = new ArrayList(); + for (final String s : deckMap.keySet()) { + dmKeys.add(s); + } + + Collections.sort(dmKeys); + + for (String s : dmKeys) { + deckList.append(deckMap.get(s) + " x " + s + nl); + } + + final StringBuilder msg = new StringBuilder(); + if (deckMap.keySet().size() <= 32) { + msg.append(deckList.toString() + nl); + } else { + msg.append("Decklist too long for dialog." + nl + nl); + } + + msg.append("Copy Decklist to Clipboard?"); + + // Output + int rcMsg = JOptionPane.showConfirmDialog(null, msg, "Decklist", JOptionPane.OK_CANCEL_OPTION); + if (rcMsg == JOptionPane.OK_OPTION) { + final StringSelection ss = new StringSelection(deckList.toString()); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); + } + } // End showDecklist /** - * Receives click and programmatic requests for viewing card in a player's deck. + * What to do after exiting the deck editor in the deck lister. * + * @return Command */ - private class DeckListAction { - public DeckListAction(final String playerIn) { - player = playerIn; - } + public Command getEditorExitCommand() { + Command exit = new Command() { + private static final long serialVersionUID = -9133358399503226853L; - private String player; + @Override + public void execute() { - public void actionPerformed(final ActionEvent e) { - if (player.equals("Human") - && (currentHumanSelection.getName().equals("lstColorsHuman") - || currentHumanSelection.getName().equals("lstThemesHuman"))) { - return; - } - if (player.equals("Computer") - && (currentAISelection.getName().equals("lstColorsAI") - || currentAISelection.getName().equals("lstThemesAI"))) { - return; } + }; - Deck targetDeck = (player.equals("Human")) - ? AllZone.getDeckManager().getDeck(oa2sa(currentHumanSelection.getSelectedValues())[0]) - : AllZone.getDeckManager().getDeck(oa2sa(currentAISelection.getSelectedValues())[0]); - - final HashMap deckMap = new HashMap(); - - for (final Entry s : targetDeck.getMain()) { - deckMap.put(s.getKey().getName(), s.getValue()); - } - - final String nl = System.getProperty("line.separator"); - final StringBuilder deckList = new StringBuilder(); - String dName = targetDeck.getName(); - - if (dName == null) { - dName = ""; - } else { - deckList.append(dName + nl); - } - - final ArrayList dmKeys = new ArrayList(); - for (final String s : deckMap.keySet()) { - dmKeys.add(s); - } - - Collections.sort(dmKeys); - - for (final String s : dmKeys) { - deckList.append(deckMap.get(s) + " x " + s + nl); - } - - int rcMsg = -1138; - String ttl = player + "'s Decklist"; - if (!dName.equals("")) { - ttl += " - " + dName; - } - - final StringBuilder msg = new StringBuilder(); - if (deckMap.keySet().size() <= 32) { - msg.append(deckList.toString() + nl); - } else { - msg.append("Decklist too long for dialog." + nl + nl); - } - - msg.append("Copy Decklist to Clipboard?"); - - rcMsg = JOptionPane.showConfirmDialog(null, msg, ttl, JOptionPane.OK_CANCEL_OPTION); - - if (rcMsg == JOptionPane.OK_OPTION) { - final StringSelection ss = new StringSelection(deckList.toString()); - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); - } - } - } // End DeckListAction + return exit; + } /** * Exhaustively converts object array to string array. diff --git a/src/main/java/forge/view/home/SubButton.java b/src/main/java/forge/view/home/SubButton.java index 6a37d2d51a7..446ecafc102 100644 --- a/src/main/java/forge/view/home/SubButton.java +++ b/src/main/java/forge/view/home/SubButton.java @@ -1,10 +1,14 @@ package forge.view.home; import java.awt.Color; +import java.awt.Font; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; +import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import forge.AllZone; @@ -34,6 +38,8 @@ public class SubButton extends JButton { setBorder(new LineBorder(skin.getColor("borders"), 1)); setBackground(skin.getColor("inactive")); setForeground(skin.getColor("text")); + setVerticalTextPosition(SwingConstants.CENTER); + setFocusPainted(false); this.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) { @@ -44,6 +50,16 @@ public class SubButton extends JButton { if (isEnabled()) { setBackground(skin.getColor("inactive")); } } }); + + this.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + int px = (int) (SubButton.this.getHeight() / 2.5); + px = (px < 10 ? 10 : px); + px = (px > 15 ? 15 : px); + SubButton.this.setFont(AllZone.getSkin().getFont1().deriveFont(Font.PLAIN, px)); + } + }); } @Override diff --git a/src/main/java/forge/view/home/ViewConstructed.java b/src/main/java/forge/view/home/ViewConstructed.java index fb23e7e7142..7d3900e00d3 100644 --- a/src/main/java/forge/view/home/ViewConstructed.java +++ b/src/main/java/forge/view/home/ViewConstructed.java @@ -1,10 +1,8 @@ package forge.view.home; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import javax.swing.AbstractAction; import javax.swing.DefaultListSelectionModel; @@ -12,15 +10,13 @@ import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; -import javax.swing.JScrollPane; import javax.swing.SwingConstants; -import javax.swing.Timer; 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.FList; +import forge.view.toolbox.FScrollPane; import forge.view.toolbox.FSkin; /** @@ -29,24 +25,20 @@ import forge.view.toolbox.FSkin; */ @SuppressWarnings("serial") public class ViewConstructed extends JPanel { - private String constraints; private FSkin skin; private HomeTopLevel parentView; - - private Timer timer1 = null; - private int counter; - private JList lstColorsHuman, lstColorsAI, lstThemesHuman, - lstThemesAI, lstDecksHuman, lstDecksAI; - private SubButton btnHumanDeckList, btnAIDeckList; + private JList lstDecksAI; + private SubButton btnHumanRandomTheme, btnHumanRandomDeck, btnAIRandomTheme, btnAIRandomDeck; private ControlConstructed control; + private FList lstColorsHuman, lstThemesHuman, lstDecksHuman, lstColorsAI, lstThemesAI; /** * Assembles swing components for "Constructed" mode menu. * - * @param v0   HomeTopLevel parent view + * @param v0 {@link forge.view.home.HomeTopLevel} parent view */ public ViewConstructed(HomeTopLevel v0) { - // Basic init stuff + //========== Basic init stuff super(); this.setOpaque(false); this.setLayout(new MigLayout("insets 0, gap 0")); @@ -54,106 +46,17 @@ public class ViewConstructed extends JPanel { skin = AllZone.getSkin(); control = new ControlConstructed(this); - lstColorsHuman = new JList(); - lstColorsHuman.setListData(control.oa2sa(control.getColorNames())); + populateHuman(); - lstColorsAI = new JList(); - lstColorsAI.setListData(control.oa2sa(control.getColorNames())); - - lstDecksHuman = new JList(); - lstDecksAI = new JList(); - - lstThemesHuman = new JList(); - lstThemesHuman.setListData(control.oa2sa(control.getThemeNames())); - - lstThemesAI = new JList(); - lstThemesAI.setListData(control.oa2sa(control.getThemeNames())); - - // Human deck options area - JLabel lblHuman = new JLabel("Choose a deck for the human player:"); - lblHuman.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); - lblHuman.setForeground(skin.getColor("text")); - this.add(lblHuman, "w 90%!, h 5%!, gap 5% 5% 2% 0, wrap, span 5 1"); - - // Human deck list button - btnHumanDeckList = new SubButton(); - btnHumanDeckList.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { - String s = lstDecksHuman.getSelectedValue().toString(); - Deck d = AllZone.getDeckManager().getDeck(s); - parentView.getUtilitiesController().showDeckEditor(GameType.Constructed, d); - } - }); - - btnHumanDeckList.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13)); - btnHumanDeckList.setText("Edit selected deck"); - btnHumanDeckList.setVerticalTextPosition(SwingConstants.CENTER); - - // Add components - constraints = "w 28%!, h 30%!, span 1 2"; - this.add(new JScrollPane(lstColorsHuman), constraints + ", gapleft 3%"); - this.add(new OrPanel(), "w 5%!, h 30%!, span 1 2"); - this.add(new JScrollPane(lstThemesHuman), constraints); - this.add(new OrPanel(), "w 5%!, h 30%!, span 1 2"); - this.add(new JScrollPane(lstDecksHuman), "w 28%!, h 25%!, gapbottom 1%, wrap"); - this.add(btnHumanDeckList, "w 28%!, h 4%!, wrap"); - - // AI deck options area - JLabel lblAI = new JLabel("Choose a deck for the AI player:"); - lblAI.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); - lblAI.setForeground(skin.getColor("text")); - this.add(lblAI, "w 90%!, h 5%!, gap 5% 5% 2% 0, wrap, span 5 1"); - - // AI deck list button - btnAIDeckList = new SubButton(); - btnAIDeckList.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { - String s = lstDecksAI.getSelectedValue().toString(); - Deck d = AllZone.getDeckManager().getDeck(s); - parentView.getUtilitiesController().showDeckEditor(GameType.Constructed, d); - } - }); - btnAIDeckList.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13)); - btnAIDeckList.setText("Edit selected deck"); - - // Add components - this.add(new JScrollPane(lstColorsAI), constraints + ", gapleft 3%"); - this.add(new OrPanel(), "w 5%!, h 30%!, span 1 2"); - this.add(new JScrollPane(lstThemesAI), constraints); - this.add(new OrPanel(), "w 5%!, h 30%!, span 1 2"); - this.add(new JScrollPane(lstDecksAI), "w 28%!, h 25%!, gapbottom 1%, wrap"); - this.add(btnAIDeckList, "w 28%!, h 4%!, wrap"); - - // List box properties - this.lstColorsHuman.setName("lstColorsHuman"); - this.lstThemesHuman.setName("lstThemesHuman"); - this.lstDecksHuman.setName("lstDecksHuman"); - - this.lstColorsAI.setName("lstColorsAI"); - this.lstThemesAI.setName("lstThemesAI"); - this.lstDecksAI.setName("lstDecksAI"); - - this.lstThemesHuman.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); - this.lstDecksHuman.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); - - this.lstThemesAI.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); - this.lstDecksAI.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); + populateAI(); // Start button - JButton btnStart = new JButton(); + StartButton btnStart = new StartButton(parentView); + btnStart.setAction(new AbstractAction() { @Override public void actionPerformed(ActionEvent arg0) { control.start(); } }); - btnStart.setRolloverEnabled(true); - btnStart.setPressedIcon(parentView.getStartButtonDown()); - btnStart.setRolloverIcon(parentView.getStartButtonOver()); - btnStart.setIcon(parentView.getStartButtonUp()); - btnStart.setOpaque(false); - btnStart.setContentAreaFilled(false); - btnStart.setBorder(null); - btnStart.setBorderPainted(false); - btnStart.setBounds(10, 476, 205, 84); JPanel pnlButtonContainer = new JPanel(); pnlButtonContainer.setOpaque(false); @@ -182,87 +85,210 @@ public class ViewConstructed extends JPanel { } } - /** @return HomeTopLevel */ + /** Assembles Swing components in human area. */ + private void populateHuman() { + lstColorsHuman = new FList(); + lstColorsHuman.setListData(control.getColorNames()); + lstColorsHuman.setName("lstColorsHuman"); + + lstThemesHuman = new FList(); + lstThemesHuman.setListData(control.oa2sa(control.getThemeNames())); + lstThemesHuman.setName("lstThemesHuman"); + lstThemesHuman.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); + + lstDecksHuman = new FList(); + lstDecksHuman.setName("lstDecksHuman"); + lstDecksHuman.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); + + JLabel lblHuman = new JLabel("Choose your deck:"); + lblHuman.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); + lblHuman.setForeground(skin.getColor("text")); + lblHuman.setHorizontalAlignment(SwingConstants.CENTER); + + JLabel lblColorInfo = new JLabel("Multiple Colors: CTRL"); + lblColorInfo.setFont(skin.getFont1().deriveFont(Font.ITALIC, 12)); + lblColorInfo.setForeground(skin.getColor("text")); + lblColorInfo.setHorizontalAlignment(SwingConstants.CENTER); + + JLabel lblDecklistInfo = new JLabel("Decklist: Double Click"); + lblDecklistInfo.setFont(skin.getFont1().deriveFont(Font.ITALIC, 12)); + lblDecklistInfo.setForeground(skin.getColor("text")); + lblDecklistInfo.setHorizontalAlignment(SwingConstants.CENTER); + + // Random theme button + btnHumanRandomTheme = new SubButton(); + btnHumanRandomTheme.setAction(new AbstractAction() { + public void actionPerformed(ActionEvent arg0) { + control.randomPick(lstThemesHuman); + } + }); + btnHumanRandomTheme.setText("Random Theme Deck"); + + // Random deck button + btnHumanRandomDeck = new SubButton(); + btnHumanRandomDeck.setAction(new AbstractAction() { + public void actionPerformed(ActionEvent arg0) { + control.randomPick(lstDecksHuman); + } + }); + btnHumanRandomDeck.setText("Random Deck"); + + // Add components to human area + JPanel colorsContainer = new JPanel(); + colorsContainer.setOpaque(false); + colorsContainer.setLayout(new MigLayout("insets 0, gap 0")); + colorsContainer.add(lblColorInfo, "w 100%!, h 8%!, gapbottom 2%, wrap"); + colorsContainer.add(new FScrollPane(lstColorsHuman), "w 100%!, h 89%!, wrap"); + + JPanel themeContainer = new JPanel(); + themeContainer.setOpaque(false); + themeContainer.setLayout(new MigLayout("insets 0, gap 0")); + themeContainer.add(new FScrollPane(lstThemesHuman), "w 100%!, h 75%!, gaptop 10%, wrap"); + themeContainer.add(btnHumanRandomTheme, "w 100%!, h 12%!, gaptop 2.5%"); + + JPanel decksContainer = new JPanel(); + decksContainer.setOpaque(false); + decksContainer.setLayout(new MigLayout("insets 0, gap 0")); + decksContainer.add(lblDecklistInfo, "w 100%!, h 8%!, gapbottom 2%, wrap"); + decksContainer.add(new FScrollPane(lstDecksHuman), "w 100%!, h 75%!, wrap"); + decksContainer.add(btnHumanRandomDeck, "w 100%!, h 12%!, gaptop 2.5%"); + + String listConstraints = "w 28%!, h 40%!"; + String orConstraints = "w 5%!, h 30%!"; + this.add(lblHuman, "w 94%!, h 5%!, gap 3% 0 2% 0, wrap, span 5 1"); + this.add(colorsContainer, listConstraints + ", gapleft 3%"); + this.add(new OrPanel(), orConstraints); + this.add(themeContainer, listConstraints); + this.add(new OrPanel(), orConstraints); + this.add(decksContainer, listConstraints); + } + + /** Assembles Swing components in AI area. */ + private void populateAI() { + lstColorsAI = new FList(); + lstColorsAI.setListData(control.getColorNames()); + lstColorsAI.setName("lstColorsAI"); + + lstThemesAI = new FList(); + lstThemesAI.setListData(control.oa2sa(control.getThemeNames())); + lstThemesAI.setName("lstThemesAI"); + lstThemesAI.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); + + lstDecksAI = new FList(); + lstDecksAI.setName("lstDecksAI"); + lstDecksAI.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); + + JLabel lblAI = new JLabel("Choose a deck for the computer:"); + lblAI.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); + lblAI.setForeground(skin.getColor("text")); + lblAI.setHorizontalAlignment(SwingConstants.CENTER); + + JLabel lblColorInfo = new JLabel("Multiple Colors: CTRL"); + lblColorInfo.setFont(skin.getFont1().deriveFont(Font.ITALIC, 12)); + lblColorInfo.setForeground(skin.getColor("text")); + lblColorInfo.setHorizontalAlignment(SwingConstants.CENTER); + + JLabel lblDecklistInfo = new JLabel("Decklist: Double Click"); + lblDecklistInfo.setFont(skin.getFont1().deriveFont(Font.ITALIC, 12)); + lblDecklistInfo.setForeground(skin.getColor("text")); + lblDecklistInfo.setHorizontalAlignment(SwingConstants.CENTER); + + // Random theme button + btnAIRandomTheme = new SubButton(); + btnAIRandomTheme.setAction(new AbstractAction() { + public void actionPerformed(ActionEvent arg0) { + control.randomPick(lstThemesAI); + } + }); + btnAIRandomTheme.setText("Random Theme Deck"); + + // Random deck button + btnAIRandomDeck = new SubButton(); + btnAIRandomDeck.setAction(new AbstractAction() { + public void actionPerformed(ActionEvent arg0) { + control.randomPick(lstDecksAI); + } + }); + btnAIRandomDeck.setText("Random Deck"); + + // Add components to AI area + JPanel colorsContainer = new JPanel(); + colorsContainer.setOpaque(false); + colorsContainer.setLayout(new MigLayout("insets 0, gap 0")); + colorsContainer.add(lblColorInfo, "w 100%!, h 8%!, gapbottom 2%, wrap"); + colorsContainer.add(new FScrollPane(lstColorsAI), "w 100%!, h 89%!, wrap"); + + JPanel themeContainer = new JPanel(); + themeContainer.setOpaque(false); + themeContainer.setLayout(new MigLayout("insets 0, gap 0")); + themeContainer.add(new FScrollPane(lstThemesAI), "w 100%!, h 75%!, gaptop 10%, wrap"); + themeContainer.add(btnAIRandomTheme, "w 100%!, h 12%!, gaptop 2.5%"); + + JPanel decksContainer = new JPanel(); + decksContainer.setOpaque(false); + decksContainer.setLayout(new MigLayout("insets 0, gap 0")); + decksContainer.add(lblDecklistInfo, "w 100%!, h 8%!, gapbottom 2%, wrap"); + decksContainer.add(new FScrollPane(lstDecksAI), "w 100%!, h 75%!, wrap"); + decksContainer.add(btnAIRandomDeck, "w 100%!, h 12%!, gaptop 2.5%"); + + String listConstraints = "w 28%!, h 40%!"; + String orConstraints = "w 5%!, h 30%!"; + this.add(lblAI, "w 94%!, h 5%!, gap 3% 0 5% 0, wrap, span 5 1, newline"); + this.add(colorsContainer, listConstraints + ", gapleft 3%"); + this.add(new OrPanel(), orConstraints); + this.add(themeContainer, listConstraints); + this.add(new OrPanel(), orConstraints); + this.add(decksContainer, listConstraints); + } + + //========= RETRIEVAL FUNCTIONS + /** @return {@link forge.view.home.HomeTopLevel} */ public HomeTopLevel getParentView() { return parentView; } - /** @return ControlConstructed */ + /** @return {@link forge.control.home.ControlConstructed} */ public ControlConstructed getController() { return control; } - /** - * Flashes a visual reminder in a list component. - * - * @param lst0   JList - */ - public void remind(JList lst0) { - if (timer1 != null) { return; } - - final JList target = lst0; - final int[] steps = {210, 215, 220, 220, 220, 215, 210}; - final Color oldBG = lst0.getBackground(); - counter = 0; - - ActionListener fader = new ActionListener() { - @Override - public void actionPerformed(final ActionEvent evt) { - counter++; - if (counter != (steps.length - 1)) { - setBackground(new Color(255, 0, 0, steps[counter])); - } - else { - target.setBackground(oldBG); - timer1.stop(); - timer1 = null; - } - } - }; - - timer1 = new Timer(100, fader); - timer1.start(); - } - - //========= RETRIEVAL FUNCTIONS - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstColorsHuman() { return lstColorsHuman; } - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstThemesHuman() { return lstThemesHuman; } - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstDecksHuman() { return lstDecksHuman; } - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstColorsAI() { return lstColorsAI; } - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstThemesAI() { return lstThemesAI; } - /** @return JList */ + /** @return {@link javax.swing.JList} */ public JList getLstDecksAI() { return lstDecksAI; } - /** @return JButton */ - public JButton getBtnHumanDeckList() { - return btnHumanDeckList; + /** @return {@link javax.swing.JButton} */ + public JButton getBtnHumanRandomTheme() { + return btnHumanRandomTheme; } - /** @return JButton */ - public JButton getBtnAIDeckList() { - return btnAIDeckList; + /** @return {@link javax.swing.JButton} */ + public JButton getBtn() { + return btnHumanRandomDeck; } - } diff --git a/src/main/java/forge/view/toolbox/FList.java b/src/main/java/forge/view/toolbox/FList.java index 7236d55d472..23c4ad4a0a6 100644 --- a/src/main/java/forge/view/toolbox/FList.java +++ b/src/main/java/forge/view/toolbox/FList.java @@ -2,8 +2,6 @@ package forge.view.toolbox; import java.awt.Component; import java.awt.Font; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import javax.swing.DefaultListCellRenderer; import javax.swing.JLabel; @@ -56,23 +54,8 @@ public class FList extends JList { lblItem.setBorder(new EmptyBorder(4, 3, 4, 3)); lblItem.setBackground(skin.getColor("active")); lblItem.setForeground(skin.getColor("text")); - lblItem.setFont(skin.getFont1().deriveFont(Font.BOLD, 13)); + lblItem.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13)); lblItem.setOpaque(isSelected); - - lblItem.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent e) { - System.out.println("firing asdf"); - setOpaque(true); - setBackground(skin.getColor("hover")); - } - @Override - public void mouseExited(MouseEvent e) { - setOpaque(false); - setBackground(null); - } - }); - return lblItem; } }