gt:         return new Font(fontName, fontType, fontSize);
context: /*******************************************************************************
   * Copyright (c) 2016 Weasis Team and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *     Nicolas Roduit - initial API and implementation
   *******************************************************************************/
  package org.weasis.core.ui.pref;
  
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.GraphicsConfiguration;
  import java.awt.GraphicsDevice;
  import java.awt.GraphicsEnvironment;
  import java.awt.Rectangle;
  import java.util.ArrayList;
  import java.util.List;
  
  import org.osgi.service.prefs.Preferences;
  import org.weasis.core.api.service.BundlePreferences;
  import org.weasis.core.api.service.BundleTools;
  import org.weasis.core.ui.Messages;
  import org.weasis.core.ui.editor.image.MeasureToolBar;
  import org.weasis.core.ui.model.graphic.Graphic;
  import org.weasis.core.ui.model.utils.ImageStatistics;
  import org.weasis.core.ui.model.utils.bean.Measurement;
  
  public class ViewSetting {
      public static final String PREFERENCE_NODE = "view2d.default"; //$NON-NLS-1$
      private int fontType;
      private int fontSize;
      private String fontName;
      private boolean drawOnlyOnce;
      private Color lineColor;
      private int lineWidth;
      private boolean basicStatistics;
      private boolean moreStatistics;
      private final List<Monitor> monitors = new ArrayList<>(2);
  
      public void applyPreferences(Preferences prefs) {
          if (prefs != null) {
              Preferences p = prefs.node(ViewSetting.PREFERENCE_NODE);
              Preferences font = p.node("font"); //$NON-NLS-1$
              fontName = font.get("name", Messages.getString("LabelPrefView.default")); //$NON-NLS-1$ //$NON-NLS-2$
              fontType = font.getInt("type", 0); //$NON-NLS-1$
              fontSize = font.getInt("size", 12); //$NON-NLS-1$
              Preferences draw = p.node("drawing"); //$NON-NLS-1$
              drawOnlyOnce = draw.getBoolean("once", true); //$NON-NLS-1$
              lineWidth = draw.getInt("width", 1); //$NON-NLS-1$
              int rgb = draw.getInt("color", Color.YELLOW.getRGB()); //$NON-NLS-1$
              lineColor = new Color(rgb);
              Preferences stats = p.node("statistics"); //$NON-NLS-1$
              basicStatistics = stats.getBoolean("basic", true); //$NON-NLS-1$
              moreStatistics = stats.getBoolean("more", true); //$NON-NLS-1$
  
              ImageStatistics.IMAGE_MIN.setComputed(basicStatistics);
              ImageStatistics.IMAGE_MAX.setComputed(basicStatistics);
              ImageStatistics.IMAGE_MEAN.setComputed(basicStatistics);
  
              ImageStatistics.IMAGE_STD.setComputed(moreStatistics);
              ImageStatistics.IMAGE_SKEW.setComputed(moreStatistics);
              ImageStatistics.IMAGE_KURTOSIS.setComputed(moreStatistics);
  
              String labels = stats.get("label", null); //$NON-NLS-1$
              if (labels != null) {
                  String[] items = labels.split(","); //$NON-NLS-1$
                  for (int i = 0; i < items.length; i++) {
                      String[] val = items[i].split(":"); //$NON-NLS-1$
                      if (val.length == 2) {
                          for (Measurement m : ImageStatistics.ALL_MEASUREMENTS) {
                              if (val[0].equals(String.valueOf(m.getId()))) {
                                  m.setGraphicLabel(isTrueValue(val[1]));
                                  break;
                              }
                          }
                      }
                  }
              }
  
              // Forget the Selection Graphic
              for (int i = 1; i < MeasureToolBar.measureGraphicList.size(); i++) {
                  Graphic graph = MeasureToolBar.measureGraphicList.get(i);
                  List<Measurement> list = graph.getMeasurementList();
                  if (list != null && !list.isEmpty()) {
                      Preferences gpref = p.node(graph.getClass().getSimpleName());
                      labels = gpref.get("label", null); //$NON-NLS-1$
                      if (labels != null) {
                          String[] items = labels.split(","); //$NON-NLS-1$
                          for (int k = 0; k < items.length; k++) {
                              String[] val = items[k].split(":"); //$NON-NLS-1$
                              if (val.length == 2) {
                                  for (Measurement m : list) {
                                      if (val[0].equals(String.valueOf(m.getId()))) {
                                          m.setGraphicLabel(isTrueValue(val[1]));
                                          break;
                                      }
                                  }
                              }
                          }
                      }
                  }
              }
          }
      }
  
      public List<Monitor> getMonitors() {
          return new ArrayList<>(monitors);
      }
  
      public Monitor getMonitor(GraphicsDevice device) {
          for (Monitor m : monitors) {
              if (m.getGraphicsDevice() == device) {
                  return m;
              }
          }
          return null;
      }
  
      public void initMonitors() {
          monitors.clear();
          GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
          GraphicsDevice[] gd = ge.getScreenDevices();
  
          for (int i = 0; i < gd.length; i++) {
              final GraphicsConfiguration config = gd[i].getDefaultConfiguration();
              if (config == null || gd[i].getType() != GraphicsDevice.TYPE_RASTER_SCREEN) {
                  continue;
              }
  
              Monitor monitor = new Monitor(gd[i]);
              StringBuilder buf = new StringBuilder("screen."); //$NON-NLS-1$
              buf.append(monitor.getMonitorID());
              Rectangle b = monitor.getBounds();
              buf.append("."); //$NON-NLS-1$
              buf.append(b.width);
              buf.append("x"); //$NON-NLS-1$
              buf.append(b.height);
              buf.append(".pitch"); //$NON-NLS-1$
              double pitch = BundleTools.LOCAL_PERSISTENCE.getDoubleProperty(buf.toString(), 0.0);
              monitor.setRealScaleFactor(pitch);
              monitors.add(monitor);
          }
      }
  
      private static boolean isTrueValue(String val) {
          return "1".equals(val.trim()); //$NON-NLS-1$
      }
  
      private static void writeLabels(StringBuilder buffer, Measurement m) {
          buffer.append(m.getId());
          buffer.append(":"); //$NON-NLS-1$
          buffer.append(m.getGraphicLabel() ? "1" : "0"); //$NON-NLS-1$ //$NON-NLS-2$
      }
  
      public void savePreferences(Preferences prefs) {
          if (prefs != null) {
              Preferences p = prefs.node(ViewSetting.PREFERENCE_NODE);
              Preferences font = p.node("font"); //$NON-NLS-1$
              BundlePreferences.putStringPreferences(font, "name", fontName); //$NON-NLS-1$
              BundlePreferences.putIntPreferences(font, "type", fontType); //$NON-NLS-1$
              BundlePreferences.putIntPreferences(font, "size", fontSize); //$NON-NLS-1$
  
              Preferences draw = p.node("drawing"); //$NON-NLS-1$
              BundlePreferences.putBooleanPreferences(draw, "once", drawOnlyOnce); //$NON-NLS-1$
              BundlePreferences.putIntPreferences(draw, "width", lineWidth); //$NON-NLS-1$
              BundlePreferences.putIntPreferences(draw, "color", lineColor.getRGB()); //$NON-NLS-1$
  
              Preferences stats = p.node("statistics"); //$NON-NLS-1$
              BundlePreferences.putBooleanPreferences(stats, "basic", basicStatistics); //$NON-NLS-1$
              BundlePreferences.putBooleanPreferences(stats, "more", moreStatistics); //$NON-NLS-1$
              StringBuilder buffer = new StringBuilder();
              writeLabels(buffer, ImageStatistics.ALL_MEASUREMENTS[0]);
              for (int i = 1; i < ImageStatistics.ALL_MEASUREMENTS.length; i++) {
                  buffer.append(","); //$NON-NLS-1$
                  writeLabels(buffer, ImageStatistics.ALL_MEASUREMENTS[i]);
              }
              BundlePreferences.putStringPreferences(stats, "label", buffer.toString()); //$NON-NLS-1$
  
              // Forget the Selection Graphic
              for (int i = 1; i < MeasureToolBar.measureGraphicList.size(); i++) {
                  Graphic graph = MeasureToolBar.measureGraphicList.get(i);
                  List<Measurement> list = graph.getMeasurementList();
                  if (list != null && !list.isEmpty()) {
                      Preferences gpref = p.node(graph.getClass().getSimpleName());
                      buffer = new StringBuilder();
                      writeLabels(buffer, list.get(0));
                      for (int j = 1; j < list.size(); j++) {
                          buffer.append(","); //$NON-NLS-1$
                          writeLabels(buffer, list.get(j));
                      }
                      BundlePreferences.putStringPreferences(gpref, "label", buffer.toString()); //$NON-NLS-1$
                  }
              }
          }
      }
  
      public int getFontType() {
          return fontType;
      }
  
      public void setFontType(int fontType) {
          this.fontType = fontType;
      }
  
      public int getFontSize() {
          return fontSize;
      }
  
      public void setFontSize(int fontSize) {
          this.fontSize = fontSize;
      }
  
      public String getFontName() {
          return fontName;
      }
  
      public void setFontName(String fontName) {
          this.fontName = fontName;
      }
  
      public Font getFont() {
  