Search in sources :

Example 11 with TileEvent

use of eu.hansolo.tilesfx.events.TileEvent in project tilesfx by HanSolo.

the class LeaderBoardTileSkin method registerItemListeners.

private void registerItemListeners() {
    tile.getLeaderBoardItems().forEach(item -> {
        item.setFormatString(formatString);
        item.addChartDataEventListener(updateHandler);
        EventHandler<MouseEvent> clickHandler = e -> tile.fireTileEvent(new TileEvent(TileEvent.EventType.SELECTED_CHART_DATA, item.getChartData()));
        handlerMap.put(item, clickHandler);
        item.addEventHandler(MouseEvent.MOUSE_PRESSED, clickHandler);
    });
    tile.getLeaderBoardItems().addListener(new WeakListChangeListener<>((ListChangeListener<LeaderBoardItem>) change -> {
        while (change.next()) {
            if (change.wasPermutated()) {
            } else if (change.wasUpdated()) {
            } else if (change.wasAdded()) {
                change.getAddedSubList().forEach(addedItem -> {
                    addedItem.setFormatString(formatString);
                    addedItem.addChartDataEventListener(updateHandler);
                    EventHandler<MouseEvent> clickHandler = e -> tile.fireTileEvent(new TileEvent(TileEvent.EventType.SELECTED_CHART_DATA, addedItem.getChartData()));
                    handlerMap.put(addedItem, clickHandler);
                    addedItem.addEventHandler(MouseEvent.MOUSE_PRESSED, clickHandler);
                });
            } else if (change.wasRemoved()) {
                change.getRemoved().forEach(removedItem -> {
                    removedItem.removeChartDataEventListener(updateHandler);
                    removedItem.removeEventHandler(MouseEvent.MOUSE_PRESSED, handlerMap.get(removedItem));
                });
            }
        }
    }));
}
Also used : Tile(eu.hansolo.tilesfx.Tile) EventHandler(javafx.event.EventHandler) Fonts(eu.hansolo.tilesfx.fonts.Fonts) MouseEvent(javafx.scene.input.MouseEvent) Font(javafx.scene.text.Font) ChartDataEventListener(eu.hansolo.tilesfx.events.ChartDataEventListener) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) InvalidationListener(javafx.beans.InvalidationListener) Platform(javafx.application.Platform) Text(javafx.scene.text.Text) List(java.util.List) Helper(eu.hansolo.tilesfx.tools.Helper) ListChangeListener(javafx.collections.ListChangeListener) TileEvent(eu.hansolo.tilesfx.events.TileEvent) Map(java.util.Map) WeakListChangeListener(javafx.collections.WeakListChangeListener) Comparator(java.util.Comparator) EventType(eu.hansolo.tilesfx.events.ChartDataEvent.EventType) Pane(javafx.scene.layout.Pane) TileEvent(eu.hansolo.tilesfx.events.TileEvent) MouseEvent(javafx.scene.input.MouseEvent) ListChangeListener(javafx.collections.ListChangeListener) WeakListChangeListener(javafx.collections.WeakListChangeListener)

Example 12 with TileEvent

use of eu.hansolo.tilesfx.events.TileEvent in project tilesfx by HanSolo.

the class WorldMapTileSkin method initGraphics.

// ******************** Initialization ************************************
@Override
protected void initGraphics() {
    super.initGraphics();
    poiLocations = FXCollections.observableHashMap();
    chartDataLocations = FXCollections.observableHashMap();
    handlerMap = new HashMap<>();
    circleHandlerMap = new HashMap<>();
    countryPaths = tile.getCountryPaths();
    String formatString = new StringBuilder("%.").append(tile.getDecimals()).append("f").toString();
    poiListener = new WeakListChangeListener<>(change -> {
        while (change.next()) {
            if (change.wasAdded()) {
                change.getAddedSubList().forEach(addedPoi -> {
                    String tooltipText = new StringBuilder(addedPoi.getName()).append("\n").append(addedPoi.getInfo()).toString();
                    EventHandler<MouseEvent> handler = e -> addedPoi.fireLocationEvent(new LocationEvent(addedPoi));
                    Circle circle = new Circle(3, addedPoi.getColor());
                    Tooltip.install(circle, new Tooltip(tooltipText));
                    circleHandlerMap.put(circle, handler);
                    poiLocations.put(addedPoi, circle);
                    circle.setOnMousePressed(handler);
                    getPane().getChildren().add(circle);
                });
            } else if (change.wasRemoved()) {
                change.getRemoved().forEach(removedPoi -> {
                    if (circleHandlerMap.get(removedPoi) != null) {
                        poiLocations.get(removedPoi).removeEventHandler(MouseEvent.MOUSE_PRESSED, circleHandlerMap.get(removedPoi));
                    }
                    getPane().getChildren().remove(removedPoi);
                });
            }
        }
        resize();
    });
    chartDataListener = new WeakListChangeListener<>(change -> {
        while (change.next()) {
            if (change.wasAdded()) {
                change.getAddedSubList().forEach(addedData -> {
                    String tooltipText = new StringBuilder(addedData.getName()).append("\n").append(String.format(Locale.US, formatString, addedData.getValue())).toString();
                    EventHandler<MouseEvent> handler = e -> tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, addedData));
                    Circle circle = new Circle(3, addedData.getLocation().getColor());
                    Tooltip.install(circle, new Tooltip(tooltipText));
                    circleHandlerMap.put(circle, handler);
                    chartDataLocations.put(addedData.getLocation(), circle);
                    circle.setOnMousePressed(handler);
                    getPane().getChildren().add(circle);
                });
            } else if (change.wasRemoved()) {
                change.getRemoved().forEach(removedData -> {
                    if (circleHandlerMap.get(removedData) != null) {
                        chartDataLocations.get(removedData).removeEventHandler(MouseEvent.MOUSE_PRESSED, circleHandlerMap.get(removedData));
                    }
                    getPane().getChildren().remove(removedData);
                });
            }
        }
        resize();
    });
    tile.getPoiList().forEach(poi -> {
        String tooltipText = new StringBuilder(poi.getName()).append("\n").append(poi.getInfo()).toString();
        Circle circle = new Circle(3, poi.getColor());
        circle.setOnMousePressed(e -> poi.fireLocationEvent(new LocationEvent(poi)));
        Tooltip.install(circle, new Tooltip(tooltipText));
        poiLocations.put(poi, circle);
    });
    tile.getChartData().stream().filter(chartData -> chartData.getLocation() != null).forEach(chartData -> {
        String tooltipText = new StringBuilder(chartData.getName()).append("\n").append(String.format(Locale.US, formatString, chartData.getValue())).toString();
        Circle circle = new Circle(3, chartData.getLocation().getColor());
        circle.setOnMousePressed(e -> tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, chartData)));
        Tooltip.install(circle, new Tooltip(tooltipText));
        chartDataLocations.put(chartData.getLocation(), circle);
    });
    titleText = new Text();
    titleText.setFill(tile.getTitleColor());
    Helper.enableNode(titleText, !tile.getTitle().isEmpty());
    text = new Text(tile.getUnit());
    text.setFill(tile.getUnitColor());
    Helper.enableNode(text, tile.isTextVisible());
    Color fill = tile.getForegroundColor();
    Color stroke = tile.getBackgroundColor();
    worldPane = new Pane();
    countryPaths.forEach((name, pathList) -> {
        Country country = Country.valueOf(name);
        pathList.forEach(path -> {
            path.setFill(null == country.getColor() ? fill : country.getColor());
            path.setStroke(stroke);
            path.setStrokeWidth(0.2);
        });
        worldPane.getChildren().addAll(pathList);
    });
    group = new Group(worldPane);
    getPane().getChildren().addAll(group, titleText, text);
    getPane().getChildren().addAll(chartDataLocations.values());
    getPane().getChildren().addAll(poiLocations.values());
}
Also used : EventHandler(javafx.event.EventHandler) Fonts(eu.hansolo.tilesfx.fonts.Fonts) Location(eu.hansolo.tilesfx.tools.Location) CacheHint(javafx.scene.CacheHint) MouseEvent(javafx.scene.input.MouseEvent) EventType(eu.hansolo.tilesfx.events.TileEvent.EventType) FXCollections(javafx.collections.FXCollections) HashMap(java.util.HashMap) CountryPath(eu.hansolo.tilesfx.tools.CountryPath) ChartData(eu.hansolo.tilesfx.chart.ChartData) Helper(eu.hansolo.tilesfx.tools.Helper) ListChangeListener(javafx.collections.ListChangeListener) Locale(java.util.Locale) Country(eu.hansolo.tilesfx.tools.Country) Map(java.util.Map) Helper.clamp(eu.hansolo.tilesfx.tools.Helper.clamp) Circle(javafx.scene.shape.Circle) Tooltip(javafx.scene.control.Tooltip) Pane(javafx.scene.layout.Pane) Tile(eu.hansolo.tilesfx.Tile) Color(javafx.scene.paint.Color) TextSize(eu.hansolo.tilesfx.Tile.TextSize) Font(javafx.scene.text.Font) ObservableMap(javafx.collections.ObservableMap) Group(javafx.scene.Group) Text(javafx.scene.text.Text) List(java.util.List) TileEvent(eu.hansolo.tilesfx.events.TileEvent) LocationEvent(eu.hansolo.tilesfx.events.LocationEvent) WeakListChangeListener(javafx.collections.WeakListChangeListener) Circle(javafx.scene.shape.Circle) TileEvent(eu.hansolo.tilesfx.events.TileEvent) Group(javafx.scene.Group) Tooltip(javafx.scene.control.Tooltip) Color(javafx.scene.paint.Color) EventHandler(javafx.event.EventHandler) Text(javafx.scene.text.Text) Pane(javafx.scene.layout.Pane) Country(eu.hansolo.tilesfx.tools.Country) LocationEvent(eu.hansolo.tilesfx.events.LocationEvent)

Aggregations

TileEvent (eu.hansolo.tilesfx.events.TileEvent)12 Text (javafx.scene.text.Text)10 ChartData (eu.hansolo.tilesfx.chart.ChartData)9 Tile (eu.hansolo.tilesfx.Tile)8 Fonts (eu.hansolo.tilesfx.fonts.Fonts)8 Helper (eu.hansolo.tilesfx.tools.Helper)8 List (java.util.List)8 EventHandler (javafx.event.EventHandler)8 MouseEvent (javafx.scene.input.MouseEvent)8 Font (javafx.scene.text.Font)8 EventType (eu.hansolo.tilesfx.events.TileEvent.EventType)7 ListChangeListener (javafx.collections.ListChangeListener)6 Color (javafx.scene.paint.Color)6 ChartDataEventListener (eu.hansolo.tilesfx.events.ChartDataEventListener)5 Locale (java.util.Locale)5 Comparator (java.util.Comparator)4 HashMap (java.util.HashMap)4 Map (java.util.Map)4 WeakListChangeListener (javafx.collections.WeakListChangeListener)4 Pane (javafx.scene.layout.Pane)4