All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.objects.acroforms.actions.JavaFX.JavaFXControlListener Maven / Gradle / Ivy

There is a newer version: 20151002
Show newest version
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2015 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
     This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


 *
 * ---------------
 * JavaFXControlListener.java
 * ---------------
 */

package org.jpedal.objects.acroforms.actions.JavaFX;

import java.util.ArrayList;
import java.util.List;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.scene.control.Control;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TouchEvent;

/**
 * Unlike Swing, JavaFX doesn't allow multiple listeners to be attached to the same event.
 * 
 * As such, instead of making an awkward daisy-chain of events in JavaFX form factory,
 * this class will be used to store the events as a single point of entry.
 * 
 * @author Simon
 */
public class JavaFXControlListener {
    private static final boolean debug = false;
    private final Control comp;
    // Event Handlers - Initialised in the constructor
    private final EventHandler mouseHandler;
    private final EventHandler touchHandler;
    private final EventHandler keyHandler;
    private final ChangeListener focusHandler;
    // Note: All the listeners are initialised as needed.
    // Mouse listeners
    private List> pressed;
    private List> clicked;
    private List> released;
    private List> entered;
    private List> exited;
    // Mouse motion listners
    private List> dragged;
    private List> moved;
    // Touch listeners
    private List> touchPressed;
    private List> touchReleased;
    // Key listeners
    private List> keyReleased;
    private List> keyPressed;
    private List> focusEvents;
    
    public JavaFXControlListener(final Control comp){
        this.comp = comp;
        mouseHandler = new EventHandler() {
            @Override public void handle(final MouseEvent event) {
                handleMouseEvent(event);
            }
        };
        touchHandler = new EventHandler() {
            @Override public void handle(final TouchEvent event) {
                handleTouchEvent(event);
            }
        };
        
        keyHandler = new EventHandler() {
            @Override public void handle(final KeyEvent event) {
                handleKeyEvent(event);
            }
        };
        
        focusHandler = new ChangeListener() {
            @Override public void changed(final ObservableValue observable, final Boolean oldValue, final Boolean newValue) {
                handleFocusEvent(observable, oldValue, newValue);
            }
        };
    }
    
    private void handleMouseEvent(final MouseEvent event){
        if(debug) {
            System.out.println("Mouse event - " + event.getEventType().getName());
        }
        
        if(event.getEventType().equals(MouseEvent.MOUSE_CLICKED)){
            executeMouseEvent(clicked, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_ENTERED)){
            executeMouseEvent(entered, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_EXITED)){
            executeMouseEvent(exited, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)){
            executeMouseEvent(pressed, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_RELEASED)){
            executeMouseEvent(released, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_DRAGGED)){
            executeMouseEvent(dragged, event);
        }else if (event.getEventType().equals(MouseEvent.MOUSE_MOVED)){
            executeMouseEvent(moved, event);
        }
    }
    
    private static void executeMouseEvent(final List> events, final MouseEvent mouseEvent){
        if(events != null){
            for(final EventHandler event : events){
                event.handle(mouseEvent);
            }
        }
    }
    
    private void handleTouchEvent(final TouchEvent event){
        if(debug) {
            System.out.println("Touch event - " + event.getEventType().getName());
        }
        
        if(event.getEventType().equals(TouchEvent.TOUCH_PRESSED)){
            executeTouchEvent(touchPressed, event);
        }else if(event.getEventType().equals(TouchEvent.TOUCH_RELEASED)){
            executeTouchEvent(touchReleased, event);
        }
    }
    
    private static void executeTouchEvent(final List> events, final TouchEvent touchEvent){
        if(events != null){
            for(final EventHandler event : events){
                event.handle(touchEvent);
            }
        }
    }
    
    private void handleKeyEvent(final KeyEvent event){
        if(debug) {
            System.out.println("Key Event - " + event.getEventType().getName());
        }
        
        if(event.getEventType().equals(KeyEvent.KEY_PRESSED)){
            executeKeyEvent(keyPressed, event);
        }else if(event.getEventType().equals(KeyEvent.KEY_RELEASED)){
            executeKeyEvent(keyReleased, event);
        }
    }
    
    private static void executeKeyEvent(final List> events, final KeyEvent keyEvent){
        if(events != null){
            for(final EventHandler event : events){
                event.handle(keyEvent);
            }
        }
    }
    
    private void handleFocusEvent(final ObservableValue observable, final Boolean oldValue, final Boolean newValue) {
        if(focusEvents != null){
            for(final ChangeListener event : focusEvents){
                event.changed(observable, oldValue, newValue);
            }
        }
    }
    
    /**
     * Add a listener to all mouse events
     * @param handler 
     */
    public void addMouseListener(final EventHandler handler){
        addOnMouseClickedListener(handler);
        addOnMouseEnteredListener(handler);
        addOnMouseExitedListener(handler);
        addOnMousePressedListener(handler);
        addOnMouseReleasedListener(handler);
        addOnMouseDraggedListener(handler);
        addOnMouseMovedListener(handler);
    }
    
    public void addOnMouseClickedListener(final EventHandler handler){
        if(clicked == null){
            clicked = new ArrayList>();
            comp.setOnMouseClicked(mouseHandler);
        }
        clicked.add(handler);
    }
    
    public void addOnMousePressedListener(final EventHandler handler){
        if(pressed == null){
            pressed = new ArrayList>();
            comp.setOnMousePressed(mouseHandler);
        }
        pressed.add(handler);
    }
    
    public void addOnMouseReleasedListener(final EventHandler handler){
        if(released == null){
            released = new ArrayList>();
            comp.setOnMouseReleased(mouseHandler);
        }
        released.add(handler);
    }
    
    public void addOnMouseEnteredListener(final EventHandler handler){
        if(entered == null){
            entered = new ArrayList>();
            comp.setOnMouseEntered(mouseHandler);
        }
        entered.add(handler);
    }
    
    public void addOnMouseExitedListener(final EventHandler handler){
        if(exited == null){
            exited = new ArrayList>();
            comp.setOnMouseExited(mouseHandler);
        }
        exited.add(handler);
    }
    
    public void addOnMouseDraggedListener(final EventHandler handler){
        if(dragged == null){
            dragged = new ArrayList>();
            comp.setOnMouseExited(mouseHandler);
        }
        dragged.add(handler);
    }
    
    public void addOnMouseMovedListener(final EventHandler handler){
        if(moved == null){
            moved = new ArrayList>();
            comp.setOnMouseExited(mouseHandler);
        }
        moved.add(handler);
    }
    
    
    
    public void addOnTouchPressedListener(final EventHandler handler){
        if(touchPressed == null){
            touchPressed = new ArrayList>();
            comp.setOnTouchPressed(touchHandler);
        }
        touchPressed.add(handler);
    }
    
    public void addOnTouchReleasedListener(final EventHandler handler){
        if(touchReleased == null){
            touchReleased = new ArrayList>();
            comp.setOnTouchReleased(touchHandler);
        }
        touchReleased.add(handler);
    }
    
    
    
    public void addKeyListener(final EventHandler handler){
        addOnKeyPressedListener(handler);
        addOnKeyReleasedListener(handler);
    }
    
    public void addOnKeyReleasedListener(final EventHandler handler){
        if(keyReleased == null){
            keyReleased = new ArrayList>();
            comp.setOnKeyReleased(keyHandler);
        }
        keyReleased.add(handler);
    }
    
    public void addOnKeyPressedListener(final EventHandler handler){
        if(keyPressed == null){
            keyPressed = new ArrayList>();
            comp.setOnKeyPressed(keyHandler);
        }
        keyPressed.add(handler);
    }
    
    public void addFocusEvent(final ChangeListener handler){
        if(focusEvents == null){
            focusEvents = new ArrayList>();
            comp.focusedProperty().addListener(focusHandler);
        }
        focusEvents.add(handler);
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy