summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/view/impl/AbstractStonePanel.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/AbstractStonePanel.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/AbstractStonePanel.java')
-rw-r--r--src/jrummikub/view/impl/AbstractStonePanel.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/jrummikub/view/impl/AbstractStonePanel.java b/src/jrummikub/view/impl/AbstractStonePanel.java
new file mode 100644
index 0000000..8ab18d8
--- /dev/null
+++ b/src/jrummikub/view/impl/AbstractStonePanel.java
@@ -0,0 +1,82 @@
+package jrummikub.view.impl;
+
+import java.awt.Insets;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JPanel;
+
+import jrummikub.model.Position;
+import jrummikub.util.Event2;
+import jrummikub.view.IClickable;
+
+/**
+ * Base class for panels that draw stones
+ */
+@SuppressWarnings("serial")
+abstract class AbstractStonePanel extends JPanel implements IClickable {
+ private StonePainter stonePainter;
+
+ private Event2<Position, Boolean> clickEvent = new Event2<Position, Boolean>();
+ private Event2<Position, Boolean> rangeClickEvent = new Event2<Position, Boolean>();
+ private Event2<Position, Boolean> setClickEvent = new Event2<Position, Boolean>();
+
+ /**
+ * @return the stone painter
+ */
+ protected StonePainter getStonePainter() {
+ return stonePainter;
+ }
+
+ /**
+ * Create a new StonePanel with default scale factor
+ */
+ public AbstractStonePanel() {
+ this(1);
+ }
+
+ /**
+ * Create a new StonePanel with a given scale factor
+ *
+ * @param scale
+ * the grid scale
+ */
+ public AbstractStonePanel(float scale) {
+ super(true); // Set double buffered
+
+ stonePainter = new StonePainter(scale);
+
+ addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ Insets insets = getInsets();
+ Event2<Position, Boolean> event = clickEvent;
+
+ if (e.isShiftDown())
+ event = rangeClickEvent;
+ else if (e.getClickCount() >= 2)
+ event = setClickEvent;
+
+ event.fire(
+ stonePainter.calculatePosition(e.getX() - insets.left, e.getY()
+ - insets.top), e.isControlDown());
+ }
+ });
+ }
+
+ @Override
+ public Event2<Position, Boolean> getClickEvent() {
+ return clickEvent;
+ }
+
+ @Override
+ public Event2<Position, Boolean> getRangeClickEvent() {
+ return rangeClickEvent;
+ }
+
+ @Override
+ public Event2<Position, Boolean> getSetClickEvent() {
+ return setClickEvent;
+ }
+
+}