diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-05-01 00:41:27 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-05-01 00:41:27 +0200 |
commit | 54271eb86d67d1c12f38e1b63cb6c455612f252b (patch) | |
tree | 171aacec0e5b42ccb3479ba3f77986552e874a89 /src/jrummikub/view/impl/StonePanel.java | |
parent | 5e7c489921f3141e62f229646d7f16c7b691be3d (diff) | |
download | JRummikub-54271eb86d67d1c12f38e1b63cb6c455612f252b.tar JRummikub-54271eb86d67d1c12f38e1b63cb6c455612f252b.zip |
Discriminate between different click events
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@44 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/view/impl/StonePanel.java')
-rw-r--r-- | src/jrummikub/view/impl/StonePanel.java | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/jrummikub/view/impl/StonePanel.java b/src/jrummikub/view/impl/StonePanel.java new file mode 100644 index 0000000..9bcffae --- /dev/null +++ b/src/jrummikub/view/impl/StonePanel.java @@ -0,0 +1,62 @@ +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; + +@SuppressWarnings("serial") +abstract class StonePanel 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>(); + + protected StonePainter getStonePainter() { + return stonePainter; + } + + public StonePanel(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; + } + +} |