From 0f6fbfe728150cbbd6c2795d81ffb8eb937b0768 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 20 Sep 2011 23:05:42 +0000 Subject: [PATCH] DeckAnalysis moved to package with deckeditors, Default deckeditor has a button to invoke interactive deck import. --- .gitattributes | 3 +- src/main/java/forge/gui/GuiUtils.java | 4 +- .../deckeditor/DeckAnalysis.java} | 8 +- .../java/forge/gui/deckeditor/DeckEditor.java | 46 +++++---- .../forge/gui/deckeditor/DeckEditorBase.java | 3 +- .../java/forge/gui/deckeditor/DeckImport.java | 93 +++++++++++++++++++ 6 files changed, 133 insertions(+), 24 deletions(-) rename src/main/java/forge/{GUI_DeckAnalysis.java => gui/deckeditor/DeckAnalysis.java} (99%) create mode 100644 src/main/java/forge/gui/deckeditor/DeckImport.java diff --git a/.gitattributes b/.gitattributes index 25d904abbc8..4cd618a13ad 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9567,7 +9567,6 @@ src/main/java/forge/EndOfTurn.java svneol=native#text/plain src/main/java/forge/ExternalPanel.java svneol=native#text/plain src/main/java/forge/FileFinder.java svneol=native#text/plain src/main/java/forge/FileUtil.java svneol=native#text/plain -src/main/java/forge/GUI_DeckAnalysis.java svneol=native#text/plain src/main/java/forge/GUI_ImportPicture.java svneol=native#text/plain src/main/java/forge/GameAction.java svneol=native#text/plain src/main/java/forge/GameActionUtil.java svneol=native#text/plain @@ -9798,6 +9797,7 @@ src/main/java/forge/gui/MultiPhaseProgressMonitorWithETA.java svneol=native#text src/main/java/forge/gui/deckeditor/CardPanelBase.java -text src/main/java/forge/gui/deckeditor/CardPanelHeavy.java -text src/main/java/forge/gui/deckeditor/CardPanelLite.java -text +src/main/java/forge/gui/deckeditor/DeckAnalysis.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckDisplay.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckEditor.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckEditorBase.java -text @@ -9806,6 +9806,7 @@ src/main/java/forge/gui/deckeditor/DeckEditorMenu.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckEditorQuest.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java svneol=native#text/plain src/main/java/forge/gui/deckeditor/DeckEditorShop.java svneol=native#text/plain +src/main/java/forge/gui/deckeditor/DeckImport.java -text src/main/java/forge/gui/deckeditor/FilterCheckBoxes.java -text src/main/java/forge/gui/deckeditor/FilterNameTypeSetPanel.java -text src/main/java/forge/gui/deckeditor/GuiFilterCheckBox.java svneol=native#text/plain diff --git a/src/main/java/forge/gui/GuiUtils.java b/src/main/java/forge/gui/GuiUtils.java index bcd57d10269..f4abc159e84 100644 --- a/src/main/java/forge/gui/GuiUtils.java +++ b/src/main/java/forge/gui/GuiUtils.java @@ -17,9 +17,9 @@ import net.slightlymagic.braids.util.UtilFunctions; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; -import java.awt.Frame; import java.awt.Image; import java.awt.Rectangle; +import java.awt.Window; import java.awt.image.BufferedImage; import java.io.File; import java.util.Collection; @@ -267,7 +267,7 @@ public final class GuiUtils { * * @param frame a fully laid-out frame */ - public static void centerFrame(final Frame frame) { + public static void centerFrame(final Window frame) { Dimension screen = frame.getToolkit().getScreenSize(); Rectangle bounds = frame.getBounds(); bounds.width = frame.getWidth(); diff --git a/src/main/java/forge/GUI_DeckAnalysis.java b/src/main/java/forge/gui/deckeditor/DeckAnalysis.java similarity index 99% rename from src/main/java/forge/GUI_DeckAnalysis.java rename to src/main/java/forge/gui/deckeditor/DeckAnalysis.java index b8d74ed101d..20546642720 100644 --- a/src/main/java/forge/GUI_DeckAnalysis.java +++ b/src/main/java/forge/gui/deckeditor/DeckAnalysis.java @@ -1,4 +1,4 @@ -package forge; +package forge.gui.deckeditor; import java.awt.Color; import java.awt.Dimension; @@ -28,6 +28,8 @@ import javax.swing.border.BevelBorder; import javax.swing.event.MouseInputAdapter; import javax.swing.table.DefaultTableModel; +import forge.CardList; +import forge.MyRandom; import forge.card.CardRules; import forge.card.CardType; import forge.item.CardPrinted; @@ -48,7 +50,7 @@ import net.miginfocom.swing.MigLayout; * @author Forge * @version $Id$ */ -public class GUI_DeckAnalysis extends javax.swing.JDialog { +public class DeckAnalysis extends javax.swing.JDialog { /** Constant serialVersionUID=-8475271235196182185L */ private static final long serialVersionUID = -8475271235196182185L; @@ -110,7 +112,7 @@ public class GUI_DeckAnalysis extends javax.swing.JDialog { * @param tb * a {@link forge.gui.deckeditor.TableModel} object. */ - public GUI_DeckAnalysis(JFrame g, ItemPoolView deckView) { + public DeckAnalysis(JFrame g, ItemPoolView deckView) { super(g); deck = deckView; diff --git a/src/main/java/forge/gui/deckeditor/DeckEditor.java b/src/main/java/forge/gui/deckeditor/DeckEditor.java index 1cc984fab9f..b51d67dc2a1 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditor.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditor.java @@ -23,7 +23,6 @@ import forge.Command; import forge.Singletons; import forge.error.ErrorViewer; import forge.game.GameType; -//import forge.view.swing.OldGuiNewGame; import forge.item.CardDb; import forge.item.CardPrinted; import forge.item.InventoryItem; @@ -46,6 +45,8 @@ public final class DeckEditor extends DeckEditorBase { private JButton removeButton = new JButton(); private JButton addButton = new JButton(); + private JButton importButton = new JButton(); + private JButton analysisButton = new JButton(); private JButton clearFilterButton = new JButton(); @@ -134,12 +135,14 @@ public final class DeckEditor extends DeckEditorBase { Font fButtons = new java.awt.Font("Dialog", 0, 13); removeButton.setFont(fButtons); addButton.setFont(fButtons); + importButton.setFont(fButtons); clearFilterButton.setFont(fButtons); analysisButton.setFont(fButtons); } addButton.setText("Add to Deck"); removeButton.setText("Remove from Deck"); + importButton.setText("Import a Deck"); clearFilterButton.setText("Clear Filter"); analysisButton.setText("Deck Analysis"); @@ -147,6 +150,8 @@ public final class DeckEditor extends DeckEditorBase { public void actionPerformed(final ActionEvent e) { removeButtonClicked(e); } }); addButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(final ActionEvent e) { addButton_actionPerformed(e); } }); + importButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(final ActionEvent e) { importButton_actionPerformed(e); } }); clearFilterButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(final ActionEvent e) { clearFilterButton_actionPerformed(e); } }); analysisButton.addActionListener(new java.awt.event.ActionListener() { @@ -168,9 +173,9 @@ public final class DeckEditor extends DeckEditorBase { // x 768 screen size this.setTitle("Deck Editor"); - Container pane = this.getContentPane(); + Container content = this.getContentPane(); MigLayout layout = new MigLayout("fill"); - pane.setLayout(layout); + content.setLayout(layout); boolean isFirst = true; for (JCheckBox box : filterBoxes.allTypes) { @@ -179,31 +184,32 @@ public final class DeckEditor extends DeckEditorBase { growParameter = "cell 0 0, egx checkbox, grow, split 14"; isFirst = false; } - this.getContentPane().add(box, growParameter); + content.add(box, growParameter); box.addItemListener(itemListenerUpdatesDisplay); } for (JCheckBox box : filterBoxes.allColors) { - this.getContentPane().add(box, "grow"); + content.add(box, "grow"); box.addItemListener(itemListenerUpdatesDisplay); } - this.getContentPane().add(clearFilterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow"); + content.add(clearFilterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow"); - this.getContentPane().add(filterNameTypeSet, "cell 0 1, grow"); - this.getContentPane().add(top.getTableDecorated(), "cell 0 2 1 2, pushy, grow"); - this.getContentPane().add(top.getLabel(), "cell 0 4"); + content.add(filterNameTypeSet, "cell 0 1, grow"); + content.add(top.getTableDecorated(), "cell 0 2 1 2, pushy, grow"); + content.add(top.getLabel(), "cell 0 4"); - this.getContentPane().add(addButton, "w 100, h 49, sg button, cell 0 5, split 4"); - this.getContentPane().add(removeButton, "w 100, h 49, sg button"); + content.add(addButton, "w 100, h 49, sg button, cell 0 5, split 5"); + content.add(removeButton, "w 100, h 49, sg button"); + content.add(importButton, "w 100, h 49, sg button, gapleft 40px"); // Label is used to push the analysis button to the right to separate analysis button from add/remove card ones - this.getContentPane().add(jLabelAnalysisGap, "wmin 100, grow"); - this.getContentPane().add(analysisButton, "w 100, h 49, wrap"); + content.add(jLabelAnalysisGap, "wmin 100, growx"); + content.add(analysisButton, "w 100, h 49, wrap"); - this.getContentPane().add(bottom.getTableDecorated(), "cell 0 6, grow"); - this.getContentPane().add(bottom.getLabel(), "cell 0 7"); + content.add(bottom.getTableDecorated(), "cell 0 6, grow"); + content.add(bottom.getLabel(), "cell 0 7"); - this.getContentPane().add(cardView, "cell 1 0 1 8, flowy, grow"); + content.add(cardView, "cell 1 0 1 8, flowy, grow"); top.getTable().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { if (e.getClickCount() == 2) { addCardToDeck(); } } }); @@ -278,4 +284,12 @@ public final class DeckEditor extends DeckEditorBase { customMenu.notifyDeckChange(); } + + void importButton_actionPerformed(ActionEvent e) { + DeckEditorBase g = this; + DeckImport dImport = new DeckImport(g); + dImport.setVisible(true); + g.setEnabled(false); + } + } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java index cd7245a862b..1cdecf76df6 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java @@ -11,7 +11,6 @@ import javax.swing.event.DocumentListener; import net.slightlymagic.maxmtg.Predicate; -import forge.GUI_DeckAnalysis; import forge.deck.Deck; import forge.game.GameType; import forge.item.CardPrinted; @@ -57,7 +56,7 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay { JOptionPane.INFORMATION_MESSAGE); } else { DeckEditorBase g = DeckEditorBase.this; - GUI_DeckAnalysis dAnalysis = new GUI_DeckAnalysis(g, deck); + DeckAnalysis dAnalysis = new DeckAnalysis(g, deck); dAnalysis.setVisible(true); g.setEnabled(false); } diff --git a/src/main/java/forge/gui/deckeditor/DeckImport.java b/src/main/java/forge/gui/deckeditor/DeckImport.java new file mode 100644 index 00000000000..c7404face90 --- /dev/null +++ b/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -0,0 +1,93 @@ +package forge.gui.deckeditor; + +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.border.TitledBorder; + +import net.miginfocom.swing.MigLayout; + +import forge.Singletons; +import forge.gui.GuiUtils; + +/** + * Dialog for quick import of decks + * + */ +public class DeckImport extends JDialog { + private static final long serialVersionUID = -5837776824284093004L; + + private JTextArea txtInput = new JTextArea(); + private JEditorPane htmlOutput = new JEditorPane(); + private JScrollPane scrollInput = new JScrollPane(txtInput); + private JScrollPane scrollOutput = new JScrollPane(htmlOutput); + private JButton cmdAccept = new JButton("Import Deck"); + private JButton cmdCancel = new JButton("Cancel"); + + DeckEditorBase host; + + public DeckImport(DeckEditorBase g) { + host = g; + + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent arg0) { + host.setEnabled(true); + } + }); + + int wWidth = 800; + int wHeight = 600; + + setPreferredSize(new java.awt.Dimension(wWidth, wHeight)); + setSize(wWidth, wHeight); + GuiUtils.centerFrame(this); + + setResizable(false); + setTitle("Deck Import (wip)"); + + + if (!Singletons.getModel().getPreferences().lafFonts) { + Font fButtons = new java.awt.Font("Dialog", 0, 13); + cmdAccept.setFont(fButtons); + cmdCancel.setFont(fButtons); + + txtInput.setFont(fButtons); + htmlOutput.setFont(fButtons); + } + + scrollInput.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "Paste or type a decklist")); + scrollOutput.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "Expect the recognized lines to appear")); + scrollInput.setViewportBorder(BorderFactory.createLoweredBevelBorder()); + scrollOutput.setViewportBorder(BorderFactory.createLoweredBevelBorder()); + + getContentPane().setLayout(new MigLayout("fill")); + getContentPane().add(scrollInput, "cell 0 0, w 50%, growy, pushy"); + getContentPane().add(scrollOutput, "cell 1 0, w 50%, growy, pushy"); + getContentPane().add(cmdAccept, "cell 0 1, w 100, align r"); + getContentPane().add(cmdCancel, "cell 1 1, w 100, align l"); + + cmdCancel.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + processWindowEvent(new WindowEvent(DeckImport.this, WindowEvent.WINDOW_CLOSING)); } }); + + cmdAccept.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(DeckImport.this, "This dialog still in development, don't expect any changes to deck yet."); + processWindowEvent(new WindowEvent(DeckImport.this, WindowEvent.WINDOW_CLOSING)); } }); + + } + + + +}