/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2014, Geomatys
*
* 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;
* version 2.1 of the License.
*
* 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.
*/
package org.geotoolkit.gui.javafx.contexttree;
import java.awt.Color;
import java.beans.PropertyChangeEvent;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import org.geotoolkit.font.FontAwesomeIcons;
import org.geotoolkit.font.IconBuilder;
import org.geotoolkit.map.ItemListener;
import org.geotoolkit.map.MapItem;
import org.geotoolkit.map.MapLayer;
import org.geotoolkit.util.collection.CollectionChangeEvent;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class FXMapItemPane extends BorderPane{
public static final Image ICON_VISIBLE = SwingFXUtils.toFXImage(IconBuilder.createImage(FontAwesomeIcons.ICON_EYE, 16, Color.DARK_GRAY),null);
public static final Image ICON_UNVISIBLE = SwingFXUtils.toFXImage(IconBuilder.createImage(FontAwesomeIcons.ICON_EYE_SLASH, 16, Color.LIGHT_GRAY),null);
public static final Image ICON_LEGEND_UP = SwingFXUtils.toFXImage(IconBuilder.createImage(FontAwesomeIcons.ICON_ARROW_CIRCLE_UP, 16, Color.DARK_GRAY),null);
public static final Image ICON_LEGEND_DOWN = SwingFXUtils.toFXImage(IconBuilder.createImage(FontAwesomeIcons.ICON_ARROW_CIRCLE_DOWN, 16, Color.DARK_GRAY),null);
public static final Image ICON_FILTER = SwingFXUtils.toFXImage(IconBuilder.createImage(FontAwesomeIcons.ICON_FILTER, 16, Color.DARK_GRAY),null);
private final MapItem item;
private final FlowPane flow = new FlowPane();
private final TextField uiName = new TextField();
private final Button viewButton = new Button();
private final Button filterButton = new Button("",new ImageView(ICON_FILTER));
private final Button legendButton = new Button("",new ImageView(ICON_LEGEND_UP));
private final ImageView legend = new ImageView();
public FXMapItemPane(MapItem item) {
this.item = item;
//viewButton.getStyleClass().remove("button");
viewButton.setStyle("-fx-background-color: transparent;");
filterButton.setStyle("-fx-background-color: transparent;");
legendButton.setStyle("-fx-background-color: transparent;");
flow.getChildren().add(uiName);
flow.getChildren().add(viewButton);
viewButton.setGraphic(new ImageView(item.isVisible() ? ICON_VISIBLE : ICON_UNVISIBLE));
uiName.setText(item.getName());
//build sub elements
if(!(item instanceof MapLayer)){
final VBox vbox = new VBox();
for(MapItem mi : item.items()){
vbox.getChildren().add(new FXMapItemPane(mi));
}
setCenter(vbox);
}else{
flow.getChildren().add(filterButton);
flow.getChildren().add(legendButton);
setCenter(legend);
}
setTop(flow);
item.addItemListener(new ItemListener() {
@Override
public void itemChange(CollectionChangeEvent<MapItem> event) {}
@Override
public void propertyChange(PropertyChangeEvent evt) {
final String property = evt.getPropertyName();
if(MapItem.VISIBILITY_PROPERTY.equals(property)){
viewButton.setGraphic(new ImageView(item.isVisible() ? ICON_VISIBLE : ICON_UNVISIBLE));
}
}
});
viewButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
item.setVisible(!item.isVisible());
}
});
}
public MapItem getMapItem() {
return item;
}
}