/* * Copyright (c) 2016 by Gerrit Grunwald * * 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 eu.hansolo; import eu.hansolo.medusa.Gauge; import eu.hansolo.medusa.Gauge.KnobType; import eu.hansolo.medusa.Gauge.NeedleShape; import eu.hansolo.medusa.Gauge.NeedleSize; import eu.hansolo.medusa.Gauge.SkinType; import eu.hansolo.medusa.GaugeBuilder; import eu.hansolo.medusa.Section; import eu.hansolo.medusa.TickLabelLocation; import eu.hansolo.medusa.TickLabelOrientation; import eu.hansolo.medusa.TickMarkType; import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.CornerRadii; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import java.util.Random; /** * Created by hansolo on 19.02.16. */ public class MultiGaugeDemo extends Application { private static final Random RND = new Random(); private static int noOfNodes = 0; private MultiGauge gauge; private long lastTimerCall; private AnimationTimer timer; @Override public void init() { gauge = new MultiGauge(); lastTimerCall = System.nanoTime(); timer = new AnimationTimer() { @Override public void handle(long now) { if (now > lastTimerCall + 3_000_000_000l) { gauge.getRpmGauge().setValue(RND.nextDouble() * 4000); gauge.getTempGauge().setValue(RND.nextDouble() * 150 + 100); gauge.getOilGauge().setValue(RND.nextDouble() * 100); lastTimerCall = now; } } }; } @Override public void start(Stage stage) { StackPane pane = new StackPane(gauge); pane.setPadding(new Insets(20)); pane.setBackground(new Background(new BackgroundFill(Gauge.DARK_COLOR, CornerRadii.EMPTY, Insets.EMPTY))); Scene scene = new Scene(pane); stage.setTitle("Medusa MultiGauge"); stage.setScene(scene); stage.show(); timer.start(); // Calculate number of nodes calcNoOfNodes(pane); System.out.println(noOfNodes + " Nodes in SceneGraph"); } @Override public void stop() { System.exit(0); } // ******************** Misc ********************************************** private static void calcNoOfNodes(Node node) { if (node instanceof Parent) { if (((Parent) node).getChildrenUnmodifiable().size() != 0) { ObservableList<Node> tempChildren = ((Parent) node).getChildrenUnmodifiable(); noOfNodes += tempChildren.size(); tempChildren.forEach(n -> calcNoOfNodes(n)); } } } public static void main(String[] args) { launch(args); } }