summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/view')
-rw-r--r--src/jrummikub/view/IScorePanel.java35
-rw-r--r--src/jrummikub/view/IView.java18
-rw-r--r--src/jrummikub/view/impl/ScorePanel.java131
-rw-r--r--src/jrummikub/view/impl/View.java18
4 files changed, 201 insertions, 1 deletions
diff --git a/src/jrummikub/view/IScorePanel.java b/src/jrummikub/view/IScorePanel.java
new file mode 100644
index 0000000..be0b912
--- /dev/null
+++ b/src/jrummikub/view/IScorePanel.java
@@ -0,0 +1,35 @@
+package jrummikub.view;
+
+import jrummikub.model.PlayerSettings;
+import jrummikub.model.Score;
+
+/**
+ * The panel the scores are displayed in
+ */
+public interface IScorePanel {
+ /**
+ * Sets the scores of the played rounds
+ *
+ * @param scores the round scores
+ */
+ public void setScores(Iterable<Score> scores);
+
+ /**
+ * Sets the accumulated scores to display
+ *
+ * @param accumulatedScore the accumulated score
+ */
+ public void setAccumulatedScore(Score accumulatedScore);
+
+ /**
+ * Sets the player list to display
+ *
+ * @param players the player list
+ */
+ void setPlayers(Iterable<PlayerSettings> players);
+
+ /**
+ * Updates the score display
+ */
+ void update();
+}
diff --git a/src/jrummikub/view/IView.java b/src/jrummikub/view/IView.java
index 6a96213..3e33e44 100644
--- a/src/jrummikub/view/IView.java
+++ b/src/jrummikub/view/IView.java
@@ -17,6 +17,13 @@ public interface IView {
public ISettingsPanel getSettingsPanel();
/**
+ * Returns the score panel
+ *
+ * @return the score panel
+ */
+ public IScorePanel getScorePanel();
+
+ /**
* Returns the table
*
* @return the table
@@ -91,7 +98,16 @@ public interface IView {
/**
* Shows or hides the game settings panel
*
- * @param show specifies if the panel shall be shown or hidden
+ * @param show
+ * specifies if the panel shall be shown or hidden
*/
void showSettingsPanel(boolean show);
+
+ /**
+ * Shows or hides the score panel
+ *
+ * @param show
+ * specifies if the panel shall be shown or hidden
+ */
+ void showScorePanel(boolean show);
}
diff --git a/src/jrummikub/view/impl/ScorePanel.java b/src/jrummikub/view/impl/ScorePanel.java
new file mode 100644
index 0000000..e926294
--- /dev/null
+++ b/src/jrummikub/view/impl/ScorePanel.java
@@ -0,0 +1,131 @@
+package jrummikub.view.impl;
+
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.Iterator;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+import javax.swing.border.LineBorder;
+
+import jrummikub.model.PlayerSettings;
+import jrummikub.model.Score;
+import jrummikub.view.IScorePanel;
+
+@SuppressWarnings("serial")
+class ScorePanel extends JPanel implements IScorePanel {
+ private Iterable<PlayerSettings> players;
+ private Iterable<Score> scores;
+ private Score accumulatedScore;
+
+ public ScorePanel() {
+ setLayout(new GridBagLayout());
+ setBorder(new LineBorder(Color.BLACK));
+ }
+
+ @Override
+ public void setPlayers(Iterable<PlayerSettings> players) {
+ this.players = players;
+ }
+
+ @Override
+ public void setScores(Iterable<Score> scores) {
+ this.scores = scores;
+ }
+
+ @Override
+ public void setAccumulatedScore(Score accumulatedScore) {
+ this.accumulatedScore = accumulatedScore;
+ }
+
+ @Override
+ public void update() {
+ this.removeAll();
+
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+ c.gridwidth = GridBagConstraints.REMAINDER;
+
+ addPlayerNames();
+
+ add(new JSeparator(), c);
+
+ int n = 0;
+ for (Iterator<Score> it = scores.iterator(); it.hasNext();) {
+ addScoreRow(it.next(), ++n);
+ }
+
+ add(new JSeparator(), c);
+
+ addAccumulatedScore();
+ }
+
+ private void addPlayerNames() {
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+
+ JLabel roundHead = new JLabel("Runde");
+ roundHead.setHorizontalAlignment(JLabel.CENTER);
+ add(roundHead, c);
+
+ for (Iterator<PlayerSettings> it = players.iterator(); it.hasNext();) {
+ PlayerSettings player = it.next();
+
+ if (!it.hasNext()) {
+ c.gridwidth = GridBagConstraints.REMAINDER;
+ }
+
+ JLabel playerNameLabel = new JLabel(player.getName());
+ playerNameLabel.setIcon(ImageUtil.createColorIcon(player.getColor(), 12,
+ 1));
+ playerNameLabel.setHorizontalAlignment(JLabel.CENTER);
+
+ add(playerNameLabel, c);
+ }
+ }
+
+ private void addScoreRow(Score score, int n) {
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+ c.gridwidth = 1;
+
+ JLabel roundLabel = new JLabel(Integer.toString(n));
+ roundLabel.setHorizontalAlignment(JLabel.CENTER);
+ add(roundLabel, c);
+
+ for (int i = 0; i < score.getPoints().size(); ++i) {
+ if (i == score.getPoints().size()-1) {
+ c.gridwidth = GridBagConstraints.REMAINDER;
+ }
+
+ JLabel scoreLabel = new JLabel(Integer.toString(score.getPoints().get(i)));
+ scoreLabel.setHorizontalAlignment(JLabel.CENTER);
+ add(scoreLabel, c);
+ }
+ }
+
+ private void addAccumulatedScore() {
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+
+ JLabel accumLabel = new JLabel("Gesamt");
+ accumLabel.setHorizontalAlignment(JLabel.CENTER);
+ add(accumLabel, c);
+
+ for (int i = 0; i < accumulatedScore.getPoints().size(); ++i) {
+ if (i == accumulatedScore.getPoints().size()-1) {
+ c.gridwidth = GridBagConstraints.REMAINDER;
+ }
+
+ JLabel scoreLabel = new JLabel(Integer.toString(accumulatedScore.getPoints().get(i)));
+ scoreLabel.setHorizontalAlignment(JLabel.CENTER);
+ add(scoreLabel, c);
+ }
+ }
+}
diff --git a/src/jrummikub/view/impl/View.java b/src/jrummikub/view/impl/View.java
index 0bc2e23..7381175 100644
--- a/src/jrummikub/view/impl/View.java
+++ b/src/jrummikub/view/impl/View.java
@@ -15,6 +15,7 @@ import jrummikub.model.Stone;
import jrummikub.util.IEvent;
import jrummikub.view.IHandPanel;
import jrummikub.view.IPlayerPanel;
+import jrummikub.view.IScorePanel;
import jrummikub.view.ISettingsPanel;
import jrummikub.view.ITablePanel;
import jrummikub.view.IView;
@@ -32,6 +33,7 @@ public class View extends JFrame implements IView {
private StartTurnPanel startTurnPanel;
private WinPanel winPanel;
private SettingsPanel settingsPanel;
+ private ScorePanel scorePanel;
private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
@@ -47,6 +49,11 @@ public class View extends JFrame implements IView {
}
@Override
+ public IScorePanel getScorePanel() {
+ return scorePanel;
+ }
+
+ @Override
public ITablePanel getTablePanel() {
return table;
}
@@ -100,6 +107,11 @@ public class View extends JFrame implements IView {
layeredPane.setLayer(settingsPanel, JLayeredPane.POPUP_LAYER);
layeredPane.add(settingsPanel);
+ scorePanel = new ScorePanel();
+ scorePanel.setVisible(false);
+ layeredPane.setLayer(scorePanel, JLayeredPane.POPUP_LAYER);
+ layeredPane.add(scorePanel);
+
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
@@ -132,6 +144,7 @@ public class View extends JFrame implements IView {
startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight);
winPanel.setBounds(0, tableHeight, width, playerPanelHeight);
settingsPanel.setBounds(width / 4, height / 4, width / 2, height / 2);
+ scorePanel.setBounds(width / 8, height / 4, width * 3 / 4, height / 2);
}
@Override
@@ -160,6 +173,11 @@ public class View extends JFrame implements IView {
}
@Override
+ public void showScorePanel(boolean show) {
+ scorePanel.setVisible(show);
+ }
+
+ @Override
public void setCurrentPlayerName(String playerName) {
playerPanel.setCurrentPlayerName(playerName);
startTurnPanel.setCurrentPlayerName(playerName);