/***********************************************************************************
*
* Copyright (c) 2014 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.spy.ui.keyboard;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
/**
* This class filters out events that happen too close to each other.
*/
public class TimeBasedKeyEventFilter
{
private final long minimumInterval;
private Map<Object, Long> lastEvents = new HashMap<>();
public TimeBasedKeyEventFilter(final long minimumInterval)
{
this.minimumInterval = minimumInterval;
}
public boolean processEvent(final KeyEvent event)
{
final Long lastEvent = lastEvents.get(event.getCode());
final long now = new Date().getTime();
if (lastEvent != null && lastEvent + minimumInterval > now)
{
return false;
}
lastEvents.put(event.getCode(), now);
return true;
}
public boolean processEvent(final MouseEvent event)
{
final Long lastEvent = lastEvents.get(event.getClickCount());
final long now = new Date().getTime();
if (lastEvent != null && lastEvent + minimumInterval > now)
{
return false;
}
lastEvents.put(event.getClickCount(), now);
return true;
}
}