diff --git a/Mage.Client/src/main/java/mage/client/game/BattlefieldPanel.java b/Mage.Client/src/main/java/mage/client/game/BattlefieldPanel.java index f62b00541ad..8689f597b33 100644 --- a/Mage.Client/src/main/java/mage/client/game/BattlefieldPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/BattlefieldPanel.java @@ -42,6 +42,8 @@ import mage.client.util.Config; import mage.view.PermanentView; import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; @@ -62,16 +64,23 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { protected Map battlefield; private Dimension cardDimension; + + private JPanel jPanel; + private JScrollPane jScrollPane; + private int width; /** Creates new form BattlefieldPanel */ - public BattlefieldPanel(JScrollPane jScrollPane) { - ui.put("jScrollPane", jScrollPane); + public BattlefieldPanel() { ui.put("battlefieldPanel", this); initComponents(); addComponentListener(new ComponentAdapter(){ @Override public void componentResized(ComponentEvent e) { + int width = e.getComponent().getWidth(); + int height = e.getComponent().getHeight(); + BattlefieldPanel.this.jScrollPane.setSize(width, height); + BattlefieldPanel.this.width = width; sortLayout(); } }); @@ -124,7 +133,11 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { //TODO: review sorting stuff public void sortLayout() { - Plugins.getInstance().sortPermanents(ui, permanents.values()); + int height = Plugins.getInstance().sortPermanents(ui, permanents.values()); + BattlefieldPanel.this.jPanel.setPreferredSize(new Dimension(width - 30, height)); + this.jScrollPane.repaint(); + this.jScrollPane.revalidate(); + if (battlefield == null) {return;} for (PermanentView permanent: battlefield.values()) { @@ -149,7 +162,8 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { } permanents.put(permanent.getId(), perm); - BattlefieldPanel.this.add(perm, 10); + //BattlefieldPanel.this.jPanel.add(perm, 10); + this.jPanel.add(perm); if (!Plugins.getInstance().isCardPluginLoaded()) { moveToFront(perm); perm.update(permanent); @@ -200,12 +214,12 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { } private void removePermanent(UUID permanentId, final int count) { - for (Component c: this.getComponents()) { + for (Component c: this.jPanel.getComponents()) { final Component comp = c; if (comp instanceof Permanent) { if (((Permanent)comp).getPermanentId().equals(permanentId)) { comp.setVisible(false); - this.remove(comp); + this.jPanel.remove(comp); } } else if (comp instanceof MagePermanent) { if (((MagePermanent)comp).getOriginal().getId().equals(permanentId)) { @@ -214,7 +228,7 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { public void run() { Plugins.getInstance().onRemoveCard((MagePermanent)comp, count); comp.setVisible(false); - BattlefieldPanel.this.remove(comp); + BattlefieldPanel.this.jPanel.remove(comp); } }); t.start(); @@ -257,6 +271,16 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane { private void initComponents() { setOpaque(true); + + jPanel = new JPanel(); + jPanel.setLayout(null); + jScrollPane = new JScrollPane(jPanel); + + Border empty = new EmptyBorder(0,0,0,0); + jScrollPane.setBorder(empty); + jScrollPane.setViewportBorder(empty); + + this.add(jScrollPane); } } diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 321c7a474d6..3e6177182fe 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -34,19 +34,6 @@ package mage.client.game; -import java.awt.*; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.Serializable; -import java.util.*; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; -import javax.swing.*; -import javax.swing.border.LineBorder; import mage.Constants; import mage.client.MageFrame; import mage.client.chat.ChatPanel; @@ -61,6 +48,20 @@ import mage.remote.Session; import mage.view.*; import org.apache.log4j.Logger; +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.border.LineBorder; +import java.awt.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.Serializable; +import java.util.*; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; + /** * @@ -848,7 +849,7 @@ public class GamePanel extends javax.swing.JPanel { .addComponent(jPhases, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(gl_jPanel3.createSequentialGroup() .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) - .addGap(49)))) + ))) ); gl_jPanel3.setVerticalGroup( gl_jPanel3.createParallelGroup(Alignment.TRAILING) diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 3617bab8e70..ca6835c26ef 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -27,20 +27,17 @@ */ package mage.client.game; -import java.awt.Color; -import java.awt.Dimension; -import java.util.UUID; -import javax.swing.BorderFactory; -import javax.swing.GroupLayout; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; -import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; +import mage.cards.decks.importer.DeckImporterUtil; import mage.client.MageFrame; import mage.client.cards.BigCard; -import mage.cards.decks.importer.DeckImporterUtil; import mage.view.PlayerView; +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import java.awt.*; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -54,8 +51,8 @@ public class PlayAreaPanel extends javax.swing.JPanel { public PlayAreaPanel() { initComponents(); setOpaque(false); - jScrollPane1.setOpaque(false); - jScrollPane1.getViewport().setOpaque(false); + //jScrollPane1.setOpaque(false); + //jScrollPane1.getViewport().setOpaque(false); battlefieldPanel.setOpaque(false); } @@ -91,8 +88,9 @@ public class PlayAreaPanel extends javax.swing.JPanel { setBorder(BorderFactory.createLineBorder(new Color(0,0,0,0))); playerPanel = new PlayerPanelExt(); btnCheat = new javax.swing.JButton(); - jScrollPane1 = new javax.swing.JScrollPane(); - battlefieldPanel = new mage.client.game.BattlefieldPanel(jScrollPane1); + //jScrollPane1 = new javax.swing.JScrollPane(); + //battlefieldPanel = new mage.client.game.BattlefieldPanel(jScrollPane1); + battlefieldPanel = new mage.client.game.BattlefieldPanel(); btnCheat.setText("Cheat"); btnCheat.addActionListener(new java.awt.event.ActionListener() { @@ -102,22 +100,22 @@ public class PlayAreaPanel extends javax.swing.JPanel { } }); - jScrollPane1.setViewportView(battlefieldPanel); - Border empty = new EmptyBorder(0,0,0,0); - jScrollPane1.setBorder(empty); - jScrollPane1.setViewportBorder(empty); + //jScrollPane1.setViewportView(battlefieldPanel); + //Border empty = new EmptyBorder(0,0,0,0); + //jScrollPane1.setBorder(empty); + //jScrollPane1.setViewportBorder(empty); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); layout.setHorizontalGroup( layout.createSequentialGroup() .addComponent(playerPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED) - .addComponent(jScrollPane1, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(battlefieldPanel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(Alignment.LEADING) .addComponent(playerPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE) + .addComponent(battlefieldPanel, GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE) ); this.setLayout(layout); } @@ -126,11 +124,13 @@ public class PlayAreaPanel extends javax.swing.JPanel { this.playerPanel.sizePlayerPanel(smallMode); if (smallMode) { this.playerPanel.setPreferredSize(new Dimension(92, 160)); - this.jScrollPane1.setPreferredSize(new Dimension(160, 160)); + //this.jScrollPane1.setPreferredSize(new Dimension(160, 160)); + this.battlefieldPanel.setPreferredSize(new Dimension(160, 160)); } else { this.playerPanel.setPreferredSize(new Dimension(92, 212)); - this.jScrollPane1.setPreferredSize(new Dimension(160, 212)); + //this.jScrollPane1.setPreferredSize(new Dimension(160, 212)); + this.battlefieldPanel.setPreferredSize(new Dimension(160, 212)); } } @@ -141,7 +141,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { private mage.client.game.BattlefieldPanel battlefieldPanel; private javax.swing.JButton btnCheat; - private javax.swing.JScrollPane jScrollPane1; + //private javax.swing.JScrollPane jScrollPane1; private PlayerPanelExt playerPanel; } diff --git a/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java b/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java index ab51d9aa5fd..fd7b946c9e0 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java @@ -1,16 +1,6 @@ package mage.client.plugins; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.Collection; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import javax.swing.JComponent; - import mage.cards.Card; -import mage.cards.CardDimensions; import mage.cards.MageCard; import mage.cards.MagePermanent; import mage.cards.action.ActionCallback; @@ -18,6 +8,14 @@ import mage.client.cards.BigCard; import mage.view.CardView; import mage.view.PermanentView; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + public interface MagePlugins { void loadPlugins(); void shutdown(); @@ -28,7 +26,7 @@ public interface MagePlugins { boolean isThemePluginLoaded(); boolean isCardPluginLoaded(); boolean isCounterPluginLoaded(); - void sortPermanents(Map ui, Collection permanents); + int sortPermanents(Map ui, Collection permanents); boolean newImage(Set allCards); void downloadImage(Set allCards); void downloadSymbols(); diff --git a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java index 73de6afcfaa..917d27a8d9e 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java @@ -11,7 +11,6 @@ import mage.client.dialog.PreferencesDialog; import mage.client.plugins.MagePlugins; import mage.client.plugins.adapters.MageActionCallback; import mage.client.util.Config; -import mage.client.util.SettingsManager; import mage.constants.Constants; import mage.interfaces.PluginException; import mage.interfaces.plugin.CardPlugin; @@ -105,9 +104,10 @@ public class Plugins implements MagePlugins { } @Override - public void sortPermanents(Map ui, Collection permanents) { + public int sortPermanents(Map ui, Collection permanents) { sortingOptions.put("nonLandPermanentsInOnePile", PreferencesDialog.getCachedValue("nonLandPermanentsInOnePile", "false")); - if (this.cardPlugin != null) this.cardPlugin.sortPermanents(ui, permanents, sortingOptions); + if (this.cardPlugin != null) return this.cardPlugin.sortPermanents(ui, permanents, sortingOptions); + return -1; } @Override diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java index 3e6d0b5628b..00301e6c77c 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/CardPluginImpl.java @@ -101,25 +101,25 @@ public class CardPluginImpl implements CardPlugin { } @Override - public void sortPermanents(Map ui, Collection permanents, Map options) { + public int sortPermanents(Map ui, Collection permanents, Map options) { //TODO: add caching //requires to find out is position have been changed that includes: //adding/removing permanents, type change if (ui == null) throw new RuntimeException("Error: no components"); - JComponent component = ui.get("jScrollPane"); + //JComponent component = ui.get("jScrollPane"); JComponent component2 = ui.get("battlefieldPanel"); - if (component == null) - throw new RuntimeException("Error: jScrollPane is missing"); + //if (component == null) + //throw new RuntimeException("Error: jScrollPane is missing"); if (component2 == null) throw new RuntimeException("Error: battlefieldPanel is missing"); - if (!(component instanceof JScrollPane)) - throw new RuntimeException("Error: jScrollPane has wrong type."); - if (!(component instanceof JScrollPane)) - throw new RuntimeException("Error: battlefieldPanel is missing"); + //if (!(component instanceof JScrollPane)) + //throw new RuntimeException("Error: jScrollPane has wrong type."); + //if (!(component instanceof JScrollPane)) + //throw new RuntimeException("Error: battlefieldPanel is missing"); - JScrollPane jScrollPane = (JScrollPane) component; + //JScrollPane jScrollPane = (JScrollPane) component; JLayeredPane battlefieldPanel = (JLayeredPane) component2; Row allLands = new Row(); @@ -174,7 +174,7 @@ public class CardPluginImpl implements CardPlugin { } cardWidth = cardWidthMax; - Rectangle rect = jScrollPane.getVisibleRect(); + Rectangle rect = battlefieldPanel.getVisibleRect(); playAreaWidth = rect.width; playAreaHeight = rect.height; while (true) { @@ -270,6 +270,8 @@ public class CardPluginImpl implements CardPlugin { } y = rowBottom; } + + return y; } private boolean empty(List list) { diff --git a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java index 5e1a2aed795..8020ad9d178 100644 --- a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java +++ b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java @@ -1,5 +1,13 @@ package mage.interfaces.plugin; +import mage.cards.Card; +import mage.cards.MagePermanent; +import mage.cards.action.ActionCallback; +import mage.view.CardView; +import mage.view.PermanentView; +import net.xeoh.plugins.base.Plugin; + +import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Collection; @@ -7,16 +15,6 @@ import java.util.Map; import java.util.Set; import java.util.UUID; -import javax.swing.JComponent; - -import mage.cards.Card; -import mage.cards.CardDimensions; -import mage.cards.MagePermanent; -import mage.cards.action.ActionCallback; -import mage.view.CardView; -import mage.view.PermanentView; -import net.xeoh.plugins.base.Plugin; - /** * Interface for card plugins * @@ -29,7 +27,7 @@ import net.xeoh.plugins.base.Plugin; public interface CardPlugin extends Plugin { MagePermanent getMagePermanent(PermanentView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage); MagePermanent getMageCard(CardView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage); - void sortPermanents(Map ui, Collection cards, Map options); + int sortPermanents(Map ui, Collection cards, Map options); /** * Check for new images.