/**
* Copyright (c) 2010-2012 ISBAN S.L
*
* 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:
* Ruben De Dios (ISBAN S.L)
* Andrez Alvarez Mattos (ISBAN S.L)
*/
package org.eclipse.gmf.tooling.simplemap.diagram.properties.figure;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.emf.databinding.EMFProperties;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.gmfgraph.DiagramLabel;
import org.eclipse.gmf.gmfgraph.Figure;
import org.eclipse.gmf.gmfgraph.FontStyle;
import org.eclipse.gmf.gmfgraph.GMFGraphPackage;
import org.eclipse.gmf.runtime.diagram.ui.internal.util.FontHelper;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
import org.eclipse.gmf.runtime.diagram.ui.properties.internal.l10n.DiagramUIPropertiesImages;
import org.eclipse.gmf.runtime.diagram.ui.properties.internal.l10n.DiagramUIPropertiesMessages;
import org.eclipse.gmf.tooling.simplemap.diagram.properties.AbstractExtendedPropertiesSection;
import org.eclipse.gmf.tooling.simplemap.simplemappings.SimpleCompartment;
import org.eclipse.gmf.tooling.simplemap.simplemappings.SimpleLabelNode;
import org.eclipse.gmf.tooling.simplemap.simplemappings.SimpleLinkMapping;
import org.eclipse.gmf.tooling.simplemap.simplemappings.SimpleNode;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
public abstract class ElementWithLabelPropertySection extends AbstractExtendedPropertiesSection {
protected static final String FONTS_AND_COLORS_LABEL = DiagramUIPropertiesMessages.FontAndColor_nameLabel;
// font family drop down
protected CCombo fontFamilyCombo;
// font size drop down
private CCombo fontSizeCombo;
private Button fontBoldButton;
private Button fontItalicButton;
protected Group fontsGroup;
private DataBindingContext bindingContext = new DataBindingContext();;
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.diagram.ui.properties.sections.
* AbstractNotationPropertiesSection
* #initializeControls(org.eclipse.swt.widgets.Composite)
*/
protected void initializeControls(Composite parent) {
super.initializeControls(parent);
createFontsAndColorsGroups(composite);
}
/**
* Create fonts and colors group
*
* @param parent - parent composite
*/
protected Group createFontsAndColorsGroups(Composite parent) {
fontsGroup = getWidgetFactory().createGroup(parent, FONTS_AND_COLORS_LABEL);
GridLayout layout = new GridLayout(1, false);
fontsGroup.setLayout(layout);
createFontsGroup(fontsGroup);
return fontsGroup;
}
/**
* Create font tool bar group
*
* @param parent - parent composite
* @return - font tool bar
*/
protected Composite createFontsGroup(Composite parent) {
Composite familySize = getWidgetFactory().createComposite(parent);
GridLayout layout = new GridLayout(2, false);
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
layout.marginHeight = 0;
layout.marginWidth = 0;
familySize.setLayout(layout);
fontFamilyCombo = getWidgetFactory().createCCombo(familySize, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
fontFamilyCombo.setItems(FontHelper.getFontNames());
fontSizeCombo = getWidgetFactory().createCCombo(familySize, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
fontSizeCombo.setItems(FontHelper.getFontSizes());
Composite toolBar = new Composite(parent, SWT.SHADOW_NONE);
toolBar.setLayout(new GridLayout(7, false));
toolBar.setBackground(parent.getBackground());
fontBoldButton = new Button(toolBar, SWT.TOGGLE);
fontBoldButton.setImage(DiagramUIPropertiesImages.get(DiagramUIPropertiesImages.IMG_BOLD));
fontBoldButton.getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
e.result = DiagramUIMessages.PropertyDescriptorFactory_FontStyle_Bold;
}
});
fontItalicButton = new Button(toolBar, SWT.TOGGLE);
fontItalicButton.setImage(DiagramUIPropertiesImages.get(DiagramUIPropertiesImages.IMG_ITALIC));
fontItalicButton.getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
e.result = DiagramUIMessages.PropertyDescriptorFactory_FontStyle_Italic;
}
});
return toolBar;
}
protected Figure getLabelFigure(Object transformSelection) {
Figure figure = null;
if (transformSelection instanceof SimpleNode) {
DiagramLabel diagramLabel = ((SimpleNode) transformSelection).getDiagramLabel();
if (diagramLabel != null && diagramLabel.getAccessor() != null)
figure = diagramLabel.getAccessor().getFigure();
}
if (transformSelection instanceof SimpleLabelNode) {
figure = ((SimpleNode) transformSelection).getDiagramLabel().getFigure().getActualFigure();
}
if (transformSelection instanceof SimpleCompartment) {
figure = ((SimpleCompartment) transformSelection).getCompartment().getFigure().getActualFigure();
}
if (transformSelection instanceof SimpleLinkMapping) {
figure = ((SimpleLinkMapping) transformSelection).getDiagramLabel().getFigure().getActualFigure();
}
return figure;
}
@Override
public void dispose() {
if (bindingContext != null)
bindingContext.dispose();
if (fontFamilyCombo != null)
fontFamilyCombo.dispose();
if (fontSizeCombo != null)
fontSizeCombo.dispose();
if (fontBoldButton != null)
fontBoldButton.dispose();
if (fontItalicButton != null)
fontItalicButton.dispose();
super.dispose();
}
/**
* @param object
* The eObject to set.
*/
protected void setEObject(EObject object) {
this.eObject = object;
bindingContext.bindValue(WidgetProperties.selection().observe(fontFamilyCombo), EMFProperties.value(GMFGraphPackage.eINSTANCE.getBasicFont_FaceName()).observe(eObject));
bindingContext.bindValue(WidgetProperties.selection().observe(fontSizeCombo), EMFProperties.value(GMFGraphPackage.eINSTANCE.getBasicFont_Height()).observe(eObject),
new UpdateSizeTargetToModel(), new UpdateSizeModelToTarget());
bindingContext.bindValue(WidgetProperties.selection().observe(fontBoldButton), EMFProperties.value(GMFGraphPackage.eINSTANCE.getBasicFont_Style()).observe(eObject),
new UpdateBoldButtonTargetToModel(), new UpdateBoldButtonModelToTarget());
}
class UpdateSizeTargetToModel extends UpdateValueStrategy {
@Override
public Object convert(Object value) {
// TODO Auto-generated method stub
return Integer.parseInt((String) value);
}
}
class UpdateSizeModelToTarget extends UpdateValueStrategy {
@Override
public Object convert(Object value) {
// TODO Auto-generated method stub
return Integer.toString((Integer) value);
}
}
class UpdateBoldButtonTargetToModel extends UpdateValueStrategy {
@Override
public Object convert(Object value) {
boolean isBold = (Boolean) value;
FontStyle style = isBold ? FontStyle.BOLD_LITERAL : FontStyle.NORMAL_LITERAL;
return style;
}
}
class UpdateBoldButtonModelToTarget extends UpdateValueStrategy {
@Override
public Object convert(Object value) {
return value == FontStyle.BOLD_LITERAL;
}
}
}