/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.ext.model.editor.util; import org.eclipse.graphiti.mm.algorithms.styles.Orientation; import org.eclipse.graphiti.mm.algorithms.styles.Style; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.IGaService; import org.eclipse.graphiti.util.ColorConstant; import org.eclipse.graphiti.util.IColorConstant; import org.eclipse.graphiti.util.PredefinedColoredAreas; import org.eclipse.jface.resource.DataFormatException; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.graphics.FontData; import com.cisco.yangide.ext.model.editor.Activator; import com.cisco.yangide.ext.model.editor.preferences.ModelEditorPreferences; @SuppressWarnings("restriction") public class StyleUtil { private StyleUtil() { super(); } public static final IColorConstant DOMAIN_OBJECT_TEXT_FOREGROUND = new ColorConstant(0, 0, 0); public static final IColorConstant DOMAIN_OBJECT_FOREGROUND = new ColorConstant(137, 173, 213);// new // ColorConstant(98, // 131, // 167); public static final IColorConstant DOMAIN_OBJECT_BACKGROUND = new ColorConstant(187, 218, 247); public static final IColorConstant DOMAIN_OBJECT_TYPE_TEXT_COLOR = new ColorConstant(149, 125, 71); public static Style getStyleForCommonValues(Diagram diagram) { final String styleId = "COMMON-VALUES"; IGaService gaService = Graphiti.getGaService(); // Is style already persisted? Style style = gaService.findStyle(diagram, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(diagram, styleId); setCommonValues(style); } return style; } public static Style getStyleForDomainObject(Diagram diagram) { final String styleId = "DOMAIL-OBJECT"; IGaService gaService = Graphiti.getGaService(); // this is a child style of the common-values-style Style parentStyle = getStyleForCommonValues(diagram); Style style = gaService.findStyle(parentStyle, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(parentStyle, styleId); style.setFilled(true); style.setForeground(gaService.manageColor(diagram, DOMAIN_OBJECT_FOREGROUND)); // no background color here, we have a gradient instead gaService.setRenderingStyle(style, PredefinedColoredAreas.getBlueWhiteGlossAdaptions()); } return style; } public static Style getStyleForDomainObjectText(Diagram diagram) { final String styleId = "DOMAIL-OBJECT-TEXT"; IGaService gaService = Graphiti.getGaService(); // this is a child style of the common-values-style Style parentStyle = getStyleForCommonValues(diagram); Style style = gaService.findStyle(parentStyle, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(parentStyle, styleId); setCommonTextValues(diagram, gaService, style); FontData font = getDefaultFont(); style.setFont(gaService.manageFont(diagram, font.getName(), font.getHeight(), false, false)); } return style; } public static Style getStyleForDomainObjectTypeText(Diagram diagram) { final String styleId = "DOMAIL-OBJECT-TYPE-TEXT"; IGaService gaService = Graphiti.getGaService(); // this is a child style of the common-values-style Style parentStyle = getStyleForCommonValues(diagram); Style style = gaService.findStyle(parentStyle, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(parentStyle, styleId); setCommonTextValues(diagram, gaService, style); FontData font = getDefaultFont(); style.setFont(gaService.manageFont(diagram, font.getName(), font.getHeight(), false, false)); style.setForeground(gaService.manageColor(diagram, DOMAIN_OBJECT_TYPE_TEXT_COLOR)); } return style; } public static Style getStyleForDomainObjectNumberText(Diagram diagram) { final String styleId = "DOMAIL-OBJECT-NUMBER-TEXT"; IGaService gaService = Graphiti.getGaService(); // this is a child style of the common-values-style Style parentStyle = getStyleForCommonValues(diagram); Style style = gaService.findStyle(parentStyle, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(parentStyle, styleId); setCommonTextValues(diagram, gaService, style); FontData font = getDefaultFont(); style.setFont(gaService.manageFont(diagram, font.getName(), font.getHeight() - 2, false, false)); } return style; } public static Style getStyleForTextDecorator(Diagram diagram) { final String styleId = "TEXT-DECORATOR-TEXT"; IGaService gaService = Graphiti.getGaService(); // this is a child style of the common-values-style Style parentStyle = getStyleForCommonValues(diagram); Style style = gaService.findStyle(parentStyle, styleId); if (style == null) { // style not found - create new style style = gaService.createPlainStyle(parentStyle, styleId); setCommonTextValues(diagram, gaService, style); FontData font = getDefaultFont(); style.setFont(gaService.manageFont(diagram, font.getName(), font.getHeight(), true, false)); } return style; } private static void setCommonTextValues(Diagram diagram, IGaService gaService, Style style) { style.setFilled(false); style.setHorizontalAlignment(Orientation.ALIGNMENT_LEFT); style.setVerticalAlignment(Orientation.ALIGNMENT_CENTER); style.setForeground(gaService.manageColor(diagram, DOMAIN_OBJECT_TEXT_FOREGROUND)); } private static void setCommonValues(Style style) { // style.setLineStyle(LineStyle.SOLID); style.setLineVisible(true); // style.setLineWidth(2); style.setTransparency(0.0); } private static FontData getDefaultFont() { FontData fontData = null; try { fontData = StringConverter.asFontData( Activator.getDefault().getPreferenceStore().getString(ModelEditorPreferences.DIAGRAM_EDITOR_FONT)); } catch (DataFormatException e) { // ignore incorrect format } if (fontData == null) { FontData fd = JFaceResources.getDefaultFont().getFontData()[0]; // workaround for issue with MacOS fonts if ("Helvetica Neue Deskinterface".equals(fd.getName()) && fd.getHeight() == 11) { fd.setName("Helvetica"); } return fd; } return fontData; } }