/* * 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.style; import java.awt.GraphicsEnvironment; import java.util.Arrays; import java.util.List; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.control.SpinnerValueFactory; import org.geotoolkit.filter.DefaultLiteral; import org.geotoolkit.map.MapLayer; import org.opengis.filter.expression.Expression; import org.opengis.filter.expression.Literal; import org.opengis.style.Font; /** * * @author Johann Sorel (Geomatys) */ public class FXFont extends FXStyleElementController<Font>{ @FXML protected FXNumberExpression uiSize; @FXML protected FXFontWeigthExpression uiWeight; @FXML protected FXFontStyleExpression uiStyle; @FXML protected FXListExpression uiFamily; @Override public Class<Font> getEditedClass() { return Font.class; } @Override public Font newValue() { return getStyleFactory().font(); } @Override public void initialize() { super.initialize(); uiSize.getEditor().getSpinner().setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 100, 10, 1)); //Initialize family font list with available font family final GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); final String[] fontNames = environment.getAvailableFontFamilyNames(); final List<String> fontNamesList = Arrays.asList(fontNames); final int nbFamilies = fontNamesList.size(); final Literal[] fontFamilies = new Literal[nbFamilies]; for (int i=0; i<nbFamilies; i++) { fontFamilies[i] = new DefaultLiteral(fontNamesList.get(i)); } uiFamily.getEditor().setItems(FXCollections.observableArrayList(fontFamilies)); final ChangeListener changeListener = (ChangeListener) (ObservableValue observable, Object oldValue, Object newValue) -> { if(updating) return; value.set(getStyleFactory().font( uiFamily.valueProperty().get(), uiStyle.valueProperty().get(), uiWeight.valueProperty().get(), uiSize.valueProperty().get())); }; uiSize.valueProperty().addListener(changeListener); uiWeight.valueProperty().addListener(changeListener); uiStyle.valueProperty().addListener(changeListener); uiFamily.valueProperty().addListener(changeListener); } @Override public void setLayer(MapLayer layer) { super.setLayer(layer); uiSize.setLayer(layer); uiWeight.setLayer(layer); uiStyle.setLayer(layer); uiFamily.setLayer(layer); } @Override protected void updateEditor(Font styleElement) { uiSize.valueProperty().setValue(styleElement.getSize()); uiWeight.valueProperty().setValue(styleElement.getWeight()); uiStyle.valueProperty().setValue(styleElement.getStyle()); final List<Expression> exps = styleElement.getFamily(); if(!exps.isEmpty()){ uiFamily.valueProperty().setValue(styleElement.getFamily().get(0)); }else{ //TODO set to default family } } }