From 22859cec6c11d565dfa13ae4ba3ca11bdb9cb3c8 Mon Sep 17 00:00:00 2001 From: myk Date: Wed, 6 Feb 2013 19:59:37 +0000 Subject: [PATCH] - allow spacebar to move cards in DualListBox and enter to select the OK button - make color of listbox selection depend on listbox focus, not cell focus - avoid NPE when attempting to start a challenge when there isn't one to start --- src/main/java/forge/gui/DualListBox.java | 87 +++++++++++++------ .../gui/home/quest/SSubmenuQuestUtil.java | 3 +- src/main/java/forge/gui/toolbox/FList.java | 2 +- 3 files changed, 62 insertions(+), 30 deletions(-) diff --git a/src/main/java/forge/gui/DualListBox.java b/src/main/java/forge/gui/DualListBox.java index 8de4619735d..37654218d70 100644 --- a/src/main/java/forge/gui/DualListBox.java +++ b/src/main/java/forge/gui/DualListBox.java @@ -6,6 +6,8 @@ import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.util.Arrays; import java.util.List; @@ -265,14 +267,69 @@ public class DualListBox extends FPanel { setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); sourceListModel = new UnsortedListModel(); sourceList = new FList(sourceListModel); + destListModel = new UnsortedListModel(); + destList = new FList(destListModel); + final Runnable onAdd = new Runnable() { + @Override + public void run() { + @SuppressWarnings("unchecked") + List selected = (List) Arrays.asList(sourceList.getSelectedValues()); + addDestinationElements(selected); + clearSourceSelected(); + sourceList.validate(); + setButtonState(); + } + }; + + final Runnable onRemove = new Runnable() { + @Override + public void run() { + @SuppressWarnings("unchecked") + List selected = (List) Arrays.asList(destList.getSelectedValues()); + clearDestinationSelected(); + addSourceElements(selected); + setButtonState(); + } + }; + + ActionListener addListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + onAdd.run(); + } + }; + + ActionListener removeListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + onRemove.run(); + } + }; + + sourceList.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(final KeyEvent e) { + if (e.getKeyChar() == ' ') { onAdd.run(); } + else if (e.getKeyCode() == 10) { okButton.doClick(); } + } + }); + + destList.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(final KeyEvent e) { + if (e.getKeyChar() == ' ') { onRemove.run(); } + else if (e.getKeyCode() == 10) { okButton.doClick(); } + } + }); + // Dual List control buttons addButton = new FButton(">"); - addButton.addActionListener(new AddListener()); + addButton.addActionListener(addListener); addAllButton = new FButton(">>"); addAllButton.addActionListener(new AddAllListener()); removeButton = new FButton("<"); - removeButton.addActionListener(new RemoveListener()); + removeButton.addActionListener(removeListener); removeAllButton = new FButton("<<"); removeAllButton.addActionListener(new RemoveAllListener()); @@ -283,9 +340,6 @@ public class DualListBox extends FPanel { autoButton = new FButton("Auto"); autoButton.addActionListener(new AutoListener()); - destListModel = new UnsortedListModel(); - destList = new FList(destListModel); - FPanel leftPanel = new FPanel(new BorderLayout()); selectOrder = new FLabel.Builder().build(); selectOrder.setText("Select Order:"); @@ -318,18 +372,6 @@ public class DualListBox extends FPanel { addCardViewListener(destList); } - private class AddListener implements ActionListener { - @Override - public void actionPerformed(ActionEvent e) { - @SuppressWarnings("unchecked") - List selected = (List) Arrays.asList(sourceList.getSelectedValues()); - addDestinationElements(selected); - clearSourceSelected(); - sourceList.validate(); - setButtonState(); - } - } - private void addAll() { addDestinationElements(sourceListModel); clearSourceListModel(); @@ -344,17 +386,6 @@ public class DualListBox extends FPanel { } } - private class RemoveListener implements ActionListener { - @Override - public void actionPerformed(ActionEvent e) { - @SuppressWarnings("unchecked") - List selected = (List) Arrays.asList(destList.getSelectedValues()); - clearDestinationSelected(); - addSourceElements(selected); - setButtonState(); - } - } - private class RemoveAllListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index ec63338ec22..5d9201a9cb0 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -350,7 +350,7 @@ public class SSubmenuQuestUtil { /** */ public static void startGame() { - if (!checkActiveQuest("Start a duel.")) { + if (!checkActiveQuest("Start a duel.") || null == event) { return; } final QuestController qData = Singletons.getModel().getQuest(); @@ -362,6 +362,7 @@ public class SSubmenuQuestUtil { System.out.println(msg); return; } + String errorMessage = GameType.Quest.getDecksFormat().getDeckConformanceProblem(deck); if (null != errorMessage) { JOptionPane.showMessageDialog(null, "Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid deck", JOptionPane.ERROR_MESSAGE); diff --git a/src/main/java/forge/gui/toolbox/FList.java b/src/main/java/forge/gui/toolbox/FList.java index 53857924233..ab137b811a9 100644 --- a/src/main/java/forge/gui/toolbox/FList.java +++ b/src/main/java/forge/gui/toolbox/FList.java @@ -70,7 +70,7 @@ public class FList extends JList { lst0, val0, i0, isSelected, cellHasFocus); lblItem.setBorder(new EmptyBorder(4, 3, 4, 3)); - lblItem.setBackground(FSkin.getColor(cellHasFocus ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE)); + lblItem.setBackground(FSkin.getColor(hasFocus() ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE)); lblItem.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); lblItem.setFont(FSkin.getFont(13)); lblItem.setOpaque(isSelected);