/*=============================================================================#
 # Copyright (c) 2009, 2020 Stephan Wahlbrink 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, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.ltk.ui.sourceediting;


/**
 * 
 * @see org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds
 */
public interface ISourceEditorCommandIds {
	
	
//--Edit--
	
	/**
	 * Action definition ID of the 'edit' &gt; 'copy (qualified) (element) name' action
	 * 
	 * Value: @value
	 */
	public static final String COPY_ELEMENT_NAME= "org.eclipse.statet.workbench.commands.CopyElementName"; //$NON-NLS-1$
	
//--Navigation--
	
	/**
	 * Action definition ID of the 'navigate' &gt; 'go to matching bracket' action
	 * 
	 * Value: @value
	 */
	public static final String GOTO_MATCHING_BRACKET= 	"org.eclipse.statet.ecommons.text.commands.GotoMatchingBracket"; //$NON-NLS-1$
	
	/**
	 * Action definition ID of the edit -> select enclosing action
	 * 
	 * Value: @value
	 */
	public static final String SELECT_ENCLOSING= 		"org.eclipse.statet.workbench.commands.SelectExpandEnclosing"; //$NON-NLS-1$
	
	/**
	 * Action definition ID of the edit -> select next action
	 * 
	 * Value: @value
	 */
	public static final String SELECT_NEXT= 			"org.eclipse.statet.workbench.commands.SelectExpandNext"; //$NON-NLS-1$
	
	/**
	 * Action definition ID of the edit -> select previous action
	 * 
	 * Value: @value
	 */
	public static final String SELECT_PREVIOUS= 		"org.eclipse.statet.workbench.commands.SelectExpandPrevious"; //$NON-NLS-1$
	
	/**
	 * Action definition ID of the edit -> select restore last action
	 * 
	 * Value: @value
	 */
	public static final String SELECT_LAST= 			"org.eclipse.statet.workbench.commands.SelectLast"; //$NON-NLS-1$
	
	/**
	 * ID for command to invoke a specific content assist (with a single content assist category).
	 * 
	 * Command required attribute {@link #SPECIFIC_CONTENT_ASSIST_CATEGORY_PARAMETER_ID}.
	 */
	public static final String SPECIFIC_CONTENT_ASSIST_COMMAND_ID= "org.eclipse.statet.ltk.commands.SpecificContentAssist"; //$NON-NLS-1$
	
	/**
	 * ID for command parameter for {@link #SPECIFIC_CONTENT_ASSIST_COMMAND_ID} specifying the category to show.
	 */
	public static final String SPECIFIC_CONTENT_ASSIST_CATEGORY_PARAMETER_ID= "categoryId"; //$NON-NLS-1$
	
	
	/**
	 * Action definition ID of the 'source' &gt; 'toggle comment' action
	 * 
	 * Value: @value
	 */
	public static final String TOGGLE_COMMENT= 		"org.eclipse.statet.ltk.commands.ToggleComment"; //$NON-NLS-1$
	
}
