diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-05-03 16:03:09 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-05-03 16:03:09 +0200 |
commit | 3e257e3979f1f58d8b5ceb7a2d4472201bb94c34 (patch) | |
tree | e5c737e91fb6ce740367f31a6aaee9a3995221cd /src/jrummikub/view/impl/AbstractStonePanel.java | |
parent | e7b428c01986dd288c548f7daf86834ff12e4a2d (diff) | |
download | JRummikub-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.java | 82 |
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; + } + +} |