From 1607d0a087abc94964595a5363c4f2ea7e44f2bf Mon Sep 17 00:00:00 2001 From: nathan Date: Wed, 19 Aug 2015 02:25:38 +0200 Subject: [PATCH] Updated license info --- .../dorkbox/util/javafx/StageViaSwing.java | 89 ++++++++++++++++--- .../src/dorkbox/util/javafx/Wizard.java | 41 +++++---- .../src/dorkbox/util/javafx/WizardPage.java | 43 ++++++++- 3 files changed, 143 insertions(+), 30 deletions(-) diff --git a/Dorkbox-Util/src/dorkbox/util/javafx/StageViaSwing.java b/Dorkbox-Util/src/dorkbox/util/javafx/StageViaSwing.java index cf2a995..1a3eda7 100644 --- a/Dorkbox-Util/src/dorkbox/util/javafx/StageViaSwing.java +++ b/Dorkbox-Util/src/dorkbox/util/javafx/StageViaSwing.java @@ -1,3 +1,18 @@ +/* + * Copyright 2015 dorkbox, llc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package dorkbox.util.javafx; import com.sun.javafx.application.PlatformImpl; @@ -23,6 +38,7 @@ import java.util.concurrent.CountDownLatch; /** * This class is necessary, because JavaFX stage is crap on linux. This offers sort-of the same functionality, but via swing instead. + * Annoying caveat. All swing setters MUST happen on the EDT. */ public class StageViaSwing { @@ -30,6 +46,9 @@ class StageViaSwing { final JFXPanel panel; private boolean inNestedEventLoop = false; + private final CountDownLatch showlatch = new CountDownLatch(1); + private final CountDownLatch showAndWaitlatch = new CountDownLatch(1); + final WritableValue opacityProperty; @@ -69,6 +88,8 @@ class StageViaSwing { }); } + private boolean center = false; + private StageViaSwing() { @@ -91,7 +112,7 @@ class StageViaSwing { @Override public void setValue(Float value) { - frame.setOpacity(value); + SwingUtil.invokeLater(() -> frame.setOpacity(value)); } }; @@ -106,13 +127,24 @@ class StageViaSwing { Thread.sleep(500); sizeToScene(); - SwingUtil.showOnSameScreenAsMouseCenter(frame); + + if (center) { + SwingUtil.invokeAndWait(() -> SwingUtil.showOnSameScreenAsMouseCenter(frame)); + } Timeline timeline = new Timeline(); timeline.setCycleCount(1); timeline.getKeyFrames() .addAll(new KeyFrame(Duration.millis(700), new KeyValue(opacityProperty, 1F, Interpolator.EASE_OUT))); + timeline.setOnFinished(event -> { + if (inNestedEventLoop) { + inNestedEventLoop= false; + com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop(StageViaSwing.this, null); + } else { + showlatch.countDown(); + } + }); timeline.play(); } catch(InterruptedException ignored) { } @@ -126,7 +158,7 @@ class StageViaSwing { public void setTitle(final String title) { - frame.setTitle(title); + SwingUtil.invokeAndWait(() -> frame.setTitle(title)); } public @@ -136,11 +168,12 @@ class StageViaSwing { public void close() { - SwingUtil.invokeAndWait(() -> frame.dispose()); + SwingUtil.invokeAndWait(frame::dispose); if (inNestedEventLoop) { + inNestedEventLoop= false; com.sun.javafx.tk.Toolkit.getToolkit().exitNestedEventLoop(this, null); } else { - latch.countDown(); + showAndWaitlatch.countDown(); } } @@ -159,9 +192,6 @@ class StageViaSwing { SwingUtil.invokeAndWait(() -> frame.setIconImage(icon)); } - private final - CountDownLatch latch = new CountDownLatch(1); - public void show() { SwingUtil.invokeAndWait(() -> { @@ -179,18 +209,33 @@ class StageViaSwing { sizeToScene(); SwingUtil.invokeAndWait(() -> frame.setVisible(true)); + + // false-positive + //noinspection Duplicates + if (Platform.isFxApplicationThread()) { + inNestedEventLoop = true; + com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop(this); + } else { + try { + showlatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } public void showAndWait() { show(); + // false-positive + //noinspection Duplicates if (Platform.isFxApplicationThread()) { inNestedEventLoop = true; com.sun.javafx.tk.Toolkit.getToolkit().enterNestedEventLoop(this); } else { try { - latch.await(); + showAndWaitlatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } @@ -226,11 +271,7 @@ class StageViaSwing { method.invoke(scene); // must be on the EDT - SwingUtil.invokeAndWait(() -> { - frame.setSize((int)scene.getWidth(), (int)scene.getHeight()); - }); - - + SwingUtil.invokeAndWait(() -> frame.setSize((int)scene.getWidth(), (int)scene.getHeight())); } catch (InvocationTargetException | IllegalAccessException e) { e.printStackTrace(); } @@ -251,4 +292,24 @@ class StageViaSwing { WritableValue getOpacityProperty() { return opacityProperty; } + + public + void setLocation(final double anchorX, final double anchorY) { + SwingUtil.invokeAndWait(() -> frame.setLocation((int)anchorX, (int)anchorY)); + } + + public + Point getLocation() { + return frame.getLocation(); + } + + public + void center() { + this.center = true; + } + + public + Dimension getSize() { + return frame.getSize(); + } } diff --git a/Dorkbox-Util/src/dorkbox/util/javafx/Wizard.java b/Dorkbox-Util/src/dorkbox/util/javafx/Wizard.java index 995355a..e98f9ff 100644 --- a/Dorkbox-Util/src/dorkbox/util/javafx/Wizard.java +++ b/Dorkbox-Util/src/dorkbox/util/javafx/Wizard.java @@ -26,6 +26,19 @@ * * * MODIFIED BY DORKBOX + * Copyright 2015 dorkbox, llc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package dorkbox.util.javafx; @@ -195,6 +208,8 @@ public class Wizard { */ public Wizard(String title) { + stage.center(); + stage.initModality(java.awt.Dialog.ModalExclusionType.APPLICATION_EXCLUDE); setTitle(title); @@ -656,29 +671,25 @@ public class Wizard { .addAll(new KeyFrame(Duration.millis(200), new KeyValue(stage.getOpacityProperty(), 0F, Interpolator.EASE_OUT))); - timeline.setOnFinished(event -> { - currentPage.ifPresent(currentPage -> { - refreshCurrentPage(stage, currentPage); + timeline.setOnFinished(event -> currentPage.ifPresent(currentPage -> { + refreshCurrentPage(stage, currentPage); - SwingUtil.invokeAndWait(() -> SwingUtil.showOnSameScreenAsMouseCenter(stage.frame)); + SwingUtil.invokeAndWait(() -> SwingUtil.showOnSameScreenAsMouseCenter(stage.frame)); - Timeline timeline2 = new Timeline(); - timeline2.setCycleCount(1); - timeline2.getKeyFrames() - .addAll(new KeyFrame(Duration.millis(500), - new KeyValue(stage.getOpacityProperty(), 1F, Interpolator.EASE_OUT))); - timeline2.play(); - }); - } + Timeline timeline2 = new Timeline(); + timeline2.setCycleCount(1); + timeline2.getKeyFrames() + .addAll(new KeyFrame(Duration.millis(500), + new KeyValue(stage.getOpacityProperty(), 1F, Interpolator.EASE_OUT))); + timeline2.play(); + }) ); sequentialTransition.getChildren().add(timeline); }); // only run this if we don't have a prev page, otherwise, we run this at the end of our animation if (!prevPage.isPresent()) { - currentPage.ifPresent(currentPage -> { - refreshCurrentPage(stage, currentPage); - }); + currentPage.ifPresent(currentPage -> refreshCurrentPage(stage, currentPage)); } sequentialTransition.play(); diff --git a/Dorkbox-Util/src/dorkbox/util/javafx/WizardPage.java b/Dorkbox-Util/src/dorkbox/util/javafx/WizardPage.java index fdb38d0..3339db2 100644 --- a/Dorkbox-Util/src/dorkbox/util/javafx/WizardPage.java +++ b/Dorkbox-Util/src/dorkbox/util/javafx/WizardPage.java @@ -1,7 +1,48 @@ +/** + * Copyright (c) 2014, 2015 ControlsFX + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of ControlsFX, any associated website, nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL CONTROLSFX BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * MODIFIED BY DORKBOX + * Copyright 2015 dorkbox, llc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package dorkbox.util.javafx; import dorkbox.util.JavaFxUtil; -import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty;