use of org.gwtopenmaps.openlayers.client.event.FeatureHighlightedListener in project kapua by eclipse.
the class DevicesMap method placeMarkers.
private void placeMarkers(List<GwtDevice> devices) {
LonLat lonLat = null;
final List<GwtDevice> theDevices = devices;
for (int i = 0; i < devices.size(); i++) {
final GwtDevice theDevice = devices.get(i);
if (theDevice.getGpsLatitude() != null && theDevice.getGpsLongitude() != null) {
StringBuilder sbDeviceTitle = new StringBuilder();
if (theDevice.getDisplayName() != null) {
sbDeviceTitle.append(theDevice.getDisplayName()).append(" (").append(theDevice.getClientId()).append(")");
} else {
sbDeviceTitle.append(theDevice.getClientId());
}
lonLat = new LonLat(theDevice.getGpsLongitude(), theDevice.getGpsLatitude());
lonLat.transform(DEFAULT_PROJECTION.getProjectionCode(), m_map.getProjection());
// lets create a vector point on the location
Style pointStyle = new Style();
pointStyle.setFillOpacity(0.9);
pointStyle.setExternalGraphic("eclipse/org/eclipse/kapua/app/console/icon/device_map.png");
pointStyle.setGraphicSize(37, 34);
pointStyle.setGraphicOffset(-10, -34);
pointStyle.setGraphicName(theDevice.getDisplayName());
Point point = new Point(theDevice.getGpsLongitude(), theDevice.getGpsLatitude());
// transform point to OSM coordinate system
point.transform(DEFAULT_PROJECTION, new Projection(m_map.getProjection()));
VectorFeature pointFeature = new VectorFeature(point, pointStyle);
Attributes attributes = new Attributes();
attributes.setAttribute("deviceIdx", i);
pointFeature.setAttributes(attributes);
m_markerLayer.addFeature(pointFeature);
}
}
// Click SelectFeature and its Options
SelectFeatureOptions clickFeatureOptions = new SelectFeatureOptions();
clickFeatureOptions.onSelect(new SelectFeatureListener() {
@Override
public void onFeatureSelected(VectorFeature theVectorFeature) {
int deviceIdx = theVectorFeature.getAttributes().getAttributeAsInt("deviceIdx");
GwtDevice device = theDevices.get(deviceIdx);
if (device != null) {
m_devicesView.setDevice(device);
}
}
});
SelectFeature clickFeature = new SelectFeature(m_markerLayer, clickFeatureOptions);
clickFeature.setClickOut(true);
clickFeature.setMultiple(false);
// Hover SelectFeature and its Options
SelectFeatureOptions hoverFeatureOptions = new SelectFeatureOptions();
hoverFeatureOptions.setHover();
hoverFeatureOptions.setHighlightOnly(true);
hoverFeatureOptions.setRenderIntent(RenderIntent.DEFAULT);
final SelectFeature hoverFeature = new SelectFeature(m_markerLayer, hoverFeatureOptions);
hoverFeature.setClickOut(true);
hoverFeature.setMultiple(false);
hoverFeature.addFeatureHighlightedListener(new FeatureHighlightedListener() {
@Override
public void onFeatureHighlighted(VectorFeature theVectorFeature) {
int deviceIdx = theVectorFeature.getAttributes().getAttributeAsInt("deviceIdx");
GwtDevice device = theDevices.get(deviceIdx);
if (device != null) {
if (m_popup != null) {
m_map.removePopup(m_popup);
}
LonLat lonLat = theVectorFeature.getCenterLonLat();
m_popup = new AnchoredBubble("marker-info", lonLat, new Size(185, 20), "<p>" + device.getDisplayName() + " (" + device.getClientId() + ")</p>", null, false);
m_map.addPopup(m_popup);
}
}
});
hoverFeature.addFeatureUnhighlightedListener(new FeatureUnhighlightedListener() {
@Override
public void onFeatureUnhighlighted(VectorFeature eventObject) {
if (m_popup != null) {
m_map.removePopup(m_popup);
m_popup = null;
}
hoverFeature.unselectAll(null);
}
});
m_map.addControl(clickFeature);
m_map.addControl(hoverFeature);
hoverFeature.activate();
clickFeature.activate();
// auto-adjust the zoom to show all points
if (m_markerLayer.getDataExtent() != null) {
m_map.zoomToExtent(m_markerLayer.getDataExtent());
} else {
m_map.zoomTo(1);
}
}
Aggregations