summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view/impl/TablePanel.java
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-05-03 16:03:09 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-05-03 16:03:09 +0200
commit3e257e3979f1f58d8b5ceb7a2d4472201bb94c34 (patch)
treee5c737e91fb6ce740367f31a6aaee9a3995221cd /src/jrummikub/view/impl/TablePanel.java
parente7b428c01986dd288c548f7daf86834ff12e4a2d (diff)
downloadJRummikub-3e257e3979f1f58d8b5ceb7a2d4472201bb94c34.tar
JRummikub-3e257e3979f1f58d8b5ceb7a2d4472201bb94c34.zip
Renamed everything in the view
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@75 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/view/impl/TablePanel.java')
-rw-r--r--src/jrummikub/view/impl/TablePanel.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/jrummikub/view/impl/TablePanel.java b/src/jrummikub/view/impl/TablePanel.java
new file mode 100644
index 0000000..b02a9a9
--- /dev/null
+++ b/src/jrummikub/view/impl/TablePanel.java
@@ -0,0 +1,171 @@
+package jrummikub.view.impl;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.RenderingHints;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import jrummikub.model.Position;
+import jrummikub.model.Stone;
+import jrummikub.model.StoneSet;
+import jrummikub.view.IStoneCollectionPanel;
+import jrummikub.view.ITablePanel;
+
+/**
+ * The implementation of the table
+ */
+@SuppressWarnings("serial")
+class TablePanel extends AbstractStonePanel implements ITablePanel {
+ private final static ImageIcon background = new ImageIcon(
+ HandPanel.class.getResource("/jrummikub/resource/felt.png"));
+
+ private final static float DEFAULT_SCALE = 1;
+ private final int COLLECTION_GAP = 5;
+
+ private JLabel leftPlayerLabel, topPlayerLabel, rightPlayerLabel;
+ private StoneCollectionPanel stoneCollection;
+
+ private Map<StoneSet, Position> stoneSets = Collections.emptyMap();
+ private Collection<Stone> selectedStones = Collections.emptyList();
+
+ @Override
+ public void setLeftPlayerName(String playerName) {
+ leftPlayerLabel.setText(playerName);
+ }
+
+ @Override
+ public void setTopPlayerName(String playerName) {
+ topPlayerLabel.setText(playerName);
+ }
+
+ @Override
+ public void setRightPlayerName(String playerName) {
+ rightPlayerLabel.setText(playerName);
+ }
+
+ @Override
+ public void setStoneSets(Map<StoneSet, Position> stoneSets) {
+ this.stoneSets = stoneSets;
+ repaint();
+ }
+
+ @Override
+ public IStoneCollectionPanel getStoneCollectionPanel() {
+ return stoneCollection;
+ }
+
+ /**
+ * Sets the currently selected stones
+ *
+ * @param stones
+ * the selected stones
+ */
+ void setSelectedStones(Collection<Stone> stones) {
+ selectedStones = stones;
+ stoneCollection.setSelectedStones(stones);
+ repaint();
+ }
+
+ private void rescale() {
+ Insets insets = getInsets();
+ int x = insets.left, y = insets.top, width = getWidth() - insets.left
+ - insets.right, height = getHeight() - insets.top - insets.bottom;
+
+ leftPlayerLabel.setBounds(x, y, width, height);
+ topPlayerLabel.setBounds(x, y, width, height);
+ rightPlayerLabel.setBounds(x, y, width, height);
+
+ stoneCollection.setLocation(x + width / 2 - stoneCollection.getWidth() / 2,
+ y + height - stoneCollection.getHeight() - COLLECTION_GAP);
+ }
+
+ /**
+ * Creates a new Table instance
+ */
+ TablePanel() {
+ super(DEFAULT_SCALE);
+
+ setLayout(null);
+
+ leftPlayerLabel = new JLabel();
+ leftPlayerLabel.setForeground(Color.WHITE);
+ leftPlayerLabel.setHorizontalAlignment(JLabel.LEFT);
+ leftPlayerLabel.setHorizontalTextPosition(JLabel.LEFT);
+ add(leftPlayerLabel);
+
+ topPlayerLabel = new JLabel();
+ topPlayerLabel.setHorizontalAlignment(JLabel.CENTER);
+ topPlayerLabel.setHorizontalTextPosition(JLabel.CENTER);
+ topPlayerLabel.setVerticalAlignment(JLabel.TOP);
+ topPlayerLabel.setVerticalTextPosition(JLabel.TOP);
+ topPlayerLabel.setForeground(Color.WHITE);
+ add(topPlayerLabel);
+
+ rightPlayerLabel = new JLabel();
+ rightPlayerLabel.setForeground(Color.WHITE);
+ rightPlayerLabel.setHorizontalAlignment(JLabel.RIGHT);
+ rightPlayerLabel.setHorizontalTextPosition(JLabel.RIGHT);
+ add(rightPlayerLabel);
+
+ stoneCollection = new StoneCollectionPanel();
+ add(stoneCollection);
+
+ ComponentListener rescaleListener = new ComponentAdapter() {
+ @Override
+ public void componentResized(ComponentEvent e) {
+ rescale();
+ }
+ };
+
+ addComponentListener(rescaleListener);
+ stoneCollection.addComponentListener(rescaleListener);
+ }
+
+ private void paintStoneSet(Graphics2D g, StoneSet stoneSet, Position pos) {
+ float x = pos.getX();
+ int width = getStonePainter().getStoneWidth(), height = getStonePainter()
+ .getStoneHeight();
+
+ g.setColor(new Color(0, 0, 0, 0.25f));
+ g.fillRect((int) (x * width) - width / 4, (int) (pos.getY() * height),
+ width / 4, height);
+
+ for (Stone stone : stoneSet) {
+ getStonePainter().paintStone(g, stone, new Position(x, pos.getY()),
+ selectedStones.contains(stone));
+ x++;
+ }
+
+ g.setColor(new Color(0, 0, 0, 0.25f));
+ g.fillRect((int) (x * width), (int) (pos.getY() * height), width / 4,
+ height);
+ }
+
+ @Override
+ protected void paintComponent(Graphics g1) {
+ Graphics2D g = (Graphics2D) g1;
+
+ for (int x = 0; x < getWidth(); x += background.getIconWidth()) {
+ for (int y = 0; y < getHeight(); y += background.getIconHeight()) {
+ background.paintIcon(this, g, x, y);
+ }
+ }
+
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+
+ for (Map.Entry<StoneSet, Position> stoneSet : stoneSets.entrySet()) {
+ paintStoneSet(g, stoneSet.getKey(), stoneSet.getValue());
+ }
+ }
+}