carbidecpp22devenv/plugins/org.eclipse.gmf.templates.legacy_1.0.0.v20090614-0839/codegen.lite.templates/xpt/diagram/parts/LabelController.xpt
author cawthron
Fri, 04 Dec 2009 11:06:59 -0600
changeset 422 033392511bf7
permissions -rw-r--r--
add files for RCL_2_2

/*
 * Copyright (c) 2007, 2008 Borland Software Corporation
 * 
 * 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:
 *    bblajer (Borland) - initial API and implementation
 */

«IMPORT "http://www.eclipse.org/gmf/2008/GenModel"»
«IMPORT "http://www.eclipse.org/emf/2002/Ecore"»
«IMPORT "http://www.eclipse.org/emf/2002/GenModel"»
«EXTENSION xpt::diagram::parts::LabelController»
«EXTENSION xpt::diagram::ViewmapAttributesUtils»
«EXTENSION xpt::providers::ParserUtils»

«DEFINE directEditManager FOR gmfgen::GenCommonBase-»
«IF !isReadOnly()-»
«EXPAND xpt::Common::generatedMemberComment»
private org.eclipse.gef.tools.DirectEditManager manager;

«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.gef.tools.DirectEditManager getManager() {
	if (manager == null) {
		manager = new org.eclipse.gef.tools.DirectEditManager(this, org.eclipse.jface.viewers.TextCellEditor.class, new org.eclipse.gmf.runtime.lite.services.LabelCellEditorLocator(getViewer(), getLabel())) {
			protected void initCellEditor() {
				getCellEditor().setValue(getLabelTextDisplayer().getEditText(«EXPAND xpt::diagram::parts::Common::getViewCode».getElement()));
			}
		};
	}
	return manager;
}
«ENDIF-»
«ENDDEFINE»

«DEFINE performDirectEdit FOR gmfgen::GenCommonBase-»
«IF !isReadOnly()-»
«EXPAND xpt::Common::generatedMemberComment»
protected void performDirectEdit() {
	if («getDiagram().getDiagramEditorUtilQualifiedClassName()».isReadOnly(«EXPAND xpt::diagram::parts::Common::getViewCode».getElement()) || «getDiagram().getDiagramEditorUtilQualifiedClassName()».isReadOnly(«EXPAND xpt::diagram::parts::Common::getViewCode»)) {
		return;
	}
	if (getLabelTextDisplayer() == null) {
		return;
	}
	getManager().show();
}
«ENDIF-»
«ENDDEFINE»

«DEFINE labelDisplayer FOR gmfgen::GenCommonBase-»
«EXPAND xpt::Common::generatedMemberComment»
public static final org.eclipse.gmf.runtime.lite.edit.parts.labels.ILabelTextDisplayer LABEL_DISPLAYER = createLabelTextDisplayer();

«EXPAND xpt::Common::generatedMemberComment»
public org.eclipse.gmf.runtime.lite.edit.parts.labels.ILabelTextDisplayer getLabelTextDisplayer() {
	return LABEL_DISPLAYER;
}

«EXPAND xpt::Common::generatedMemberComment»
private static org.eclipse.gmf.runtime.lite.edit.parts.labels.ILabelTextDisplayer createLabelTextDisplayer() {
«LET getLabelModelFacet() AS facet-»
«IF facet == null-»
«ERROR "Unexpected type"-»
«ELSE-»
«EXPAND createLabelTextDisplayer(isReadOnly()) FOR facet-»
«ENDIF-»
«ENDLET-»
}
«ENDDEFINE»

«DEFINE createLabelTextDisplayer(Boolean isReadOnly) FOR gmfgen::LabelModelFacet-»
// TODO: implement this method
// Ensure that you remove @generated or mark it @generated NOT
return null;
«ENDDEFINE»

«DEFINE createLabelTextDisplayer(Boolean isReadOnly) FOR gmfgen::FeatureLabelModelFacet-»
«IF viewMethod.literal == editMethod.literal-»
«LET (Collection[int]){} AS nonNLSHolder-»
return «EXPAND instantiateLabelTextDisplayer(isReadOnly, nonNLSHolder)»;	«FOREACH nonNLSHolder AS index»«EXPAND xpt::Common::nonNLS(index)»«ENDFOREACH»
«ENDLET-»
«ELSE-»
«LET (Collection[int]){} AS nonNLSHolder-»
org.eclipse.gmf.runtime.lite.edit.parts.labels.ILabelTextDisplayer reader = «EXPAND instantiateLabelTextReader(nonNLSHolder)»;
«ENDLET-»
«LET (Collection[int]){} AS nonNLSHolder-»
org.eclipse.gmf.runtime.lite.edit.parts.labels.ILabelTextDisplayer writer = «IF isReadOnly»null«ELSE»«EXPAND instantiateLabelTextWriter(nonNLSHolder)»«ENDIF»;
«ENDLET-»
return new org.eclipse.gmf.runtime.lite.edit.parts.labels.CompositeLabelTextDisplayer(reader, writer);
«ENDIF-»
«ENDDEFINE»

«DEFINE features FOR gmfgen::FeatureLabelModelFacet-»
new org.eclipse.emf.ecore.EAttribute[] {«EXPAND MetaModel::MetaFeature FOREACH metaFeatures SEPARATOR ', '»}«-»
«ENDDEFINE»

«DEFINE instantiateLabelTextDisplayer(Boolean isReadOnly, Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet-»
«IF viewMethod.literal == gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT.literal-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.MessageFormatLabelTextDisplayer(«EXPAND readerPatterns(nonNLSHolder)»«IF !isReadOnly», «EXPAND writerPatterns(nonNLSHolder)»«ENDIF», «EXPAND features»)«-»
«ELSEIF viewMethod.literal == gmfgen::LabelTextAccessMethod::NATIVE.literal-»
	«IF metaFeatures.size() != 1»«ERROR "Unexpected features size for NATIVE label text access method"»«ENDIF-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.NativeLabelTextDisplayer(«EXPAND features»)«-»
«ELSEIF viewMethod.literal == gmfgen::LabelTextAccessMethod::PRINTF.literal-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.PrintfLabelTextDisplayer(«EXPAND readerPatterns(nonNLSHolder)», «EXPAND features»)«-»
«ELSE-»
«ERROR "Unexpected label text access method"-»
«ENDIF-»
«ENDDEFINE»

«DEFINE instantiateLabelTextReader(Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet»«EXPAND instantiateLabelTextDisplayer(true, nonNLSHolder)»«ENDDEFINE»

«DEFINE instantiateLabelTextWriter(Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet-»
«IF viewMethod.literal == gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT.literal-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.MessageFormatLabelTextDisplayer(null, null, «EXPAND writerPatterns(nonNLSHolder)», «EXPAND features»)«-»
«ELSEIF viewMethod.literal == gmfgen::LabelTextAccessMethod::NATIVE.literal-»
	«IF metaFeatures.size() != 1»«ERROR "Unexpected features size for NATIVE label text access method"»«ENDIF-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.NativeLabelTextDisplayer(«EXPAND features»)«-»
«ELSEIF editMethod.literal == gmfgen::LabelTextAccessMethod::REGEXP.literal-»
new org.eclipse.gmf.runtime.lite.edit.parts.labels.RegexpParser(«EXPAND writerPatterns(nonNLSHolder)», «EXPAND features»)«-»
«ELSE-»
«ERROR "Unexpected label text access method"-»
«ENDIF-»
«ENDDEFINE»

«DEFINE readerPatterns(Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet-»
«EXPAND quote(viewPattern, nonNLSHolder)», «EXPAND quote(isPatternSpecified(editorPattern) ? editorPattern : viewPattern, nonNLSHolder)-»
«ENDDEFINE»

«DEFINE writerPatterns(Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet-»
«EXPAND quote(isPatternSpecified(editPattern) ? editPattern : (isPatternSpecified(editorPattern) ? editorPattern : viewPattern), nonNLSHolder)-»
«ENDDEFINE»

«DEFINE quote(String text, Collection[int] nonNLSHolder) FOR gmfgen::FeatureLabelModelFacet-»
«IF text == null»null«ELSE»"«text»"«nonNLSHolder.add(nonNLSHolder.size() + 1)->""»«ENDIF-»
«ENDDEFINE»

«DEFINE labelText FOR gmfgen::GenCommonBase-»
«EXPAND xpt::Common::generatedMemberComment»
private String defaultText;

«EXPAND xpt::Common::generatedMemberComment»
public void setLabelText(String text) {
	if (text == null || text.length() == 0) {
		text = defaultText;
	}
	getLabel().setText(text);
}

«EXPAND xpt::Common::generatedMemberComment»
protected String getLabelText() {
	if (getLabelTextDisplayer() == null) {
		return defaultText;
	}
	org.eclipse.emf.ecore.EObject element = «EXPAND xpt::diagram::parts::Common::getViewCode».getElement();
	if (element == null) {
		return defaultText;
	}
	String result = getLabelTextDisplayer().getDisplayText(element);
	if (result == null || result.length() == 0) {
		return defaultText;
	}
	return result;
}
«ENDDEFINE»

«DEFINE labelFigure(gmfgen::GenCommonBase label) FOR gmfgen::ParentAssignedViewmap-»
«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.draw2d.IFigure createFigure() {
	// Parent should assign one using «EXPAND xpt::diagram::parts::NodeEditPart::setter» method
	return null;
}

«EXPAND getLabel-»

«EXPAND xpt::Common::generatedMemberComment»
public void «EXPAND xpt::diagram::parts::NodeEditPart::setter»(«getFigureQualifiedClassName()» label) {
	unregisterVisuals();
	setFigure(label);
	«EXPAND initDefaultText-»
	registerVisuals();
	refreshVisuals();
}
«ENDDEFINE»

«DEFINE labelFigure(gmfgen::GenCommonBase label) FOR gmfgen::Viewmap-»
«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.draw2d.IFigure createFigure() {
	«getFigureQualifiedClassName()» label = createLabel();
	«EXPAND initDefaultText-»
	return label;
}

«EXPAND xpt::Common::generatedMemberComment»
protected «getFigureQualifiedClassName()» createLabel() {
	«EXPAND createLabel-»
}

«EXPAND getLabel-»
«ENDDEFINE»

«DEFINE createLabel FOR gmfgen::Viewmap»«ERROR "Unexpected viewmap type: " + this»«ENDDEFINE»

«DEFINE createLabel FOR gmfgen::FigureViewmap-»
return new «getFigureQualifiedClassName()»();
«ENDDEFINE»

«DEFINE createLabel FOR gmfgen::SnippetViewmap-»
return «body»;
«ENDDEFINE»

«DEFINE createLabel FOR gmfgen::InnerClassViewmap-»
return new «getFigureQualifiedClassName()»();
«ENDDEFINE»

«DEFINE initDefaultText FOR gmfgen::Viewmap-»
«IF "org.eclipse.draw2d.Label" == getFigureQualifiedClassName()-»
defaultText = label.getText();
«ELSE-»
if (label instanceof org.eclipse.draw2d.Label) {
	defaultText = label.getText();
} else {
	defaultText = "";	«EXPAND xpt::Common::nonNLS»
}
«ENDIF-»
«ENDDEFINE»

«DEFINE initDefaultText FOR gmfgen::InnerClassViewmap-»
defaultText = label.getText();
«ENDDEFINE»

«DEFINE getLabel FOR gmfgen::Viewmap-»
«EXPAND getLabelComment-»
public org.eclipse.draw2d.Label getLabel() {
	return (org.eclipse.draw2d.Label) getFigure();
}
«ENDDEFINE»

«DEFINE getLabelComment FOR gmfgen::Viewmap-»
«IF ("org.eclipse.draw2d.Label" == getFigureQualifiedClassName())-»
«EXPAND xpt::Common::generatedMemberComment»
«ELSE-»
«EXPAND xpt::Common::generatedMemberComment("TODO: reimplement, since the figure used by this editpart may not be a Label.")»
«ENDIF-»
«ENDDEFINE»

«DEFINE getLabelComment FOR gmfgen::InnerClassViewmap-»
«EXPAND xpt::Common::generatedMemberComment»
«ENDDEFINE»


«DEFINE labelIcon FOR gmfgen::GenCommonBase-»
«EXPAND xpt::Common::generatedMemberComment»
protected org.eclipse.swt.graphics.Image getLabelIcon() {
«IF isElementIcon()-»
	return «getDiagram().getElementTypesQualifiedClassName()».getImage(«EXPAND getElement».eClass());
«ELSE-»
	return null;
«ENDIF-»
}
«ENDDEFINE»

«DEFINE getElement FOR gmfgen::GenCommonBase»«EXPAND xpt::diagram::parts::Common::getViewCode».getElement()«ENDDEFINE»

«DEFINE getElement FOR gmfgen::GenLinkLabel-»
«EXPAND getElement(link) FOR link.modelFacet-»
«ENDDEFINE»

«DEFINE getElement(gmfgen::GenLink link) FOR gmfgen::LinkModelFacet»«ERROR "Unexpected model facet: " + this»«ENDDEFINE»

«DEFINE getElement(gmfgen::GenLink link) FOR gmfgen::TypeLinkModelFacet»getUpdatableParent().«EXPAND xpt::diagram::parts::Common::getViewCode FOR link».getElement()«ENDDEFINE»

«DEFINE getElement(gmfgen::GenLink link) FOR gmfgen::FeatureLinkModelFacet»getUpdatableParent().«EXPAND xpt::diagram::parts::Common::getViewCode FOR link».getTarget().getElement()«ENDDEFINE»

«DEFINE getUpdatableParent FOR gmfgen::GenLabel-»
«EXPAND xpt::Common::generatedMemberComment»
private «getLabelHostQualifiedClassName()» getUpdatableParent() {
	assert getParent() instanceof «getLabelHostQualifiedClassName()»;
	return («getLabelHostQualifiedClassName()») getParent();
}
«ENDDEFINE»

«REM»
The activate/deactivate pair for labels with updatable parents more belongs to the LabelController template.
It is thus referenced from the common activate/deactivate mechanism.
«ENDREM»
«DEFINE activateAdditions FOR gmfgen::GenLabel-»
«getLabelHostQualifiedClassName()» updatableParent = getUpdatableParent();
if (updatableParent != null) {
«IF !viewmap.isFixedFont()-»
	updatableParent.addExternalRefresher(fontColorRefresher);
	updatableParent.addExternalRefresher(fontRefresher);
«ENDIF-»
	updatableParent.addExternalRefresher(getLabelRefresher());
	«EXPAND activateMore-»
}
«ENDDEFINE»

«DEFINE deactivateAdditions FOR gmfgen::GenLabel-»
«getLabelHostQualifiedClassName()» updatableParent = getUpdatableParent();
if (updatableParent != null) {
«IF !viewmap.isFixedFont()-»
	updatableParent.removeExternalRefresher(fontColorRefresher);
	updatableParent.removeExternalRefresher(fontRefresher);
«ENDIF-»
	updatableParent.removeExternalRefresher(getLabelRefresher());
	«EXPAND deactivateMore-»
}
«ENDDEFINE»

«DEFINE activateMore FOR gmfgen::GenLabel»«ENDDEFINE»
«DEFINE deactivateMore FOR gmfgen::GenLabel»«ENDDEFINE»

«DEFINE activateMore FOR gmfgen::GenExternalNodeLabel-»
updatableParent.addExternalRefresher(boundsRefresher);
«ENDDEFINE»

«DEFINE deactivateMore FOR gmfgen::GenExternalNodeLabel-»
updatableParent.removeExternalRefresher(boundsRefresher);
«ENDDEFINE»

«DEFINE activateMore FOR gmfgen::GenLinkLabel-»
updatableParent.addExternalRefresher(boundsRefresher);
«ENDDEFINE»

«DEFINE deactivateMore FOR gmfgen::GenLinkLabel-»
updatableParent.removeExternalRefresher(boundsRefresher);
«ENDDEFINE»