###############################################################################
# This file is part of "Object Teams Development Tooling"-Software
#
# Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
# for its Fraunhofer Institute for Computer Architecture and Software
# Technology (FIRST), Berlin, Germany and Technical University Berlin,
# Germany.
#
# 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
#
# Please visit http://www.eclipse.org/objectteams for updates and contact.
#
# Contributors:
# Fraunhofer FIRST - Initial API and implementation
# Technical University Berlin - Initial API and implementation
###############################################################################

# NewOTProjectCreationWizard
NewOTProjectCreationWizard = OT Wizard
NewOTProjectCreationWizard.title = New OT Project Wizard
NewOTProjectCreationWizard.MainPage.title = Object Teams Project
NewOTProjectCreationWizard.MainPage.description = Create a new Object Teams project


# ------- strings for NewTypeWizardPage are now in OTNewWizardMessages ------- 

#BindingEditor
BindingEditor.AddconnectorDialog.title= Add Type Binding
BindingEditor.AddconnectorDialog.RoleClassSelect.title= Choose a role type
BindingEditor.AddconnectorDialog.RoleClassSelect.Input.title = Select a role type (? = any character, * = any String)
BindingEditor.AddconnectorDialog.RoleClassSelect.List.title= Matching types:
BindingEditor.AddconnectorDialog.BaseClassSelect.title= Choose a base type
BindingEditor.AddconnectorDialog.BaseClassSelect.Input.title = Select a base type (? = any character, * = any String)
BindingEditor.AddTypeBindingDialog.use_base_as_anchor=Use "base" as type anchor
BindingEditor.AddTypeBindingDialog.use_specified_base_as_anchor=Use "base" ({0}) as type anchor
BindingEditor.AddTypeBindingDialog.missing_class=No base class or no role class selected.
BindingEditor.AddTypeBindingDialog.error_retrieving_roles=An Error occurred, while trying to get roles from team {0}.
BindingEditor.generic_error_in_dialog=Error in {0}

CallinMappingConfiguration_dialog_title=Callin Mapping Configuration
CalloutMappingConfiguration_dialog_title=Callout Mapping Configuration
MethodMappingConfiguration_no_method_binding_selected=<no method binding selected>
MethodMappingConfiguration_param_mapping_group_title=Parameter Mapping
MethodMappingConfiguration_result_mapping_group_title=Result Mapping
MethodMappingConfiguration_apply_button_label=Apply

#CallinMarkerCreator:
CallinMarkerJob.job_title=Callin Marker Creator
CallinMarker.menu_playedby_title=OT/J bound roles
CallinMarker.menu_callin_title=OT/J callin bindings
CallinMarker.menu_callout_title=OT/J callout decapsulation
CallinMarker.playedby_tooltip=Role(s) bound to
CallinMarker.callin_tooltip=Callin binding(s) to
CallinMarker.callout_tooltip=Decapsulating callout binding(s) to
CallinMarkerCreator2.creating_markers_message=Creating markers...
CallinMarkerCreator2.updating_for_resource_message=Updating callin markers for resource {0}
CallinMarkerCreator2.updating_for_method_message=Updating callin markers for method {0}
CallinMarkerCreator2.searching_callin_binding_message=Searching for callin bindings...
CallinMarkerCreator2.search_failed_message=Searching for bound base methods failed -- no markers will be shown.
CallinMarkerCreator2.search_canceled_message=Searching for bound base methods canceled -- no markers will be shown.
CallinMarkerCreator2.line_number_error_message=Cannot compute line number for callin marker

#Team activation tab:
TeamConfig.tab_title=Team Activation
TeamConfig.activate_checkbox_description=Instantiate and activate the following teams at program launch
TeamConfig.choose_team_dialog_title=Choose a Team
TeamConfig.choose_team_dialog_description=Enter the Team's name (? = any character, * = any String)
TeamConfig.add_team_button_label=&Add...
TeamConfig.remove_team_button_label=Remo&ve
TeamConfig.team_up_button_label=Up
TeamConfig.team_down_button_label=Down

TeamConfig.not_found_message=The following teams can not be found anymore and will not be statically activated.\n
TeamConfig.error_adding_team_title=Error adding team
TeamConfig.error_adding_team_message=Couldn't add the team {0}
TeamConfig.cannot_instantiate_message=The teams must not be abstract and have a public default constructor or none at all.
TeamConfig.project_not_set_title=Project not set
TeamConfig.project_not_set_message=You need to select a project in the 'Main' tab first.

