org.jpedal.examples.viewer.commands.javafx.JavaFXTipOfTheDay Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of OpenViewerFX Show documentation
Show all versions of OpenViewerFX Show documentation
An Open Source JavaFX PDF Viewer
/*
* ===========================================
* 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
*
* ---------------
* JavaFXTipOfTheDay.java
* ---------------
*/
package org.jpedal.examples.viewer.commands.javafx;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Random;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Modality;
import org.jpedal.examples.viewer.gui.javafx.dialog.FXDialog;
import org.jpedal.examples.viewer.utils.PropertiesFile;
import org.jpedal.utils.Messages;
/**
* Class which displays the Tip of the Day
* Can be toggled to display on Viewer Startup.
*/
public class JavaFXTipOfTheDay {
private static FXDialog tipOfDayPopup;
private static final List urls = new ArrayList();
private static final BorderPane border = new BorderPane();
private static WebEngine webEngine;
private static int currentTip;
private static final CheckBox show = new CheckBox(Messages.getMessage("PdfViewerTipOfDay.Show"));
public static void execute(final Object[] args, final PropertiesFile properties) {
if (args == null) {
try {
populateTipsList("/org/jpedal/examples/viewer/res/tips");
} catch (final IOException ex) {
ex.printStackTrace();
}
getTip( properties);
} else {
}
}
private static void getTip (final PropertiesFile properties){
setupStage();
bottomButtons();
// Code to Handle Auto Startup.
final String propValue = properties.getValue("displaytipsonstartup");
if(!propValue.isEmpty()) {
show.setSelected(propValue.equals("true"));
}
show.setOnAction(new EventHandler(){
@Override
public void handle(final ActionEvent e) {
properties.setValue("displaytipsonstartup", String.valueOf(show.isSelected()));
}
});
tipOfDayPopup.show();
}
private static void setupStage(){
// Setup the Main Stage.
tipOfDayPopup = new FXDialog(null, Modality.APPLICATION_MODAL, border, 500, 400);
tipOfDayPopup.setTitle(Messages.getMessage("PdfCustomGui.Tipoftheday"));
// Setup Did You Know Top Element.
final HBox titleBar = new HBox();
final Label title = new Label(Messages.getMessage("PdfViewerTipOfDay.DidYouKnow"), new ImageView(new Image("/org/jpedal/examples/viewer/res/tip.png")));
titleBar.getChildren().addAll(title);
titleBar.setPadding(new Insets(10,0,20,10));
border.setTop(titleBar);
// Setup the Default WebView.
final VBox middle = new VBox();
final Random r = new Random();
currentTip = r.nextInt(urls.size());
final WebView centerTip = new WebView();
webEngine = centerTip.getEngine();
final URL tip = JavaFXTipOfTheDay.class.getResource("/org/jpedal/examples/viewer/res/tips/apps/javabean.html");
webEngine.load(tip.toExternalForm());
middle.getChildren().addAll(centerTip);
middle.setAlignment(Pos.CENTER);
middle.setPadding(new Insets(0,10,20,10));
border.setCenter(middle);
}
/**
* Sets up the Bottom Buttons.
*/
private static void bottomButtons (){
// Setup the Next Button.
final HBox bottomButtons = new HBox();
final Button nextTip = new Button (Messages.getMessage("PdfViewerTipOfDay.Next"));
nextTip.setOnAction(new EventHandler() {
@Override
public void handle(final javafx.event.ActionEvent e) {
if(currentTip < urls.size() -1){
currentTip++;
}
else{
currentTip = 0;
}
final URL urlNext = JavaFXTipOfTheDay.class.getResource(urls.get(currentTip));
webEngine.load(urlNext.toExternalForm());
}
});
// Setup the Previous Button.
final Button prevTip = new Button (Messages.getMessage("PdfViewerTipOfDay.Previous"));
prevTip.setOnAction(new EventHandler() {
@Override
public void handle(final javafx.event.ActionEvent e) {
if(currentTip < urls.size() && currentTip > 0){
currentTip--;
}
else{
currentTip = urls.size() -1;
}
final URL urlPrev = JavaFXTipOfTheDay.class.getResource(urls.get(currentTip));
webEngine.load(urlPrev.toExternalForm());
}
});
show.setAlignment(Pos.BOTTOM_LEFT);
show.setPadding(new Insets(0,0,10,10));
final Region space = new Region();
HBox.setHgrow(space, Priority.ALWAYS);
bottomButtons.getChildren().addAll(show, space, prevTip, nextTip);
bottomButtons.setAlignment(Pos.BOTTOM_RIGHT);
bottomButtons.setPadding(new Insets(0,10,10,0));
bottomButtons.setSpacing(10d);
border.setBottom(bottomButtons);
}
/**
* Creates an Array List which holds all of the Tips located in the tips directory.
* @param tipRoot
* @throws IOException
*/
private static void populateTipsList(final String tipRoot) throws IOException {
try {
final URL url = JavaFXTipOfTheDay.class.getResource(tipRoot);
// allow for it in jar
if(url.toString().startsWith("jar")){
final JarURLConnection conn = (JarURLConnection) url.openConnection();
final JarFile jar = conn.getJarFile();
for (final Enumeration e = jar.entries(); e.hasMoreElements();) {
final JarEntry entry = e.nextElement();
final String name=entry.getName();
if ((!entry.isDirectory()) && name.contains("/res/tips/") && name.endsWith(".html")) { // this
urls.add('/' + name);
}
}
}else{ //IDE
final BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.indexOf('.') == -1) { // this is a directory
populateTipsList(tipRoot + '/' + inputLine);
} else if ((inputLine.endsWith(".htm")) || inputLine.endsWith(".html")) { // this is a file
urls.add(tipRoot + '/' + inputLine);
}
}
in.close();
}
} catch (final IOException e) {
throw e;
}
}
}