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

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

/*
 * ===========================================
 * 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-2017 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