# ==============================================================================
#*+------------------------------------------------------------------------+
#*| Copyright (c) 2005  IBM Corporation 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                              |
#*|                                                                        |
#*| Contributors:                                                          |
#*|    IBM Corporation - initial API and implementation                    |
#*+------------------------------------------------------------------------+
# ==============================================================================
# =================================================================================
# Logic Example Internal - Translation Instruction : do not translate this section 
# =================================================================================
Plugin.name = GMF Logic Shapes
Plugin.providerName = Eclipse Modeling Project
ext.globalActionHandlerProviders = Logic Editor Global Action Handler Providers
ext.contributionItemProvider = Logic Diagram Contribution Item Provider
ext.iconProvider = Logic Diagram Icon Provider
ext.LogicDiagramPreferenceStore = Logic Diagram Preference Store
ext.logicPaletteProvider = Logic Diagram Palette Provider
ext.actionFilterProviders = Logic Diagram Action Filter Provider
# ==============================================================================
# Logic Shapes - Palette -  Translation Instruction:  section to be 
# translated
# ==============================================================================
GMF_example_wizard_category_name: GMF (Graphical Modeling Framework) Diagrams

Logic_example_wizard_description: An example of a wizard that creates sample logic file

Logic_example_graphical_editor_name: Logic editor

CreateLogicPage1.Title: Create logic file

CreateLogicPage1.Description: Create a new logic file resource.

CreateLogicPage1.ModelNames.GroupName: Logic Model Samples

CreateLogicPage1.ModelNames.EmptyModelName: Empty Model

LogicDrawer.Label: Logic Designer
LogicDrawer.Description: Logic Shapes Drawer.

LogicFlowTool.Label: Logic Flow
LogicFlowTool.Description: Creates a container that can hold other circuit components.

CircuitTool.Label: Circuit
CircuitTool.Description: Create a circuit. It can be connected to external circuits/parts, and can have an intricate design as well.

LEDTool.Label: LED
LEDTool.Description: Creates an LED which is used to read voltage input/output.

ConnectionTool.Label: Connection
ConnectionTool.Description: Connection tool can be used to connect the various circuit parts. 

GateStack.Label = Gates
GateStack.Description = Gate Stack

OrGateTool.Label: Or Gate
OrGateTool.Description: Creates a gate that can perfom the logical OR operation.

XORGateTool.Label: XOR Gate
XORGateTool.Description: Creates a gate that can perfom the logical XOR operation.

AndGateTool.Label: And Gate
AndGateTool.Description: Creates a gate that can perfom the logical AND operation.

HalfAdderTool.Label: HalfAdder
HalfAdderTool.Description: Creates a circuit representing a half-adder.

FullAdderTool.Label: FullAdder
FullAdderTool.Description: Creates a circuit representing a full-adder (uses two half-adders).

ModelTool.Label: Logic Diagram

# ==============================================================================
# Provider names  - Translation Instruction: section to be translated
# ==============================================================================

logic.provider.modelingassistant = Logic Diagram Modeling Assistant Provider

# ==============================================================================
# Preference Pages  - Translation Instruction: section to be translated
# ==============================================================================

PreferencePage.Root.Diagrams = Logic Diagrams
PreferencePage.Appearance = Appearance
PreferencePage.Connections = Connections
PreferencePage.Printing = Printing
PreferencePage.RulerGrid = Rulers and Grid
PreferencePage.Pathmaps = Path Maps

# ==============================================================================
# Menu Items  - Translation Instruction: section to be translated
# ==============================================================================
CreateCircuit.ActionLabel = Create Circuit
CreateHalfAdder.ActionLabel = Create Half Adder
