Added card enter/exit event notifications.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3196 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Andrzej Kapolka
2004-11-02 01:44:32 +00:00
parent c4eb1457dd
commit a6ffa4dd01
2 changed files with 121 additions and 54 deletions
@@ -1,5 +1,5 @@
// //
// $Id: CardPanel.java,v 1.5 2004/10/29 00:41:50 andrzej Exp $ // $Id: CardPanel.java,v 1.6 2004/11/02 01:44:32 andrzej Exp $
// //
// Narya library - tools for developing networked games // Narya library - tools for developing networked games
// Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved // Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved
@@ -73,6 +73,44 @@ public abstract class CardPanel extends VirtualMediaPanel
protected MouseEvent _me; protected MouseEvent _me;
} }
/** Calls CardSpriteObserver.cardSpriteEntered. */
protected static class CardSpriteEnteredOp implements ObserverList.ObserverOp
{
public CardSpriteEnteredOp (CardSprite sprite, MouseEvent me)
{
_sprite = sprite;
_me = me;
}
public boolean apply (Object observer)
{
((CardSpriteObserver)observer).cardSpriteEntered(_sprite, _me);
return true;
}
protected CardSprite _sprite;
protected MouseEvent _me;
}
/** Calls CardSpriteObserver.cardSpriteExited. */
protected static class CardSpriteExitedOp implements ObserverList.ObserverOp
{
public CardSpriteExitedOp (CardSprite sprite, MouseEvent me)
{
_sprite = sprite;
_me = me;
}
public boolean apply (Object observer)
{
((CardSpriteObserver)observer).cardSpriteExited(_sprite, _me);
return true;
}
protected CardSprite _sprite;
protected MouseEvent _me;
}
/** Calls CardSpriteObserver.cardSpriteDragged. */ /** Calls CardSpriteObserver.cardSpriteDragged. */
protected static class CardSpriteDraggedOp implements ObserverList.ObserverOp protected static class CardSpriteDraggedOp implements ObserverList.ObserverOp
{ {
@@ -122,6 +160,51 @@ public abstract class CardPanel extends VirtualMediaPanel
MouseAdapter ma = new MouseAdapter() { MouseAdapter ma = new MouseAdapter() {
public void mousePressed (MouseEvent me) { public void mousePressed (MouseEvent me) {
if(_activeSprite instanceof CardSprite) {
_handleX = _activeSprite.getX() - me.getX();
_handleY = _activeSprite.getY() - me.getY();
_hasBeenDragged = false;
} else if (_activeSprite instanceof ButtonSprite) {
ButtonSprite bs = (ButtonSprite)_activeSprite;
if(bs.isEnabled()) {
bs.setPressed(true);
}
}
}
public void mouseReleased (MouseEvent me) {
if (_activeSprite instanceof CardSprite && _hasBeenDragged) {
_activeSprite.queueNotification(
new CardSpriteDraggedOp((CardSprite)_activeSprite, me)
);
} else if(_activeSprite instanceof ButtonSprite) {
ButtonSprite bs = (ButtonSprite)_activeSprite;
if (bs.isPressed()) {
CommandEvent ce = new CommandEvent(CardPanel.this, bs.getActionCommand(),
bs.getCommandArgument(), me.getWhen(), me.getModifiers());
bs.queueNotification(
new ButtonSpriteClickedOp(bs, ce));
Controller.postAction(ce);
bs.setPressed(false);
}
}
}
public void mouseClicked (MouseEvent me) {
if (_activeSprite instanceof CardSprite) {
_activeSprite.queueNotification(
new CardSpriteClickedOp((CardSprite)_activeSprite, me)
);
}
}
};
addMouseListener(ma);
MouseMotionAdapter mma = new MouseMotionAdapter() {
public void mouseMoved (MouseEvent me)
{
Sprite newActiveSprite = null;
ArrayList al = new ArrayList(); ArrayList al = new ArrayList();
_spritemgr.getHitSprites(al, me.getX(), me.getY()); _spritemgr.getHitSprites(al, me.getX(), me.getY());
@@ -140,70 +223,36 @@ public abstract class CardPanel extends VirtualMediaPanel
} }
} }
_activeSprite = highestSprite; newActiveSprite = highestSprite;
if (_activeSprite != null) {
if(_activeSprite instanceof CardSprite) {
_handleX = _activeSprite.getX() - me.getX();
_handleY = _activeSprite.getY() - me.getY();
_hasBeenDragged = false;
} else if (_activeSprite instanceof ButtonSprite) {
ButtonSprite bs = (ButtonSprite)_activeSprite;
if(bs.isEnabled()) {
bs.setPressed(true);
}
}
}
} }
else {
_activeSprite = null; if (newActiveSprite != _activeSprite) {
} if (_activeSprite instanceof CardSprite) {
} _activeSprite.queueNotification(
public void mouseReleased (MouseEvent me) { new CardSpriteExitedOp((CardSprite)_activeSprite, me)
if (_activeSprite instanceof CardSprite && _hasBeenDragged) { );
_activeSprite.queueNotification( } else if (_activeSprite instanceof ButtonSprite) {
new CardSpriteDraggedOp((CardSprite)_activeSprite, me) ((ButtonSprite)_activeSprite).setPressed(false);
);
} else if(_activeSprite instanceof ButtonSprite) {
ButtonSprite bs = (ButtonSprite)_activeSprite;
if (bs.isEnabled()) {
CommandEvent ce = new CommandEvent(CardPanel.this, bs.getActionCommand(),
bs.getCommandArgument(), me.getWhen(), me.getModifiers());
bs.queueNotification(
new ButtonSpriteClickedOp(bs, ce));
Controller.postAction(ce);
} }
bs.setPressed(false); if (newActiveSprite instanceof CardSprite) {
_activeSprite = null; newActiveSprite.queueNotification(
new CardSpriteEnteredOp((CardSprite)newActiveSprite, me)
);
}
_activeSprite = newActiveSprite;
} }
} }
public void mouseClicked (MouseEvent me) {
if (_activeSprite instanceof CardSprite) {
_activeSprite.queueNotification(
new CardSpriteClickedOp((CardSprite)_activeSprite, me)
);
}
}
};
addMouseListener(ma);
MouseMotionAdapter mma = new MouseMotionAdapter() {
public void mouseDragged (MouseEvent me) public void mouseDragged (MouseEvent me)
{ {
mouseMoved(me);
if (_activeSprite instanceof CardSprite && if (_activeSprite instanceof CardSprite &&
((CardSprite)_activeSprite).isDraggable()) { ((CardSprite)_activeSprite).isDraggable()) {
_activeSprite.setLocation( _activeSprite.setLocation(
me.getX() + _handleX, me.getX() + _handleX,
me.getY() + _handleY me.getY() + _handleY
); );
_hasBeenDragged = true; _hasBeenDragged = true;
} else if (_activeSprite instanceof ButtonSprite &&
!_activeSprite.contains(me.getX(), me.getY())) {
((ButtonSprite)_activeSprite).setPressed(false);
_activeSprite = null;
} }
} }
}; };
@@ -1,5 +1,5 @@
// //
// $Id: CardSpriteObserver.java,v 1.2 2004/10/15 00:14:23 andrzej Exp $ // $Id: CardSpriteObserver.java,v 1.3 2004/11/02 01:44:32 andrzej Exp $
// //
// Narya library - tools for developing networked games // Narya library - tools for developing networked games
// Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved // Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved
@@ -36,6 +36,24 @@ public interface CardSpriteObserver
*/ */
public void cardSpriteClicked (CardSprite sprite, MouseEvent me); public void cardSpriteClicked (CardSprite sprite, MouseEvent me);
/**
* Notifies the observer that the user moved the mouse pointer onto
* a card sprite.
*
* @param sprite the entered sprite
* @param me the mouse event associated with the entrance
*/
public void cardSpriteEntered (CardSprite sprite, MouseEvent me);
/**
* Notifies the observer that the user moved the mouse pointer off of
* a card sprite.
*
* @param sprite the exited the sprite
* @param me the mouse event associated with the exit
*/
public void cardSpriteExited (CardSprite sprite, MouseEvent me);
/** /**
* Notifies the observer that the user dragged a card sprite to a new * Notifies the observer that the user dragged a card sprite to a new
* location. * location.