From ace7175f1a57f3dc88a861842969e84efacf65ad Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Mon, 20 Jun 2011 02:19:47 +0200 Subject: Continued side panel git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@499 72836036-5685-4462-b002-a69064685172 --- mock/jrummikub/view/MockSidePanel.java | 9 ++ src/jrummikub/control/AbstractSettingsControl.java | 24 +++--- src/jrummikub/control/GameControl.java | 1 - src/jrummikub/control/RoundControl.java | 19 ++++- src/jrummikub/model/GameSettings.java | 5 ++ src/jrummikub/view/ISidePanel.java | 5 ++ src/jrummikub/view/impl/SidePanel.java | 96 ++++++++++++++++------ 7 files changed, 120 insertions(+), 39 deletions(-) diff --git a/mock/jrummikub/view/MockSidePanel.java b/mock/jrummikub/view/MockSidePanel.java index 1755e65..66faca4 100644 --- a/mock/jrummikub/view/MockSidePanel.java +++ b/mock/jrummikub/view/MockSidePanel.java @@ -1,6 +1,9 @@ package jrummikub.view; +import java.util.List; + import jrummikub.model.GameSettings; +import jrummikub.model.IPlayer; /** * Mock class for the side panel @@ -24,5 +27,11 @@ public class MockSidePanel implements ISidePanel { // TODO Auto-generated method stub } + + @Override + public void setPlayers(List players) + { + + } } diff --git a/src/jrummikub/control/AbstractSettingsControl.java b/src/jrummikub/control/AbstractSettingsControl.java index 45802a7..7a38478 100644 --- a/src/jrummikub/control/AbstractSettingsControl.java +++ b/src/jrummikub/control/AbstractSettingsControl.java @@ -33,9 +33,9 @@ public abstract class AbstractSettingsControl { * Create a new settings control * * @param view - * the view to use + * the view to use * @param settings - * initial game settings + * initial game settings */ protected AbstractSettingsControl(IView view, GameSettings settings) { this.view = view; @@ -43,8 +43,10 @@ public abstract class AbstractSettingsControl { view.getSettingsPanel().setPlayerNamesEditable( Collections. emptyList()); - view.getSettingsPanel().setPlayerColors( - new HashSet(Arrays.asList(ISettingsPanel.PLAYER_COLORS))); + view.getSettingsPanel() + .setPlayerColors( + new HashSet(Arrays + .asList(ISettingsPanel.PLAYER_COLORS))); } protected void addListeners() { @@ -95,7 +97,8 @@ public abstract class AbstractSettingsControl { private void addOptionListeners1() { connections.add(view.getSettingsPanel() - .getChangeInitialMeldThresholdEvent().add(new IListener1() { + .getChangeInitialMeldThresholdEvent() + .add(new IListener1() { @Override public void handle(Integer value) { settings.setInitialMeldThreshold(value); @@ -120,7 +123,8 @@ public abstract class AbstractSettingsControl { update(); } })); - connections.add(view.getSettingsPanel().getChangeNumberOfStonesDealtEvent() + connections.add(view.getSettingsPanel() + .getChangeNumberOfStonesDealtEvent() .add(new IListener1() { @Override public void handle(Integer value) { @@ -278,8 +282,9 @@ public abstract class AbstractSettingsControl { for (int j = i + 1; j < settings.getPlayerList().size(); ++j) { PlayerSettings player2 = settings.getPlayerList().get(j); if (player2.getName().equals(name) && player2.getType() == type) { - view.getSettingsPanel().setError( - ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR); + view.getSettingsPanel() + .setError( + ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR); view.getSettingsPanel().enableStartGameButton(false); return false; } @@ -291,8 +296,7 @@ public abstract class AbstractSettingsControl { private boolean checkErrors() { int totalStonesDealt = settings.getNumberOfStonesDealt() * settings.getPlayerList().size(); - int totalStones = settings.getHighestValue() * settings.getStoneSetNumber() - * settings.getStoneColors().size() + settings.getJokerNumber(); + int totalStones = settings.getTotalStones(); if (totalStones <= totalStonesDealt) { view.getSettingsPanel().setError( diff --git a/src/jrummikub/control/GameControl.java b/src/jrummikub/control/GameControl.java index babca99..7e95c08 100644 --- a/src/jrummikub/control/GameControl.java +++ b/src/jrummikub/control/GameControl.java @@ -97,7 +97,6 @@ public class GameControl { * Game gets started by initializing the first Round */ public void startGame() { - view.getSidePanel().setGameSettings(gameSettings); view.showSidePanel(true); startRound(); } diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java index 8dbf236..e18ce2e 100644 --- a/src/jrummikub/control/RoundControl.java +++ b/src/jrummikub/control/RoundControl.java @@ -18,6 +18,7 @@ import jrummikub.model.IHand; import jrummikub.model.IPlayer; import jrummikub.model.IRoundState; import jrummikub.model.ITable; +import jrummikub.model.Player; import jrummikub.model.PlayerSettings; import jrummikub.model.Position; import jrummikub.model.Score; @@ -92,6 +93,7 @@ public class RoundControl { * Continue a saved round after loading */ public void continueRound() { + connections.add(view.getStartTurnEvent().add(new IListener() { @Override public void handle() { @@ -141,6 +143,8 @@ public class RoundControl { } protected void doPrepareTurn() { + updateSidePanel(); + boolean isHuman = roundState.getActivePlayer().getPlayerSettings() .getType() == HUMAN; boolean oneHuman = roundState.getGameSettings().oneHuman(); @@ -207,6 +211,18 @@ public class RoundControl { turnControl.startTurn(); } + + private void updateSidePanel() { + view.showSidePanel(true); + view.getSidePanel().setGameSettings(roundState.getGameSettings()); + List players = new ArrayList(); + for (int i = 1; i < roundState.getPlayerCount(); i ++) { + players.add(roundState.getNthNextPlayer(-i)); + } + view.getSidePanel().setPlayers(players); + view.getSidePanel().setHeapCapacity(roundState.getGameSettings().getTotalStones()); + view.getSidePanel().setHeapSize(roundState.getGameHeap().getSize()); + } /** Override this */ protected void addTurnControlListeners(ITurnControl turnControl) { @@ -217,14 +233,12 @@ public class RoundControl { } void deal() { - view.getSidePanel().setHeapCapacity(roundState.getGameHeap().getSize()); for (int i = 0; i < roundState.getPlayerCount(); i++) { IHand hand = roundState.getNthNextPlayer(i).getHand(); for (int j = 0; j < roundState.getGameSettings().getNumberOfStonesDealt(); j++) { hand.drop(roundState.getGameHeap().drawStone(), new Position(0, 0)); } } - view.getSidePanel().setHeapSize(roundState.getGameHeap().getSize()); } @@ -410,7 +424,6 @@ public class RoundControl { Hand.WIDTH - 1, rowCount - 1)); } - view.getSidePanel().setHeapSize(roundState.getGameHeap().getSize()); } private void dealStone() { diff --git a/src/jrummikub/model/GameSettings.java b/src/jrummikub/model/GameSettings.java index 7713e85..55419a4 100644 --- a/src/jrummikub/model/GameSettings.java +++ b/src/jrummikub/model/GameSettings.java @@ -247,4 +247,9 @@ public class GameSettings implements Serializable { return (humans == 1); } + + public int getTotalStones() { + return getHighestValue() * getStoneSetNumber() + * getStoneColors().size() + getJokerNumber(); + } } diff --git a/src/jrummikub/view/ISidePanel.java b/src/jrummikub/view/ISidePanel.java index 9b3bf43..9efea85 100644 --- a/src/jrummikub/view/ISidePanel.java +++ b/src/jrummikub/view/ISidePanel.java @@ -1,6 +1,9 @@ package jrummikub.view; +import java.util.List; + import jrummikub.model.GameSettings; +import jrummikub.model.IPlayer; public interface ISidePanel { @@ -10,4 +13,6 @@ public interface ISidePanel { void setHeapSize(int size); + void setPlayers(List players); + } \ No newline at end of file diff --git a/src/jrummikub/view/impl/SidePanel.java b/src/jrummikub/view/impl/SidePanel.java index b895701..a4e0e43 100644 --- a/src/jrummikub/view/impl/SidePanel.java +++ b/src/jrummikub/view/impl/SidePanel.java @@ -16,6 +16,9 @@ import java.awt.event.AdjustmentListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import javax.swing.ImageIcon; import javax.swing.JCheckBox; @@ -26,16 +29,19 @@ import javax.swing.JProgressBar; import javax.swing.JScrollBar; import javax.swing.JViewport; import javax.swing.SwingConstants; -import javax.swing.border.CompoundBorder; +import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; import javax.swing.border.MatteBorder; import jrummikub.model.GameSettings; +import jrummikub.model.IPlayer; +import jrummikub.model.Player; +import jrummikub.model.PlayerSettings; import jrummikub.view.ISidePanel; @SuppressWarnings("serial") class SidePanel extends JPanel implements ISidePanel { - //private InfoPanel infoPanel; + // private InfoPanel infoPanel; private PlayerListPanel playerListPanel; private BottomScrollPane playerListScrollPane; private JLabel initialMeldLabel; @@ -52,7 +58,8 @@ class SidePanel extends JPanel implements ISidePanel { GridBagConstraints c = new GridBagConstraints(); - InfoPanel infoPanel = new InfoPanel(createGameInfoPanel(), createRuleInfoPanel()); + InfoPanel infoPanel = new InfoPanel(createGameInfoPanel(), + createRuleInfoPanel()); c.gridx = 0; c.gridy = 0; c.weightx = 1; @@ -83,12 +90,12 @@ class SidePanel extends JPanel implements ISidePanel { colorLabel.setText("" + settings.getStoneColors().size()); noLimitsLabel.setVisible(settings.isNoLimits()); } - + @Override public void setHeapCapacity(int capacity) { heapBar.setMaximum(capacity); } - + @Override public void setHeapSize(int size) { heapBar.setValue(size); @@ -99,11 +106,11 @@ class SidePanel extends JPanel implements ISidePanel { heapBar.setString("leer"); } } - + private JPanel createGameInfoPanel() { JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); - + GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; @@ -113,24 +120,24 @@ class SidePanel extends JPanel implements ISidePanel { c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; heapBar = new JProgressBar(); - heapBar.setPreferredSize(new Dimension(16,16)); + heapBar.setPreferredSize(new Dimension(16, 16)); panel.add(heapBar, c); - + heapBar.setStringPainted(true); - + return panel; } private JPanel createRuleInfoPanel() { JPanel panel = new JPanel(); - panel.setLayout(new GridBagLayout()); + panel.setLayout(new GridBagLayout()); initialMeldLabel = createRuleLine(panel, "Auslegeschranke", 0); setNumberLabel = createRuleLine(panel, "Steins\u00e4tze", 1); - highestValueLabel = createRuleLine(panel,"Steinwert", 2); + highestValueLabel = createRuleLine(panel, "Steinwert", 2); handStonesLabel = createRuleLine(panel, "Startsteine", 3); jokerLabel = createRuleLine(panel, "Joker", 4); colorLabel = createRuleLine(panel, "Farben", 5); - + GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 6; @@ -144,7 +151,7 @@ class SidePanel extends JPanel implements ISidePanel { return panel; } - + private JLabel createRuleLine(JPanel panel, String name, int line) { GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; @@ -247,7 +254,7 @@ class SidePanel extends JPanel implements ISidePanel { c.insets = new Insets(4, 8, 4, 8); add(gameInfoPanel, c); - + showRules = new JCheckBox("Regeln"); showRules.setSelected(true); setupTriangleIcons(showRules); @@ -312,25 +319,47 @@ class SidePanel extends JPanel implements ISidePanel { class PlayerListItem extends JPanel { JLabel playerName; + JLabel playerStatus; + JLabel playerColor; + - public PlayerListItem() { + public PlayerListItem(IPlayer player) { setLayout(new GridBagLayout()); + setBorder(new EmptyBorder(0, 4, 0, 4)); + PlayerSettings settings = player.getPlayerSettings(); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; + c.gridheight = 2; + c.weighty = 1; + c.insets = new Insets(4, 4, 4, 4); + playerColor = new JLabel(ImageUtil.createColorIcon( + settings.getColor(), 12, 1)); + add(playerColor, c); + + c.gridx = 1; + c.gridy = 0; + c.gridheight = 1; c.weightx = 1; c.fill = GridBagConstraints.HORIZONTAL; - c.insets = new Insets(5, 5, 5, 5); + c.insets = new Insets(2,2,2,2); - playerName = new JLabel("Horst
> 9000 Steine"); + playerName = new JLabel(settings.getName()); + playerName.putClientProperty("html.disable", Boolean.TRUE); add(playerName, c); + + c.gridx = 1; + c.gridy = 1; + playerStatus = new JLabel(player.getLaidOut() ? "rausgekommen" : "nicht rausgekommen"); + add(playerStatus, c); } } class PlayerListPanel extends JPanel { JPanel startSpacer; + List listItems = new ArrayList(); public PlayerListPanel() { setBackground(Color.GRAY); @@ -346,14 +375,25 @@ class SidePanel extends JPanel implements ISidePanel { c.weighty = 1; c.fill = GridBagConstraints.BOTH; add(startSpacer, c); - c.weighty = 0; - c.fill = GridBagConstraints.HORIZONTAL; - for (int i = 1; i <= 4; i++) { - c.gridx = 0; - c.gridy = i; - c.insets = new Insets(i == 1 ? 0 : 1, 0, 0, 0); - add(new PlayerListItem(), c); + } + + public void setPlayers(List players) { + for (PlayerListItem item : listItems) { + remove(item); + } + listItems.clear(); + GridBagConstraints c = new GridBagConstraints(); + c.gridx = 0; + c.gridy = 0; + c.weightx = 1; + c.fill = GridBagConstraints.HORIZONTAL; + for (IPlayer player : players) { + c.gridy++; + c.insets = new Insets(c.gridy == 1 ? 0 : 1, 0, 0, 0); + PlayerListItem item = new PlayerListItem(player); + listItems.add(item); + add(item, c); } } @@ -364,4 +404,10 @@ class SidePanel extends JPanel implements ISidePanel { } } + @Override + public void setPlayers(List players) { + playerListPanel.setPlayers(players); + + } + } -- cgit v1.2.3