# Copyright (c) 2015, 2018 Obeo.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors: Obeo - initial API and implementation

pluginName=EEF IDE UI
providerName=Eclipse Modeling Project
eefLifecycleManagerProviderExtensionPoint.name = EEF Lifecycle Manager Provider

EEFIdeUi_PreferencePage_Name=EEF

EEFPreferencePage_DebugButton_Text=Activate debug mode
EEFPreferencePage_DebugButton_Tooltip=The debug mode will be used in order to log\n\
additional messages regarding the state of the\n\
application
EEFIdeUiPlugin_lifecycleManagerNotFound=No lifecycle manager can be found for the custom widget : {0}
EEFIdeUiPlugin_lifecycleManagerInvalid=A lifecycle manager exists for the custom widget {0} but is invalid
EEFIdeUiPlugin_fileNotFound=File "{0}" not found
EEFColor_invalidColorCode=The color code {0} is invalid

AbstractEEFWidgetLifecycleManager_invalidSelectionType = StructuredViewer should return an instance of IStructuredSelection from its getSelection() method.

EEFQuickFixWizard_windowTitle=Quick Fix
EEFQuickFixWizard_applyQuickFix=Applying quick fix...
EEFQuickFixPage_title=Quick Fix
EEFQuickFixPage_description=Select a quick fix for ''{0}''
EEFQuickFixPage_label=Select a fix:

EEFQuickFixWizard_noQuickFixAvailable=No quick fix available for your validation issue

EEFValidationRulesPage_title=Messages
EEFValidationRulesPage_description=Select the message to fix
EEFValidationRulesPage_label=Select a message:

AbstractEEFWidgetLifecycleManager_noDescriptionAvailable=No description available
AbstractEEFWidgetLifecycleManager_lockedByOther=This widget is locked by another user
AbstractEEFWidgetLifecycleManager_lockedByMe=This widget is locked for other users
AbstractEEFWidgetLifecycleManager_lockedNoWrite=This widget is locked because of a permission issue

EEFTextLifecycleManager_conflictDialog_title = Model Changed During Edition
EEFTextLifecycleManager_conflictDialog_message = The model has changed in an incompatible way while you were editing this widget.\n\nNew value from the model: {0}\nEdited value: {1}
EEFTextLifecycleManager_conflictDialog_choiceNewModelValue = Use new value from the model
EEFTextLifecycleManager_conflictDialog_choiceLocalEditedValue = Keep the edited value
EEFTextLifecycleManager_textLossByLocking_title = Input Lost
EEFTextLifecycleManager_textLossByLocking_message = The widget has been locked by an asynchronous operation.\nThe current input will be lost: {0}\nDo you want a copy to be placed in the clipboard?
