/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* SimpleSingleSelectionListener.java
*
* Created on 8. M\u00E4rz 2005, 15:24
*/
package de.cismet.cismap.commons.gui.piccolo.eventlistener;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolox.event.PNotificationCenter;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import de.cismet.cismap.commons.features.XStyledFeature;
import de.cismet.cismap.commons.gui.MappingComponent;
import de.cismet.cismap.commons.gui.piccolo.PFeature;
import de.cismet.cismap.commons.tools.PFeatureTools;
/**
* DOCUMENT ME!
*
* @author hell
* @version $Revision$, $Date$
*/
public class SimpleSingleSelectionListener extends PBasicInputEventHandler {
//~ Static fields/initializers ---------------------------------------------
public static final String SELECTION_CHANGED_NOTIFICATION = "SELECTION_CHANGED_NOTIFICATION"; // NOI18N
//~ Instance fields --------------------------------------------------------
PFeature sel = null;
MappingComponent mc = null;
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private int clickCount = 0;
//~ Methods ----------------------------------------------------------------
// Selektiere einen PNode
@Override
public void mouseClicked(final edu.umd.cs.piccolo.event.PInputEvent pInputEvent) {
if (log.isDebugEnabled()) {
log.debug("mouseClicked():" + pInputEvent.getPickedNode()); // NOI18N
}
final Object o = PFeatureTools.getFirstValidObjectUnderPointer(pInputEvent, new Class[] { PFeature.class });
clickCount = pInputEvent.getClickCount();
if (pInputEvent.getComponent() instanceof MappingComponent) {
mc = (MappingComponent)pInputEvent.getComponent();
}
if (pInputEvent.getButton() == 3) {
if (log.isDebugEnabled()) {
log.debug("right mouseclick"); // NOI18N
}
if ((o instanceof PFeature) && (((PFeature)o).getFeature() instanceof XStyledFeature)) {
final XStyledFeature xf = (XStyledFeature)((PFeature)o).getFeature();
if (log.isDebugEnabled()) {
log.debug("valid object under pointer"); // NOI18N
}
final JPopupMenu popup = new JPopupMenu(org.openide.util.NbBundle.getMessage(
SimpleSingleSelectionListener.class,
"SimpleSingleSelectionListener.popup.text")); // NOI18N
final JMenuItem m = new JMenuItem(org.openide.util.NbBundle.getMessage(
SimpleSingleSelectionListener.class,
"SimpleSingleSelectionListener.m.text")); // NOI18N
m.setIcon(xf.getIconImage());
popup.add(m);
popup.show(
mc,
(int)pInputEvent.getCanvasPosition().getX(),
(int)pInputEvent.getCanvasPosition().getY());
}
} else {
if (o instanceof PFeature) {
super.mouseClicked(pInputEvent);
sel = (PFeature)o;
postSelectionChanged();
}
// else if(o instanceof ParentNodeIsAPFeature && o instanceof PNode) {
// super.mouseClicked(pInputEvent);
// Object test=o;
// do {
// test=((PNode)test).getParent();
// }
// while(!(test instanceof PFeature));
// if (test instanceof PFeature) {
// sel=(PFeature)test;
// }
// postSelectionChanged();
// }
}
}
/**
* DOCUMENT ME!
*/
private void postSelectionChanged() {
final PNotificationCenter pn = PNotificationCenter.defaultCenter();
pn.postNotification(SimpleSingleSelectionListener.SELECTION_CHANGED_NOTIFICATION, this);
if (mc != null) {
if (log.isDebugEnabled()) {
log.debug("unselectAll in postSelectionChanged()"); // NOI18N
}
// mc.getFeatureCollection().unselectAll(); //SINGLE SELECTION
mc.getFeatureCollection().select(sel.getFeature());
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public PFeature getSelectedPFeature() {
return sel;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int getClickCount() {
return clickCount;
}
}