diff options
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; + } + +} |