###############################################################################
# Copyright (c) 2010 IBM Corporation and others.
# This program and the accompanying materials are made
# available under the terms of the Eclipse Public License 2.0
# which is available at https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
#
# START TRANSLATABLE
#

Plugin.name = Graphical Modeling Framework (GMF) Runtime Examples Plug-in
Plugin.providerName = Eclipse Modeling Project

newWizardCategories.examples.runtimePDEPlugin = GMF (Graphical Modeling Framework) Plug-ins

newWizards.examples.logic.name = Logic
newWizards.examples.logic.desc = Create plug-ins that collectively contribute an editor to edit a logic diagram using the Modeling Platform Diagram Layer
newWizards.examples.logic.projectPage.title = Modeling Logic Diagram Plug-in Project Creation
newWizards.examples.logic.projectPage.desc = Create the three plug-in projects of the logic example
newWizards.examples.logic.projectName=org.eclipse.gmf.examples.runtime.diagram.logic

newWizards.examples.geoshapes.name = Geoshape
newWizards.examples.geoshapes.desc = Create a plug-in that contributes an editor to edit a diagram containing geometric shapes using the Modeling Platform Diagram Layer
newWizards.examples.geoshapes.projectPage.title = Modeling Geoshapes Diagram Plug-in Project Creation
newWizards.examples.geoshapes.projectPage.desc = Create the plug-in project of the Geoshapes example
newWizards.examples.geoshapes.projectName=org.eclipse.gmf.examples.runtime.diagram.geoshapes

newWizards.examples.layoutservice.name = Square Layout Provider
newWizards.examples.layoutservice.desc = Create a plug-in that contributes a layout provider that positions the shapes of a diagram in a square geometry to demonstrate how to construct a custom layout.
newWizards.examples.layoutservice.projectPage.title = Square Layout Provider Diagram Plug-in
newWizards.examples.layoutservice.projectPage.desc = Create a plug-in that contributes a layout provider that positions the shapes of a diagram in a square geometry to demonstrate how to construct a custom layout
newWizards.examples.layoutservice.projectName=org.eclipse.gmf.examples.runtime.diagram.layout

newWizards.examples.decorationservice.name = Review Decorator Provider
newWizards.examples.decorationservice.desc = Create a plug-in that contributes a decorator provider that demonstrates how to adorn a note with an icon depending on the contents of the text (Passed vs. Failed)
newWizards.examples.decorationservice.projectPage.title = Review Decorator Provider Diagram Plug-in
newWizards.examples.decorationservice.projectPage.desc = Create a plug-in that contributes a decorator provider that demonstrates how to adorn a note with an icon depending on the contents of the text (Passed vs. Failed)
newWizards.examples.decorationservice.projectName=org.eclipse.gmf.examples.runtime.diagram.decorator

newWizards.examples.serviceexample.name = Service
newWizards.examples.serviceexample.description = Creates the Service Example Plugin which demonstrates the use of the Service.
newWizards.examples.serviceexample.projectPage.title = Service Example Plug-in Project Creation
newWizards.examples.serviceexample.projectPage.desc = Creates the Service Example plug-in project
newWizards.examples.serviceexample.projectName=org.eclipse.gmf.examples.runtime.common.service

newWizards.examples.clipboard.name = Clipboard Support
newWizards.examples.clipboard.description = Creates the Clipboard Support Example Plugin
newWizards.examples.clipboard.projectPage.title = Clipboard Support Example Plug-in Project Creation
newWizards.examples.clipboard.projectPage.desc = Creates the Clipboard Support Example plug-in project
newWizards.examples.clipboard.projectName=org.eclipse.gmf.examples.runtime.emf.clipboard


#
# END TRANSLATABLE
#

# Convention used by the GMF build procedure to pack example zips
# zip@<example_plugin_id> = <filename>.zip
#
zip@org.eclipse.gmf.examples.runtime.diagram.logic = examples/logic.zip
zip@org.eclipse.gmf.examples.runtime.diagram.logic.model = examples/logicSemantic.zip
zip@org.eclipse.gmf.examples.runtime.diagram.logic.model.edit = examples/logicSemanticEdit.zip
zip@org.eclipse.gmf.examples.runtime.diagram.logic.model.editor = examples/logicSemanticEditor.zip
zip@org.eclipse.gmf.examples.runtime.diagram.geoshapes = examples/geoshapes.zip
zip@org.eclipse.gmf.examples.runtime.diagram.layout = examples/servicesLayout.zip
zip@org.eclipse.gmf.examples.runtime.diagram.decorator = examples/servicesDecorator.zip
zip@org.eclipse.gmf.examples.runtime.common.service = examples/serviceExample.zip
zip@org.eclipse.gmf.examples.runtime.emf.clipboard = examples/emf-clipboard-copypaste.zip

