/** | |
* <copyright> | |
* | |
* Copyright (c) 2013 itemis and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html | |
* | |
* Contributors: | |
* itemis - Initial API and implementation | |
* | |
* </copyright> | |
*/ | |
package org.eclipse.sphinx.examples.hummingbird20.diagram.gmf.edit.parts; | |
import org.eclipse.draw2d.FigureUtilities; | |
import org.eclipse.draw2d.Label; | |
import org.eclipse.draw2d.geometry.Dimension; | |
import org.eclipse.draw2d.geometry.Rectangle; | |
import org.eclipse.gef.EditPart; | |
import org.eclipse.gef.EditPartFactory; | |
import org.eclipse.gef.tools.CellEditorLocator; | |
import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; | |
import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; | |
import org.eclipse.gmf.runtime.notation.View; | |
import org.eclipse.jface.viewers.CellEditor; | |
import org.eclipse.sphinx.examples.hummingbird20.diagram.gmf.part.Hummingbird20VisualIDRegistry; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.widgets.Text; | |
/** | |
* @generated | |
*/ | |
public class Hummingbird20EditPartFactory implements EditPartFactory { | |
/** | |
* @generated | |
*/ | |
@Override | |
public EditPart createEditPart(EditPart context, Object model) { | |
if (model instanceof View) { | |
View view = (View) model; | |
switch (Hummingbird20VisualIDRegistry.getVisualID(view)) { | |
case ApplicationEditPart.VISUAL_ID: | |
return new ApplicationEditPart(view); | |
case ComponentEditPart.VISUAL_ID: | |
return new ComponentEditPart(view); | |
case ComponentNameEditPart.VISUAL_ID: | |
return new ComponentNameEditPart(view); | |
case ConnectionEditPart.VISUAL_ID: | |
return new ConnectionEditPart(view); | |
case ConnectionLabelEditPart.VISUAL_ID: | |
return new ConnectionLabelEditPart(view); | |
} | |
} | |
return createUnrecognizedEditPart(context, model); | |
} | |
/** | |
* @generated | |
*/ | |
private EditPart createUnrecognizedEditPart(EditPart context, Object model) { | |
// Handle creation of unrecognized child node EditParts here | |
return null; | |
} | |
/** | |
* @generated | |
*/ | |
public static CellEditorLocator getTextCellEditorLocator(ITextAwareEditPart source) { | |
if (source.getFigure() instanceof WrappingLabel) { | |
return new TextCellEditorLocator((WrappingLabel) source.getFigure()); | |
} else { | |
return new LabelCellEditorLocator((Label) source.getFigure()); | |
} | |
} | |
/** | |
* @generated | |
*/ | |
static private class TextCellEditorLocator implements CellEditorLocator { | |
/** | |
* @generated | |
*/ | |
private WrappingLabel wrapLabel; | |
/** | |
* @generated | |
*/ | |
public TextCellEditorLocator(WrappingLabel wrapLabel) { | |
this.wrapLabel = wrapLabel; | |
} | |
/** | |
* @generated | |
*/ | |
public WrappingLabel getWrapLabel() { | |
return wrapLabel; | |
} | |
/** | |
* @generated | |
*/ | |
@Override | |
public void relocate(CellEditor celleditor) { | |
Text text = (Text) celleditor.getControl(); | |
Rectangle rect = getWrapLabel().getTextBounds().getCopy(); | |
getWrapLabel().translateToAbsolute(rect); | |
if (!text.getFont().isDisposed()) { | |
if (getWrapLabel().isTextWrapOn() && getWrapLabel().getText().length() > 0) { | |
rect.setSize(new Dimension(text.computeSize(rect.width, SWT.DEFAULT))); | |
} else { | |
int avr = FigureUtilities.getFontMetrics(text.getFont()).getAverageCharWidth(); | |
rect.setSize(new Dimension(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)).expand(avr * 2, 0)); | |
} | |
} | |
if (!rect.equals(new Rectangle(text.getBounds()))) { | |
text.setBounds(rect.x, rect.y, rect.width, rect.height); | |
} | |
} | |
} | |
/** | |
* @generated | |
*/ | |
private static class LabelCellEditorLocator implements CellEditorLocator { | |
/** | |
* @generated | |
*/ | |
private Label label; | |
/** | |
* @generated | |
*/ | |
public LabelCellEditorLocator(Label label) { | |
this.label = label; | |
} | |
/** | |
* @generated | |
*/ | |
public Label getLabel() { | |
return label; | |
} | |
/** | |
* @generated | |
*/ | |
@Override | |
public void relocate(CellEditor celleditor) { | |
Text text = (Text) celleditor.getControl(); | |
Rectangle rect = getLabel().getTextBounds().getCopy(); | |
getLabel().translateToAbsolute(rect); | |
if (!text.getFont().isDisposed()) { | |
int avr = FigureUtilities.getFontMetrics(text.getFont()).getAverageCharWidth(); | |
rect.setSize(new Dimension(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)).expand(avr * 2, 0)); | |
} | |
if (!rect.equals(new Rectangle(text.getBounds()))) { | |
text.setBounds(rect.x, rect.y, rect.width, rect.height); | |
} | |
} | |
} | |
} |