# Explorer messages.properties
#
#/*******************************************************************************
# * Copyright (c) 2008 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
# *******************************************************************************/

# Explorer
EXPLORER.DECORATOR_FOLDER=Decorators
EXPLORER.EXPERIMENT_FOLDER=Experiments
EXPLORER.GRAPH_FOLDER=Graphs
EXPLORER.MODEL_FOLDER=Models
EXPLORER.MODIFIER_FOLDER=Modifiers
EXPLORER.PREDICATE_FOLDER=Predicate
EXPLORER.SCENARIO_FOLDER=Scenarios
EXPLORER.SEQUENCER_FOLDER=Sequencers
EXPLORER.TRIGGER_FOLDER=Triggers
EXPLORER.RECORDED_SIMULATIONS_FOLDER=Recorded Simulations
EXPLORER.LOGGER_FOLDER=Loggers
