mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
[260771] - applying patch for drag and drop for make targets
This commit is contained in:
parent
1117c603d8
commit
571a64414d
21 changed files with 2784 additions and 21 deletions
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
|
|
@ -1,7 +1,81 @@
|
||||||
#Thu Nov 20 12:37:55 CET 2008
|
#Sat Jan 10 18:14:54 EST 2009
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.4
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
|
org.eclipse.jdt.core.compiler.compliance=1.5
|
||||||
org.eclipse.jdt.core.compiler.source=1.3
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
|
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||||
|
#org.eclipse.jdt.core.compiler.problem.discouragedReference=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected
|
||||||
|
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.5
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
#Thu Jan 08 10:49:09 CET 2009
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_METHOD=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_TYPE_MEMBER=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_INTERFACE_BOUNDS=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_TO_CLASS=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_TO_ENUM=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD_WITHOUT_DEFAULT_VALUE=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD_WITH_DEFAULT_VALUE=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
|
||||||
|
ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error
|
||||||
|
API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
|
||||||
|
API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERCLASS_SET=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_SUPERCLASS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_TO_ENUM=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error
|
||||||
|
CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
|
||||||
|
CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_TYPE_PARAMETER=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
|
||||||
|
CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_TO_CLASS=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_TO_INTERFACE=Error
|
||||||
|
ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
|
||||||
|
ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
|
||||||
|
ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
|
||||||
|
ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
|
||||||
|
ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
|
||||||
|
FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
|
||||||
|
FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
|
||||||
|
FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
|
||||||
|
FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENTS=Error
|
||||||
|
FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
|
||||||
|
ILLEGAL_EXTEND=Warning
|
||||||
|
ILLEGAL_IMPLEMENT=Warning
|
||||||
|
ILLEGAL_INSTANTIATE=Warning
|
||||||
|
ILLEGAL_OVERRIDE=Warning
|
||||||
|
ILLEGAL_REFERENCE=Warning
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_TYPE_MEMBER=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETERS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_INTERFACE_BOUNDS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_RESTRICTIONS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_TO_ANNOTATION=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_TO_CLASS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_TO_ENUM=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
|
||||||
|
INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
|
||||||
|
INVALID_JAVADOC_TAG=Warning
|
||||||
|
INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Warning
|
||||||
|
LEAK_EXTEND=Warning
|
||||||
|
LEAK_FIELD_DECL=Warning
|
||||||
|
LEAK_IMPLEMENT=Warning
|
||||||
|
LEAK_METHOD_PARAM=Warning
|
||||||
|
LEAK_METHOD_RETURN_TYPE=Warning
|
||||||
|
METHOD_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_ADDED_INTERFACE_BOUNDS=Error
|
||||||
|
METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
|
||||||
|
METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_TYPE_PARAMETER=Error
|
||||||
|
METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_INTERFACE_BOUNDS=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
|
||||||
|
METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETERS=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
|
||||||
|
TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
|
||||||
|
UNUSED_PROBLEM_FILTERS=Warning
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
incompatible_api_component_version=Error
|
||||||
|
incompatible_api_component_version_include_major_without_breaking_change=Disabled
|
||||||
|
incompatible_api_component_version_include_minor_without_api_change=Disabled
|
||||||
|
invalid_since_tag_version=Error
|
||||||
|
malformed_since_tag=Error
|
||||||
|
missing_since_tag=Error
|
||||||
|
report_api_breakage_when_major_version_incremented=Disabled
|
||||||
|
report_resolution_errors_api_component=Warning
|
|
@ -37,4 +37,4 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
|
||||||
org.eclipse.compare;bundle-version="[3.3.0,4.0.0)",
|
org.eclipse.compare;bundle-version="[3.3.0,4.0.0)",
|
||||||
org.eclipse.core.filesystem;bundle-version="1.2.0"
|
org.eclipse.core.filesystem;bundle-version="1.2.0"
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
Bundle-RequiredExecutionEnvironment: J2SE-1.4
|
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||||
|
|
|
@ -82,7 +82,7 @@ Includes.tooltip=Includes list
|
||||||
Symbols=Symbols
|
Symbols=Symbols
|
||||||
Symbols.tooltip=Macros list
|
Symbols.tooltip=Macros list
|
||||||
# menu label
|
# menu label
|
||||||
Make.targets.menu=Make targets
|
Make.targets.menu=Make Targets
|
||||||
|
|
||||||
# Makefile compare font
|
# Makefile compare font
|
||||||
makeCompareFontDefinition.label= Makefile compare text font
|
makeCompareFontDefinition.label= Makefile compare text font
|
||||||
|
|
|
@ -142,6 +142,22 @@ MakeTargetDialog.button.create=Create
|
||||||
MakeTargetDialog.exception.makeTargetError=Make Target Error
|
MakeTargetDialog.exception.makeTargetError=Make Target Error
|
||||||
MakeTargetDialog.exception.errorAddingTarget=Error adding target
|
MakeTargetDialog.exception.errorAddingTarget=Error adding target
|
||||||
|
|
||||||
|
MakeTargetDnD.moving=Moving make targets to
|
||||||
|
MakeTargetDnD.moving.one=Moving target
|
||||||
|
MakeTargetDnD.copying=Copying make targets to
|
||||||
|
MakeTargetDnD.copying.one=Copying target
|
||||||
|
MakeTargetDnD.deleting=Deleting make targets
|
||||||
|
MakeTargetDnD.deleting.one=Deleting target
|
||||||
|
|
||||||
|
MakeTargetDnD.title.createInfo=Create Make Target Information
|
||||||
|
MakeTargetDnD.message.createNonFileTargetAttempt=Attempt to create non-file targets will be ignored. Only file selection is supported by this operation.
|
||||||
|
MakeTargetDnD.title.createError=Create Make Target Error
|
||||||
|
MakeTargetDnD.message.createError=There were errors creating make targets in Make Target View. See log for more details.
|
||||||
|
MakeTargetDnD.title.createFromTextConfirm=Confirm Creating Make Targets
|
||||||
|
MakeTargetDnD.message.createFromTextConfirm=Do you really want to create multiple make targets ({0}) from the multiline text?\n\n
|
||||||
|
MakeTargetDnD.title.overwriteTargetConfirm=Confirm Overwriting Make Target
|
||||||
|
MakeTargetDnD.message.overwriteTargetConfirm=Make Target "{0}" exists in this folder. Do you want to overwrite it?
|
||||||
|
|
||||||
SettingsBlock.title.selectLocationToBuildFrom=Selection Location to build from.
|
SettingsBlock.title.selectLocationToBuildFrom=Selection Location to build from.
|
||||||
SettingsBlock.label.missingBuilderInformation=Builder is missing or disabled on project.
|
SettingsBlock.label.missingBuilderInformation=Builder is missing or disabled on project.
|
||||||
SettingsBlock.monitor.applyingSettings=Applying Settings...
|
SettingsBlock.monitor.applyingSettings=Applying Settings...
|
||||||
|
@ -169,6 +185,14 @@ AddTargetAction.tooltip=Add Make Target
|
||||||
AddTargetAction.exception.internalError=Internal Error
|
AddTargetAction.exception.internalError=Internal Error
|
||||||
AddTargetAction.=Internal Error
|
AddTargetAction.=Internal Error
|
||||||
|
|
||||||
|
CopyTargetAction.label=&Copy Target
|
||||||
|
CopyTargetAction.tooltip=Copy Make Target
|
||||||
|
CopyTargetAction.title.clipboardProblem=Problem Copying to Clipboard
|
||||||
|
CopyTargetAction.message.clipboardProblem=There was a problem when accessing the system clipboard.
|
||||||
|
|
||||||
|
PasteTargetAction.label=&Paste Target
|
||||||
|
PasteTargetAction.tooltip=Paste Make Target
|
||||||
|
|
||||||
FilterEmptyFolderAction.label=Hide Empty Folders
|
FilterEmptyFolderAction.label=Hide Empty Folders
|
||||||
FilterEmptyFolderAction.tooltip=Hide Empty Folders
|
FilterEmptyFolderAction.tooltip=Hide Empty Folders
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,262 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.jface.util.TransferDropTargetListener;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.DropTargetEvent;
|
||||||
|
import org.eclipse.swt.dnd.DropTargetListener;
|
||||||
|
import org.eclipse.swt.dnd.TransferData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This abstract class provides a frame for {@link DropTargetListener} able to accept a
|
||||||
|
* drop into a container area. A container area includes the container itself and
|
||||||
|
* the items directly belonging to the container. A drop into the container area is
|
||||||
|
* treated as a drop on the container itself. Also, some flexibility for adjusting
|
||||||
|
* drop operation is provided.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractContainerAreaDropAdapter implements TransferDropTargetListener {
|
||||||
|
|
||||||
|
private int originallyRequestedOperation = DND.DROP_NONE;
|
||||||
|
private IContainer lastDragOverContainer = null;
|
||||||
|
private int lastDragOverOperation = DND.DROP_NONE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method lets changing initial drag operation. The operation will be
|
||||||
|
* indicated by mouse cursor. This operation is passed in {@code event.detail}
|
||||||
|
* to {@code dragEnter} method.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation. The return must be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
*
|
||||||
|
* @see DropTargetListener#dragEnter(DropTargetEvent)
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
* @see DND#DROP_DEFAULT
|
||||||
|
*/
|
||||||
|
protected abstract int dragEnterOperation(int operation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method lets adjust drag operation over container area. The operation
|
||||||
|
* will be indicated by mouse cursor. This operation is passed in {@code
|
||||||
|
* event.detail} to {@code dragOver} method.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @param dropContainer - container where drop is going to be.
|
||||||
|
* @return changed operation. The return must be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @see DropTargetListener#dragOver(DropTargetEvent)
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
* @see DND#DROP_DEFAULT
|
||||||
|
*/
|
||||||
|
protected abstract int dragOverOperation(int operation, IContainer dropContainer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the actual drop of {@code dropObject} to {@code dropContainer}.
|
||||||
|
*
|
||||||
|
* @param dropObject - object to drop.
|
||||||
|
* @param dropContainer - container where to drop the object.
|
||||||
|
* @param operation - drop operation.
|
||||||
|
*
|
||||||
|
* @see DropTargetListener#drop(DropTargetEvent)
|
||||||
|
*/
|
||||||
|
protected abstract void dropToContainer(Object dropObject, IContainer dropContainer,
|
||||||
|
int operation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines if a transfer data is supported by the implementer.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.Transfer#isSupportedType
|
||||||
|
*
|
||||||
|
* @param transferData - data type to examine
|
||||||
|
* @return whether the given data type is supported by this listener
|
||||||
|
*/
|
||||||
|
public boolean isSupportedType(TransferData transferData) {
|
||||||
|
return getTransfer().isSupportedType(transferData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is called only the listener is able to handle provided data type.
|
||||||
|
* By default {@code isEnabled} returns {@code true} but subclasses are free to
|
||||||
|
* override.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event.
|
||||||
|
* @return {@code true}
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public boolean isEnabled(DropTargetEvent event) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#dragEnter} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void dragEnter(DropTargetEvent event) {
|
||||||
|
lastDragOverContainer = null;
|
||||||
|
lastDragOverOperation = DND.DROP_NONE;
|
||||||
|
|
||||||
|
if (isSupportedType(event.currentDataType)) {
|
||||||
|
originallyRequestedOperation = event.detail;
|
||||||
|
event.detail = dragEnterOperation(originallyRequestedOperation);
|
||||||
|
} else {
|
||||||
|
event.detail = DND.DROP_NONE;
|
||||||
|
originallyRequestedOperation = DND.DROP_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#dragOperationChanged} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void dragOperationChanged(DropTargetEvent event) {
|
||||||
|
originallyRequestedOperation = event.detail;
|
||||||
|
event.detail = dragOverOperationCached(originallyRequestedOperation,
|
||||||
|
determineDropContainer(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#dragOver} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void dragOver(DropTargetEvent event) {
|
||||||
|
event.detail = dragOverOperationCached(originallyRequestedOperation,
|
||||||
|
determineDropContainer(event));
|
||||||
|
|
||||||
|
if (originallyRequestedOperation != DND.DROP_NONE) {
|
||||||
|
// let user discover items even if event.detail is DND.DROP_NONE
|
||||||
|
// since the original operation could be applicable to other items
|
||||||
|
event.feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND;
|
||||||
|
if (event.detail != DND.DROP_NONE) {
|
||||||
|
event.feedback = event.feedback | DND.FEEDBACK_SELECT;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
event.feedback = DND.FEEDBACK_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#dragLeave} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void dragLeave(DropTargetEvent event) {
|
||||||
|
// no action
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#dropAccept} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void dropAccept(DropTargetEvent event) {
|
||||||
|
// no action
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@code DropTargetListener#drop} to support
|
||||||
|
* dropping into container area.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drag event
|
||||||
|
*
|
||||||
|
* @see DropTargetEvent
|
||||||
|
*/
|
||||||
|
public void drop(DropTargetEvent event) {
|
||||||
|
IContainer dropContainer = determineDropContainer(event);
|
||||||
|
if (dropContainer != null) {
|
||||||
|
event.detail = dragOverOperationCached(event.detail, dropContainer);
|
||||||
|
dropToContainer(event.data, dropContainer, event.detail);
|
||||||
|
} else {
|
||||||
|
event.detail = DND.DROP_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method provides caching of potentially long running and called on each
|
||||||
|
* mouse move {@link dragOverOperation}.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @param dropContainer - container where drop is going to be.
|
||||||
|
* @return changed operation. The return must be one of
|
||||||
|
* org.eclipse.swt.dnd.DND operations such as {@link DND#DROP_NONE},
|
||||||
|
* {@link DND#DROP_COPY}, {@link DND#DROP_MOVE},
|
||||||
|
* {@link DND#DROP_LINK}
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @see DropTargetListener#dragOver(DropTargetEvent)
|
||||||
|
*/
|
||||||
|
private int dragOverOperationCached(int operation, IContainer dropContainer) {
|
||||||
|
if (dropContainer != lastDragOverContainer || operation != lastDragOverOperation) {
|
||||||
|
lastDragOverOperation = dragOverOperation(operation, dropContainer);
|
||||||
|
lastDragOverContainer = dropContainer;
|
||||||
|
}
|
||||||
|
return lastDragOverOperation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the drop target passed by {@code event.item}.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drop event
|
||||||
|
*/
|
||||||
|
private static Object determineDropTarget(DropTargetEvent event) {
|
||||||
|
return event.item == null ? null : event.item.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find which container area the mouse cursor is currently in.
|
||||||
|
*
|
||||||
|
* @param event - the information associated with the drop event
|
||||||
|
* @return the container of the current mouse location.
|
||||||
|
*/
|
||||||
|
public static IContainer determineDropContainer(DropTargetEvent event) {
|
||||||
|
Object dropTarget = determineDropTarget(event);
|
||||||
|
if (dropTarget instanceof IMakeTarget) {
|
||||||
|
return ((IMakeTarget) dropTarget).getContainer();
|
||||||
|
} else if (dropTarget instanceof IContainer) {
|
||||||
|
return (IContainer) dropTarget;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,129 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.jface.util.TransferDragSourceListener;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionProvider;
|
||||||
|
import org.eclipse.swt.dnd.DragSourceEvent;
|
||||||
|
import org.eclipse.swt.dnd.TransferData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This abstract class provides a convenience frame for DragSourceListener to support
|
||||||
|
* dragging of selected items in a view.
|
||||||
|
* <p>
|
||||||
|
* There is similar implementation in plugin {@code org.eclipse.cdt.ui} -
|
||||||
|
* {@code org.eclipse.cdt.internal.ui.dnd.BasicSelectionTransferDragAdapter}.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractSelectionDragAdapter implements TransferDragSourceListener {
|
||||||
|
private final ISelectionProvider fProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting selection provider.
|
||||||
|
* @param provider - selection provider.
|
||||||
|
*/
|
||||||
|
public AbstractSelectionDragAdapter(ISelectionProvider provider) {
|
||||||
|
fProvider= provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the elements contained in the given selection can be dragged.
|
||||||
|
* If {@code false} {@link #dragStart} method won't initiate the drag.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return {@code true} if the selection can be dragged.
|
||||||
|
*/
|
||||||
|
protected abstract boolean isDragable(ISelection selection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action executed during drag initialization. Executed from
|
||||||
|
* {@link #dragStart}.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
*/
|
||||||
|
protected abstract void dragInit(ISelection selection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the selection to be passed via {@code Transfer} agent. Used by
|
||||||
|
* {@link #dragSetData}.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return data to be passed. Can be any type the specific transfer supports.
|
||||||
|
*/
|
||||||
|
protected abstract Object prepareDataForTransfer(ISelection selection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action to gracefully finish the drag. Executed by {@link #dragFinished}.
|
||||||
|
*/
|
||||||
|
protected abstract void dragDone();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines if a transfer data is supported by the implementer.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.Transfer#isSupportedType
|
||||||
|
*
|
||||||
|
* @param transferData - data type to examine
|
||||||
|
* @return {@code true} if the given data type is supported by this listener
|
||||||
|
*/
|
||||||
|
public boolean isSupportedType(TransferData transferData) {
|
||||||
|
return getTransfer().isSupportedType(transferData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start of the action to drag the widget.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener#dragStart
|
||||||
|
*
|
||||||
|
* @param event the information associated with the drag event
|
||||||
|
*/
|
||||||
|
public void dragStart(DragSourceEvent event) {
|
||||||
|
ISelection selection= fProvider.getSelection();
|
||||||
|
if (isDragable(selection)) {
|
||||||
|
dragInit(selection);
|
||||||
|
} else {
|
||||||
|
dragDone();
|
||||||
|
event.doit = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attach to the event the data from the drag source.
|
||||||
|
*
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener#dragSetData
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceEvent
|
||||||
|
*
|
||||||
|
* @param event the information associated with the drag event
|
||||||
|
*/
|
||||||
|
public void dragSetData(DragSourceEvent event) {
|
||||||
|
// Define data type so a listener could examine it with isSupportedType().
|
||||||
|
// The selection is not passed using event by the LocalSelectionTransfer internally.
|
||||||
|
if (isSupportedType(event.dataType)) {
|
||||||
|
event.data= prepareDataForTransfer(fProvider.getSelection());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function is called upon the completion of the drop. Cleanup is performed.
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener#dragFinished
|
||||||
|
*
|
||||||
|
* @param event the information associated with the drag event
|
||||||
|
*/
|
||||||
|
public void dragFinished(DragSourceEvent event) {
|
||||||
|
dragDone();
|
||||||
|
event.doit = false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.internal.core.MakeTargetManager;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.FileTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code FileTransferDropTargetListener} handles dropping of files to Make
|
||||||
|
* Target View. {@link FileTransfer} is used as the transfer agent. The files
|
||||||
|
* passed are treated as make targets.
|
||||||
|
*
|
||||||
|
* @see AbstractContainerAreaDropAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*/
|
||||||
|
public class FileTransferDropTargetListener extends AbstractContainerAreaDropAdapter {
|
||||||
|
|
||||||
|
private final Viewer fViewer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting a viewer such as TreeViewer to pull selection from later on.
|
||||||
|
* @param viewer - the viewer providing shell for UI.
|
||||||
|
*/
|
||||||
|
public FileTransferDropTargetListener(Viewer viewer) {
|
||||||
|
fViewer = viewer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return FileTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial drag operation. Only {@link DND#DROP_COPY} is supported for
|
||||||
|
* dropping files to Make Target View, same as for {@code dragOverOperation}.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragEnterOperation(int operation) {
|
||||||
|
return dragOverOperation(operation, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation of dragging over a drop target. Only {@link DND#DROP_COPY} is
|
||||||
|
* supported for dropping files to Make Target View.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragOverOperation(int operation, IContainer dropContainer) {
|
||||||
|
// This class is intended only for drag/drop between eclipse instances,
|
||||||
|
// so DND_COPY always set and we don't bother checking if the target is the source
|
||||||
|
if (operation!=DND.DROP_NONE) {
|
||||||
|
return DND.DROP_COPY;
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the actual drop of {@code dropObject} to {@code dropContainer}.
|
||||||
|
*
|
||||||
|
* @param dropObject - object to drop.
|
||||||
|
* @param dropContainer - container where to drop the object.
|
||||||
|
* @param operation - drop operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dropToContainer(Object dropObject, IContainer dropContainer, int operation) {
|
||||||
|
if (dropObject instanceof String[] && ((String[])dropObject).length>0 && dropContainer!=null) {
|
||||||
|
Shell shell = fViewer.getControl().getShell();
|
||||||
|
createFileTargetsUI((String[])dropObject, dropContainer, operation, shell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates make targets array from filenames array. These will be loose
|
||||||
|
* targets not connected to global make target list managed by
|
||||||
|
* {@link MakeTargetManager}.
|
||||||
|
*
|
||||||
|
* @param filenames - array of filenames. Each filename expected to be an
|
||||||
|
* actual file otherwise a user gets a warning popup.
|
||||||
|
* @param dropContainer - a container where the targets are being created.
|
||||||
|
* @param shell - a shell to display warnings to user. If null, no warnings
|
||||||
|
* are displayed.
|
||||||
|
* @return array of make targets.
|
||||||
|
*/
|
||||||
|
private static IMakeTarget[] prepareMakeTargetsFromFiles(String[] filenames,
|
||||||
|
IContainer dropContainer, Shell shell) {
|
||||||
|
List<IMakeTarget> makeTargetsList = new ArrayList<IMakeTarget>(filenames.length);
|
||||||
|
|
||||||
|
int errorCount = 0;
|
||||||
|
int nonFileCount = 0;
|
||||||
|
for (String filepath : filenames) {
|
||||||
|
IPath path = new Path(filepath);
|
||||||
|
File file = path.toFile();
|
||||||
|
if (file.isFile()) {
|
||||||
|
String name = path.lastSegment();
|
||||||
|
try {
|
||||||
|
String buildCommand = MakeTargetDndUtil.getProjectBuildCommand(dropContainer.getProject());
|
||||||
|
makeTargetsList.add(MakeTargetDndUtil.createMakeTarget(name, filepath, buildCommand, dropContainer));
|
||||||
|
} catch (CoreException e) {
|
||||||
|
errorCount++;
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
nonFileCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shell != null) {
|
||||||
|
if (errorCount > 0) {
|
||||||
|
MessageDialog.openError(shell, MakeUIPlugin.getResourceString("MakeTargetDnD.title.createError"), //$NON-NLS-1$
|
||||||
|
MakeUIPlugin.getResourceString("MakeTargetDnD.message.createError")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
if (nonFileCount > 0) {
|
||||||
|
MessageDialog.openInformation(shell, MakeUIPlugin.getResourceString("MakeTargetDnD.title.createInfo"), //$NON-NLS-1$
|
||||||
|
MakeUIPlugin.getResourceString("MakeTargetDnD.message.createNonFileTargetAttempt")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return makeTargetsList.toArray(new IMakeTarget[makeTargetsList.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates make targets from array of filenames in Make Target View. Each
|
||||||
|
* file will be a separate target in the view.
|
||||||
|
*
|
||||||
|
* @param filenames - array of filenames. Each filename expected to be an
|
||||||
|
* actual file otherwise a user gets a warning popup.
|
||||||
|
* @param dropContainer - a container where the targets are being created.
|
||||||
|
* @param operation - drop/paste operation.
|
||||||
|
* @param shell - a shell to display warnings to the user.
|
||||||
|
*/
|
||||||
|
public static void createFileTargetsUI(String[] filenames, IContainer dropContainer, int operation, Shell shell) {
|
||||||
|
IMakeTarget[] makeTargets = prepareMakeTargetsFromFiles(filenames, dropContainer, shell);
|
||||||
|
MakeTargetDndUtil.copyTargets(makeTargets, dropContainer, operation, shell);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionProvider;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code LocalTransferDragSourceListener} supports dragging of selected objects from
|
||||||
|
* Make Target View. {@link LocalSelectionTransfer} is used as a transfer agent.
|
||||||
|
*
|
||||||
|
* @see AbstractSelectionDragAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener
|
||||||
|
*/
|
||||||
|
public class LocalTransferDragSourceListener extends AbstractSelectionDragAdapter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting selection provider.
|
||||||
|
* @param provider - selection provider.
|
||||||
|
*/
|
||||||
|
public LocalTransferDragSourceListener(ISelectionProvider provider) {
|
||||||
|
super(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return LocalSelectionTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the elements contained in the given selection can be dragged.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return {@code true} if the selection can be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isDragable(ISelection selection) {
|
||||||
|
return MakeTargetDndUtil.isDragable(selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pick the selected elements to be passed by {@link LocalSelectionTransfer}.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dragInit(ISelection selection) {
|
||||||
|
LocalSelectionTransfer.getInstance().setSelection(selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide the selection to attach to the drag event.
|
||||||
|
*
|
||||||
|
* @param selection - not used. The selection is taken from {@link LocalSelectionTransfer}.
|
||||||
|
* @return data to be passed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object prepareDataForTransfer(ISelection selection) {
|
||||||
|
return LocalSelectionTransfer.getInstance().getSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup upon the completion of the drop.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dragDone() {
|
||||||
|
LocalSelectionTransfer.getInstance().setSelection(null);
|
||||||
|
LocalSelectionTransfer.getInstance().setSelectionSetTime(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,231 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code LocalTransferDropTargetListener} supports dropping of dragged selection to
|
||||||
|
* Make Target View. {@link LocalSelectionTransfer} is used as a transfer agent.
|
||||||
|
*
|
||||||
|
* @see AbstractContainerAreaDropAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*/
|
||||||
|
public class LocalTransferDropTargetListener extends AbstractContainerAreaDropAdapter {
|
||||||
|
|
||||||
|
Viewer fViewer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting a viewer such as TreeViewer.
|
||||||
|
*
|
||||||
|
* @param viewer - to provide shell for UI interaction.
|
||||||
|
*/
|
||||||
|
public LocalTransferDropTargetListener(Viewer viewer) {
|
||||||
|
fViewer = viewer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return LocalSelectionTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get selection from {@link LocalSelectionTransfer}.
|
||||||
|
*
|
||||||
|
* @return selection as {@link IStructuredSelection}.
|
||||||
|
*/
|
||||||
|
private IStructuredSelection getSelection() {
|
||||||
|
ISelection selection = LocalSelectionTransfer.getInstance().getSelection();
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
return (IStructuredSelection) selection;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial drag operation. Adjusted to be the least of user initiated
|
||||||
|
* operation and best supported operation for a given selection. The
|
||||||
|
* operation will be indicated by mouse cursor.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragEnterOperation(int operation) {
|
||||||
|
int bestOperation = determineBestOperation(getSelection(), null);
|
||||||
|
if (bestOperation > operation) {
|
||||||
|
bestOperation = operation;
|
||||||
|
}
|
||||||
|
return bestOperation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation on dragging over target . Adjusted to be the least of user
|
||||||
|
* initiated operation and best supported operation for a given selection
|
||||||
|
* considering drop container. The operation will be indicated by mouse
|
||||||
|
* cursor.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @param dropContainer - container where drop is going to be.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragOverOperation(int operation, IContainer dropContainer) {
|
||||||
|
int bestOperation = DND.DROP_NONE;
|
||||||
|
if (dropContainer != null) {
|
||||||
|
bestOperation = determineBestOperation(getSelection(), dropContainer);
|
||||||
|
if (bestOperation > operation) {
|
||||||
|
bestOperation = operation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bestOperation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the actual drop of {@code dropObject} to {@code dropContainer}.
|
||||||
|
*
|
||||||
|
* @param dropObject - object to drop.
|
||||||
|
* @param dropContainer - container where to drop the object.
|
||||||
|
* @param operation - drop operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dropToContainer(Object dropObject, IContainer dropContainer, int operation) {
|
||||||
|
if (dropObject instanceof IStructuredSelection && dropContainer != null) {
|
||||||
|
IMakeTarget[] makeTargets = prepareMakeTargetsFromSelection((IStructuredSelection)dropObject, dropContainer);
|
||||||
|
MakeTargetDndUtil.copyTargets(makeTargets, dropContainer, operation, fViewer.getControl().getShell());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this item is a file or convertible to file.
|
||||||
|
*
|
||||||
|
* @param element - an item to examine.
|
||||||
|
* @return true if convertible to file.
|
||||||
|
*/
|
||||||
|
private static boolean isConvertibleToFile(Object element) {
|
||||||
|
if (element instanceof IAdaptable) {
|
||||||
|
IAdaptable a = (IAdaptable)element;
|
||||||
|
if (a.getAdapter(IFile.class)!=null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate which operations are available for dropping the selection to
|
||||||
|
* the target. {@code IMakeTarget} can be moved but files can only be
|
||||||
|
* copied. The selection should contain only {@code IMakeTarget} or items
|
||||||
|
* convertible to files.
|
||||||
|
*
|
||||||
|
* @param selection - data being dragged.
|
||||||
|
* @param dropContainer - container where drop is targeted.
|
||||||
|
*
|
||||||
|
* @return the most advanced operation available. The return must be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
*
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
*/
|
||||||
|
private int determineBestOperation(IStructuredSelection selection, IContainer dropContainer) {
|
||||||
|
int bestOperation = DND.DROP_NONE;
|
||||||
|
if (selection != null) {
|
||||||
|
List<?> items = selection.toList();
|
||||||
|
for (Object item : items) {
|
||||||
|
if (item instanceof IMakeTarget) {
|
||||||
|
// Looking for a target which is not being copying/moving to itself
|
||||||
|
IContainer container = ((IMakeTarget)item).getContainer();
|
||||||
|
// dropContainer==null means disregard the container
|
||||||
|
if (dropContainer==null || !dropContainer.equals(container)) {
|
||||||
|
if (bestOperation < DND.DROP_MOVE) {
|
||||||
|
bestOperation = DND.DROP_MOVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (isConvertibleToFile(item)) {
|
||||||
|
// Files can be copied
|
||||||
|
if (bestOperation < DND.DROP_COPY) {
|
||||||
|
bestOperation = DND.DROP_COPY;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// if any item is not drop-able selection is not drop-able
|
||||||
|
bestOperation = DND.DROP_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bestOperation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide the list of make targets made out of selected elements. This method assumes
|
||||||
|
* {@code IMakeTarget} or items adaptable to files in the selection.
|
||||||
|
*
|
||||||
|
* @param selection - selected items.
|
||||||
|
* @param dropContainer - container where make targets will belong to.
|
||||||
|
* @return an array of {@code IMakeTarget}s.
|
||||||
|
*/
|
||||||
|
private static IMakeTarget[] prepareMakeTargetsFromSelection(IStructuredSelection selection, IContainer dropContainer) {
|
||||||
|
List<?> elements = selection.toList();
|
||||||
|
List<IMakeTarget> makeTargetsList= new ArrayList<IMakeTarget>(elements.size());
|
||||||
|
for (Object element : elements) {
|
||||||
|
if (element instanceof IMakeTarget) {
|
||||||
|
IMakeTarget makeTarget = (IMakeTarget)element;
|
||||||
|
if (!makeTarget.getContainer().equals(dropContainer)) {
|
||||||
|
makeTargetsList.add(makeTarget);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
} else if (isConvertibleToFile(element)) {
|
||||||
|
IAdaptable a = (IAdaptable)element;
|
||||||
|
IFile file = (IFile)a.getAdapter(IFile.class);
|
||||||
|
String fileName = file.getName();
|
||||||
|
String fileLocation = file.getLocation().toString();
|
||||||
|
|
||||||
|
if (fileName!=null) {
|
||||||
|
try {
|
||||||
|
String buildCommand = MakeTargetDndUtil.getProjectBuildCommand(dropContainer.getProject());
|
||||||
|
IMakeTarget makeTarget = MakeTargetDndUtil.createMakeTarget(fileName, fileLocation,
|
||||||
|
buildCommand, dropContainer);
|
||||||
|
makeTargetsList.add(makeTarget);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// log any problem then ignore it
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (makeTargetsList.size()>0) {
|
||||||
|
return makeTargetsList.toArray(new IMakeTarget[makeTargetsList.size()]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,388 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTargetManager;
|
||||||
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.core.MakeTarget;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||||
|
import org.eclipse.jface.operation.IRunnableContext;
|
||||||
|
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.SWTException;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of various functions for Make Target View drag and drop support.
|
||||||
|
*/
|
||||||
|
public class MakeTargetDndUtil {
|
||||||
|
private static final int ANSWER_YES_ID = 0;
|
||||||
|
private static final int ANSWER_YES_TO_ALL_ID = 1;
|
||||||
|
private static final int ANSWER_NO_ID = 2;
|
||||||
|
private static final int ANSWER_NO_TO_ALL_ID = 3;
|
||||||
|
private static final int ANSWER_CANCEL_ID = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The previous answer to the question of overwriting all targets.
|
||||||
|
*/
|
||||||
|
protected static int lastUserAnswer = ANSWER_YES_ID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default build command.
|
||||||
|
*/
|
||||||
|
public static final String DEFAULT_BUILD_COMMAND = "make"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return build command from project settings.
|
||||||
|
*/
|
||||||
|
public static String getProjectBuildCommand(IProject project) {
|
||||||
|
IMakeTargetManager targetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||||
|
String[] targetBuilders = targetManager.getTargetBuilders(project);
|
||||||
|
if (targetBuilders==null || targetBuilders.length==0) {
|
||||||
|
return DEFAULT_BUILD_COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
String builderId = targetManager.getBuilderID(targetBuilders[0]);
|
||||||
|
String buildCommand = DEFAULT_BUILD_COMMAND;
|
||||||
|
try {
|
||||||
|
IMakeBuilderInfo buildInfo = MakeCorePlugin.createBuildInfo(project, builderId);
|
||||||
|
buildCommand = buildInfo.getBuildCommand().toString().trim();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// keep default value
|
||||||
|
}
|
||||||
|
return buildCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the selection is allowed to be dragged from Make Target
|
||||||
|
* View. It should be homogeneous having {@code IMakeTrget}s only and no
|
||||||
|
* duplicate names are allowed. Make targets could be selected from
|
||||||
|
* different folders.
|
||||||
|
*
|
||||||
|
* @param selection - make targets selection.
|
||||||
|
* @return {@code true} if the selection is allowed to be dragged.
|
||||||
|
*/
|
||||||
|
public static boolean isDragable(ISelection selection) {
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
List<?> selectedElements = ((IStructuredSelection) selection).toList();
|
||||||
|
if (selectedElements.size() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> names = new ArrayList<String>(selectedElements.size());
|
||||||
|
for (Object element : selectedElements) {
|
||||||
|
if (!(element instanceof IMakeTarget)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String makeTargetName = ((IMakeTarget) element).getName();
|
||||||
|
for (String name : names) {
|
||||||
|
if (makeTargetName == null || makeTargetName.equals(name)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
names.add(makeTargetName);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform action of copying or moving or dropping make targets to specified
|
||||||
|
* container. This action displays a progress bar if user copies more than 1
|
||||||
|
* target.
|
||||||
|
*
|
||||||
|
* @param makeTargets - array of make targets to copy.
|
||||||
|
* @param container - where to copy the selection.
|
||||||
|
* @param operation - copying operation. Should be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
* @param shell - shell to display a progress bar.
|
||||||
|
*
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
* @see DND#DROP_DEFAULT
|
||||||
|
*/
|
||||||
|
public static void copyTargets(IMakeTarget[] makeTargets, IContainer container, int operation,
|
||||||
|
Shell shell) {
|
||||||
|
if (makeTargets == null || makeTargets.length == 0 || container == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastUserAnswer = ANSWER_YES_ID;
|
||||||
|
|
||||||
|
if (makeTargets.length == 1) {
|
||||||
|
try {
|
||||||
|
// Do not slow down generating modal window for a single target
|
||||||
|
copyOneTarget(makeTargets[0], container, operation, shell);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// log any problem then ignore it
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
} else if (makeTargets.length > 1) {
|
||||||
|
copyTargetsWithProgressIndicator(makeTargets, container, operation, shell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy/move one make target to the specified container.
|
||||||
|
*
|
||||||
|
* @param makeTarget - make target.
|
||||||
|
* @param container - container to copy/move to.
|
||||||
|
* @param operation - copying operation. Should be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
* @param shell - shell to display user warnings.
|
||||||
|
* @throws CoreException on the failure of {@link IMakeTargetManager} or
|
||||||
|
* {@link IMakeTarget} operation.
|
||||||
|
*
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
* @see DND#DROP_DEFAULT
|
||||||
|
*/
|
||||||
|
public static void copyOneTarget(IMakeTarget makeTarget, IContainer container,
|
||||||
|
final int operation, Shell shell) throws CoreException {
|
||||||
|
|
||||||
|
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||||
|
IMakeTarget exists = makeTargetManager.findTarget(container, makeTarget.getName());
|
||||||
|
if (exists != null) {
|
||||||
|
int userAnswer = overwriteMakeTargetDialog(makeTarget.getName(), shell);
|
||||||
|
if (userAnswer == ANSWER_YES_ID || userAnswer == ANSWER_YES_TO_ALL_ID) {
|
||||||
|
copyTargetData(makeTarget, exists);
|
||||||
|
if (operation == DND.DROP_MOVE) {
|
||||||
|
makeTargetManager.removeTarget(makeTarget);
|
||||||
|
}
|
||||||
|
} else if (userAnswer == ANSWER_NO_ID || userAnswer == ANSWER_NO_TO_ALL_ID) {
|
||||||
|
// no action
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
makeTargetManager.addTarget(container, cloneTarget(makeTarget, container.getProject()));
|
||||||
|
if (operation == DND.DROP_MOVE) {
|
||||||
|
makeTargetManager.removeTarget(makeTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy/move make targets to a given container. Displays progress bar.
|
||||||
|
*
|
||||||
|
* @param makeTargets - array of make targets to copy.
|
||||||
|
* @param container - container to copy/move to.
|
||||||
|
* @param operation - copying operation. Should be one of
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operations.
|
||||||
|
* @param shell - shell to display a progress bar.
|
||||||
|
*
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
* @see DND#DROP_DEFAULT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static void copyTargetsWithProgressIndicator(final IMakeTarget[] makeTargets,
|
||||||
|
final IContainer container, final int operation, final Shell shell) {
|
||||||
|
IRunnableWithProgress runnable = new IRunnableWithProgress() {
|
||||||
|
public void run(IProgressMonitor monitor) throws InvocationTargetException,
|
||||||
|
InterruptedException {
|
||||||
|
boolean isMove = operation == DND.DROP_MOVE;
|
||||||
|
String textHeader = isMove ? MakeUIPlugin.getResourceString("MakeTargetDnD.moving") //$NON-NLS-1$
|
||||||
|
: MakeUIPlugin.getResourceString("MakeTargetDnD.copying"); //$NON-NLS-1$
|
||||||
|
String textAction = isMove ? MakeUIPlugin
|
||||||
|
.getResourceString("MakeTargetDnD.moving.one") //$NON-NLS-1$
|
||||||
|
: MakeUIPlugin.getResourceString("MakeTargetDnD.copying.one"); //$NON-NLS-1$
|
||||||
|
monitor.beginTask(textHeader + ' ' + container.getName(), makeTargets.length - 1);
|
||||||
|
for (IMakeTarget makeTarget : makeTargets) {
|
||||||
|
if (makeTarget != null) {
|
||||||
|
monitor.subTask(textAction + ' ' + makeTarget.getName());
|
||||||
|
try {
|
||||||
|
copyOneTarget(makeTarget, container, operation, shell);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// log failures but ignore all targets which failed
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
if (lastUserAnswer == ANSWER_CANCEL_ID) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
monitor.worked(1);
|
||||||
|
if (monitor.isCanceled()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
monitor.done();
|
||||||
|
lastUserAnswer = ANSWER_YES_ID;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
IRunnableContext context = new ProgressMonitorDialog(shell);
|
||||||
|
try {
|
||||||
|
context.run(false, true, runnable);
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overwrite Make Target dialog.
|
||||||
|
*
|
||||||
|
* @param name - name of make target to display to a user.
|
||||||
|
* @param shell - shell where to display the dialog.
|
||||||
|
*
|
||||||
|
* @return user's answer.
|
||||||
|
*/
|
||||||
|
private static int overwriteMakeTargetDialog(String name, Shell shell) {
|
||||||
|
|
||||||
|
if (lastUserAnswer == ANSWER_YES_TO_ALL_ID || lastUserAnswer == ANSWER_NO_TO_ALL_ID) {
|
||||||
|
return lastUserAnswer;
|
||||||
|
}
|
||||||
|
|
||||||
|
String labels[] = new String[] { IDialogConstants.YES_LABEL,
|
||||||
|
IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL,
|
||||||
|
IDialogConstants.NO_TO_ALL_LABEL, IDialogConstants.CANCEL_LABEL, };
|
||||||
|
String title = MakeUIPlugin.getResourceString("MakeTargetDnD.title.overwriteTargetConfirm"); //$NON-NLS-1$
|
||||||
|
String question = MessageFormat.format(MakeUIPlugin
|
||||||
|
.getResourceString("MakeTargetDnD.message.overwriteTargetConfirm"), //$NON-NLS-1$
|
||||||
|
new Object[] { name });
|
||||||
|
|
||||||
|
MessageDialog dialog = new MessageDialog(shell, title, null, question,
|
||||||
|
MessageDialog.QUESTION, labels, 0);
|
||||||
|
|
||||||
|
try {
|
||||||
|
dialog.open();
|
||||||
|
lastUserAnswer = dialog.getReturnCode();
|
||||||
|
} catch (SWTException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
lastUserAnswer = ANSWER_CANCEL_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastUserAnswer == SWT.DEFAULT) {
|
||||||
|
// A window close returns SWT.DEFAULT, which has to be
|
||||||
|
// mapped to a cancel
|
||||||
|
lastUserAnswer = ANSWER_CANCEL_ID;
|
||||||
|
}
|
||||||
|
return lastUserAnswer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creating a copy of IMakeTarget in a different project.
|
||||||
|
*
|
||||||
|
* @param makeTarget - make target.
|
||||||
|
* @param project - project where to assign the make target.
|
||||||
|
* @return newly created make target.
|
||||||
|
* @throws CoreException if there is a problem with creating or copying the
|
||||||
|
* target.
|
||||||
|
*/
|
||||||
|
private static IMakeTarget cloneTarget(IMakeTarget makeTarget, IProject project)
|
||||||
|
throws CoreException {
|
||||||
|
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||||
|
String[] ids = makeTargetManager.getTargetBuilders(project);
|
||||||
|
String builderId = ids[0];
|
||||||
|
|
||||||
|
IMakeTarget newMakeTarget = makeTargetManager.createTarget(project, makeTarget.getName(),
|
||||||
|
builderId);
|
||||||
|
copyTargetData(makeTarget, newMakeTarget);
|
||||||
|
return newMakeTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate destination make target with data from source make target.
|
||||||
|
*
|
||||||
|
* @param source - source make target.
|
||||||
|
* @param destination - destination make target.
|
||||||
|
* @throws CoreException if there is a problem populating the target.
|
||||||
|
*
|
||||||
|
* @see MakeTarget
|
||||||
|
*/
|
||||||
|
private static void copyTargetData(IMakeTarget source, IMakeTarget destination)
|
||||||
|
throws CoreException {
|
||||||
|
|
||||||
|
// IMakeTarget attributes
|
||||||
|
// destination.project and destination.targetBuilderID are not changed
|
||||||
|
destination.setRunAllBuilders(source.runAllBuilders());
|
||||||
|
destination.setAppendProjectEnvironment(source.appendProjectEnvironment());
|
||||||
|
destination.setBuildAttribute(IMakeTarget.BUILD_TARGET,
|
||||||
|
source.getBuildAttribute(IMakeTarget.BUILD_TARGET, "")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
// IMakeCommonBuildInfo attributes
|
||||||
|
// Ignore IMakeCommonBuildInfo.BUILD_LOCATION in order not to pick
|
||||||
|
// location of another project (or another folder)
|
||||||
|
destination.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND,
|
||||||
|
source.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, DEFAULT_BUILD_COMMAND));
|
||||||
|
destination.setBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS,
|
||||||
|
source.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, "")); //$NON-NLS-1$
|
||||||
|
destination.setStopOnError(source.isStopOnError());
|
||||||
|
destination.setUseDefaultBuildCmd(source.isDefaultBuildCmd());
|
||||||
|
destination.setEnvironment(source.getEnvironment());
|
||||||
|
destination.setAppendEnvironment(source.appendEnvironment());
|
||||||
|
// setErrorParsers() is not supported in MakeTarget yet
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create @{code MakeTarget} from basic data elements available during
|
||||||
|
* copy/paste or drag/drop operations. The other data will be set to default.
|
||||||
|
*
|
||||||
|
* @param name - name of make target being created.
|
||||||
|
* @param targetStr - build target.
|
||||||
|
* @param command - make command. ("make" by default).
|
||||||
|
* @param container - container where to place the target.
|
||||||
|
* @return newly created {@link IMakeTarget}.
|
||||||
|
* @throws CoreException if there was a problem creating new make target.
|
||||||
|
*/
|
||||||
|
public static IMakeTarget createMakeTarget(String name, String targetStr, String command,
|
||||||
|
IContainer container) throws CoreException {
|
||||||
|
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||||
|
|
||||||
|
IProject project = container.getProject();
|
||||||
|
String[] ids = makeTargetManager.getTargetBuilders(project);
|
||||||
|
String builderId = ids[0];
|
||||||
|
|
||||||
|
// IMakeTarget attributes
|
||||||
|
IMakeTarget newMakeTarget = makeTargetManager.createTarget(project, name, builderId);
|
||||||
|
if (targetStr != null) {
|
||||||
|
newMakeTarget.setBuildAttribute(IMakeTarget.BUILD_TARGET, targetStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// IMakeCommonBuildInfo attributes
|
||||||
|
String projectBuildCommand = getProjectBuildCommand(project);
|
||||||
|
if (command != null && command.length() > 0 && !command.equals(projectBuildCommand)) {
|
||||||
|
newMakeTarget.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, command);
|
||||||
|
newMakeTarget.setUseDefaultBuildCmd(false);
|
||||||
|
} else {
|
||||||
|
newMakeTarget.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, projectBuildCommand);
|
||||||
|
newMakeTarget.setUseDefaultBuildCmd(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newMakeTarget;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,169 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferData.MakeTargetData;
|
||||||
|
import org.eclipse.swt.dnd.ByteArrayTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.swt.dnd.TransferData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class can be used to transfer an instance of
|
||||||
|
* {@link MakeTargetTransferData} between two parts in a workbench in a drag and
|
||||||
|
* drop or clipboard copy/paste operation.
|
||||||
|
*
|
||||||
|
* @see ByteArrayTransfer
|
||||||
|
* @see Transfer
|
||||||
|
* @see org.eclipse.swt.dnd.DropTarget
|
||||||
|
* @see org.eclipse.swt.dnd.DragSource
|
||||||
|
*/
|
||||||
|
public class MakeTargetTransfer extends ByteArrayTransfer {
|
||||||
|
|
||||||
|
private static final String TYPE_NAME = "make-target-transfer-format";//$NON-NLS-1$
|
||||||
|
|
||||||
|
private static final int TYPEID = registerType(TYPE_NAME);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton instance.
|
||||||
|
*/
|
||||||
|
private static MakeTargetTransfer instance = new MakeTargetTransfer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new transfer object.
|
||||||
|
*/
|
||||||
|
private MakeTargetTransfer() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the singleton instance.
|
||||||
|
*/
|
||||||
|
public static MakeTargetTransfer getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return ids of the data types that can be converted using this transfer
|
||||||
|
* agent.
|
||||||
|
*
|
||||||
|
* @see Transfer#getTypeIds()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected int[] getTypeIds() {
|
||||||
|
return new int[] { TYPEID };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the list of type names that can be converted using this transfer
|
||||||
|
* agent.
|
||||||
|
*
|
||||||
|
* @see Transfer#getTypeNames()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected String[] getTypeNames() {
|
||||||
|
return new String[] { TYPE_NAME };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a java representation of data to a platform specific
|
||||||
|
* representation of the data.
|
||||||
|
*
|
||||||
|
* @param object - a java representation of the data to be converted.
|
||||||
|
* @param transferData - an empty TransferData object; this object will be
|
||||||
|
* filled in on return with the platform specific representation of
|
||||||
|
* the data.
|
||||||
|
*
|
||||||
|
* @exception org.eclipse.swt.SWTException {@code ERROR_INVALID_DATA} - if
|
||||||
|
* object doesn't contain data in a valid format or {@code null}.
|
||||||
|
*
|
||||||
|
* @see Transfer#javaToNative(Object object, TransferData transferData)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void javaToNative(Object object, TransferData transferData) {
|
||||||
|
if (object instanceof MakeTargetTransferData) {
|
||||||
|
MakeTargetTransferData realData = (MakeTargetTransferData) object;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
DataOutputStream dataOut = new DataOutputStream(out);
|
||||||
|
dataOut.writeInt(realData.getMakeTargetDataList().size());
|
||||||
|
|
||||||
|
for (MakeTargetData mtd : realData.getMakeTargetDataList()) {
|
||||||
|
dataOut.writeUTF(mtd.getName());
|
||||||
|
dataOut.writeBoolean(mtd.runAllBuilders());
|
||||||
|
dataOut.writeBoolean(mtd.appendProjectEnvironment());
|
||||||
|
dataOut.writeUTF(mtd.getBuildTarget());
|
||||||
|
dataOut.writeUTF(mtd.getBuildCommand());
|
||||||
|
dataOut.writeUTF(mtd.getBuildArguments());
|
||||||
|
dataOut.writeBoolean(mtd.isStopOnError());
|
||||||
|
dataOut.writeBoolean(mtd.isDefaultBuildCmd());
|
||||||
|
dataOut.writeBoolean(mtd.appendEnvironment());
|
||||||
|
}
|
||||||
|
dataOut.close();
|
||||||
|
super.javaToNative(out.toByteArray(), transferData);
|
||||||
|
} catch (IOException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a platform specific representation of data to a java
|
||||||
|
* representation.
|
||||||
|
*
|
||||||
|
* @param transferData - the platform specific representation of the data to
|
||||||
|
* be converted.
|
||||||
|
*
|
||||||
|
* @return a java representation of the converted data if the conversion was
|
||||||
|
* successful; otherwise {@code null}. If transferData is {@code
|
||||||
|
* null} then {@code null} is returned. The type of Object that is
|
||||||
|
* returned is dependent on the {@link Transfer} subclass.
|
||||||
|
*
|
||||||
|
* @see Transfer#nativeToJava(TransferData transferData)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected Object nativeToJava(TransferData transferData) {
|
||||||
|
byte[] bytes = (byte[]) super.nativeToJava(transferData);
|
||||||
|
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
|
||||||
|
DataInputStream dataIn = new DataInputStream(in);
|
||||||
|
try {
|
||||||
|
MakeTargetTransferData mttd = new MakeTargetTransferData();
|
||||||
|
int size = dataIn.readInt();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
|
||||||
|
String name = dataIn.readUTF();
|
||||||
|
boolean runAllBuilders = dataIn.readBoolean();
|
||||||
|
boolean appendProjectEnvironment = dataIn.readBoolean();
|
||||||
|
String buildTarget = dataIn.readUTF();
|
||||||
|
String buildCommand = dataIn.readUTF();
|
||||||
|
String buildArguments = dataIn.readUTF();
|
||||||
|
boolean stopOnError = dataIn.readBoolean();
|
||||||
|
boolean useDefaultBuildCmd = dataIn.readBoolean();
|
||||||
|
boolean appendEnvironment = dataIn.readBoolean();
|
||||||
|
|
||||||
|
mttd.addMakeTarget(name, runAllBuilders, appendProjectEnvironment, buildTarget,
|
||||||
|
buildCommand, buildArguments, stopOnError, useDefaultBuildCmd, appendEnvironment);
|
||||||
|
}
|
||||||
|
return mttd;
|
||||||
|
} catch (IOException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,212 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTargetManager;
|
||||||
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code MakeTargetTransferData} serves for transferring data during a drag and
|
||||||
|
* drop operation between different plug-ins. This object contains an extension
|
||||||
|
* identifier and a block of bytes. When the drop occurs, the data is
|
||||||
|
* interpreted by an action defined in the specified extension.
|
||||||
|
* <p>
|
||||||
|
* Clients using MakeTargetTransfer should create an instance to contain the
|
||||||
|
* drop data.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @see IMakeTarget
|
||||||
|
*/
|
||||||
|
public class MakeTargetTransferData {
|
||||||
|
class MakeTargetData {
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
// IMakeTarget attributes
|
||||||
|
private final boolean runAllBuilders;
|
||||||
|
private final boolean appendProjectEnvironment;
|
||||||
|
private final String buildTarget;
|
||||||
|
|
||||||
|
// IMakeCommonBuildInfo attributes
|
||||||
|
private final String buildCommand;
|
||||||
|
private final String buildArguments;
|
||||||
|
private final boolean stopOnError;
|
||||||
|
private final boolean useDefaultBuildCmd;
|
||||||
|
private final boolean appendEnvironment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor to populate the transfer data record with
|
||||||
|
* {@link IMakeTarget} data.
|
||||||
|
*
|
||||||
|
* @param name - make target name.
|
||||||
|
* @param runAllBuilders - make target runAllBuilders flag.
|
||||||
|
* @param appendProjectEnvironment - make target
|
||||||
|
* appendProjectEnvironment flag.
|
||||||
|
* @param buildTarget - make target buildTarget.
|
||||||
|
* @param buildCommand - make target buildCommand.
|
||||||
|
* @param buildArguments - make target buildArguments.
|
||||||
|
* @param stopOnError - make target stopOnError flag.
|
||||||
|
* @param useDefaultBuildCmd - make target useDefaultBuildCmd flag.
|
||||||
|
* @param appendEnvironment - make target appendEnvironment flag.
|
||||||
|
*/
|
||||||
|
MakeTargetData(String name, boolean runAllBuilders, boolean appendProjectEnvironment,
|
||||||
|
String buildTarget, String buildCommand, String buildArguments, boolean stopOnError,
|
||||||
|
boolean useDefaultBuildCmd, boolean appendEnvironment) {
|
||||||
|
|
||||||
|
this.name = name;
|
||||||
|
this.runAllBuilders = runAllBuilders;
|
||||||
|
this.appendProjectEnvironment = appendProjectEnvironment;
|
||||||
|
this.buildTarget = buildTarget;
|
||||||
|
this.buildCommand = buildCommand;
|
||||||
|
this.buildArguments = buildArguments;
|
||||||
|
this.stopOnError = stopOnError;
|
||||||
|
this.useDefaultBuildCmd = useDefaultBuildCmd;
|
||||||
|
this.appendEnvironment = appendEnvironment;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean runAllBuilders() {
|
||||||
|
return runAllBuilders;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean appendProjectEnvironment() {
|
||||||
|
return appendProjectEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getBuildTarget() {
|
||||||
|
return buildTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getBuildCommand() {
|
||||||
|
return buildCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getBuildArguments() {
|
||||||
|
return buildArguments;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isStopOnError() {
|
||||||
|
return stopOnError;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isDefaultBuildCmd() {
|
||||||
|
return useDefaultBuildCmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean appendEnvironment() {
|
||||||
|
return appendEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final List<MakeTargetData> makeTargetData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public MakeTargetTransferData() {
|
||||||
|
makeTargetData = new ArrayList<MakeTargetData>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to add make target to the target list in preparation to transfer.
|
||||||
|
*
|
||||||
|
* @param target - make target being added.
|
||||||
|
*/
|
||||||
|
public void addMakeTarget(IMakeTarget target) {
|
||||||
|
addMakeTarget(target.getName(),
|
||||||
|
target.runAllBuilders(),
|
||||||
|
target.appendProjectEnvironment(),
|
||||||
|
target.getBuildAttribute(IMakeTarget.BUILD_TARGET, ""), //$NON-NLS-1$
|
||||||
|
target.getBuildAttribute(IMakeTarget.BUILD_COMMAND, ""), //$NON-NLS-1$
|
||||||
|
target.getBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, ""), //$NON-NLS-1$
|
||||||
|
target.isStopOnError(),
|
||||||
|
target.isDefaultBuildCmd(),
|
||||||
|
target.appendEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add another target to the list of make target transfer records.
|
||||||
|
*
|
||||||
|
* @param name - make target name.
|
||||||
|
* @param runAllBuilders - make target runAllBuilders flag.
|
||||||
|
* @param appendProjectEnvironment - make target appendProjectEnvironment flag.
|
||||||
|
* @param buildTarget - make target buildTarget.
|
||||||
|
* @param buildCommand - make target buildCommand.
|
||||||
|
* @param buildArguments - make target buildArguments.
|
||||||
|
* @param stopOnError - make target stopOnError flag.
|
||||||
|
* @param useDefaultBuildCmd - make target useDefaultBuildCmd flag.
|
||||||
|
* @param appendEnvironment - make target appendEnvironment flag.
|
||||||
|
*/
|
||||||
|
public void addMakeTarget(String name, boolean runAllBuilders,
|
||||||
|
boolean appendProjectEnvironment, String buildTarget, String buildCommand,
|
||||||
|
String buildArguments, boolean stopOnError, boolean useDefaultBuildCmd,
|
||||||
|
boolean appendEnvironment) {
|
||||||
|
makeTargetData.add(new MakeTargetData(name, runAllBuilders, appendProjectEnvironment,
|
||||||
|
buildTarget, buildCommand, buildArguments, stopOnError, useDefaultBuildCmd,
|
||||||
|
appendEnvironment));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an array of make targets from transfer records. Creating of actual {@link IMakeTarget}s
|
||||||
|
* requires supplying a project where they will be assigned by {@link IMakeTargetManager}.
|
||||||
|
*
|
||||||
|
* @param project - project to assign the targets.
|
||||||
|
* @return the array of created {@link IMakeTarget}s
|
||||||
|
*
|
||||||
|
* @see IMakeTarget
|
||||||
|
* @see IMakeTargetManager
|
||||||
|
*/
|
||||||
|
public IMakeTarget[] createMakeTargets(IProject project) {
|
||||||
|
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||||
|
ArrayList<IMakeTarget> makeTargets = new ArrayList<IMakeTarget>(makeTargetData.size());
|
||||||
|
String[] ids = makeTargetManager.getTargetBuilders(project);
|
||||||
|
String builderId = ids[0];
|
||||||
|
|
||||||
|
for (MakeTargetData element : makeTargetData) {
|
||||||
|
try {
|
||||||
|
IMakeTarget target = makeTargetManager.createTarget(project, element.getName(), builderId);
|
||||||
|
|
||||||
|
target.setRunAllBuilders(element.runAllBuilders());
|
||||||
|
target.setAppendProjectEnvironment(element.appendProjectEnvironment());
|
||||||
|
target.setBuildAttribute(IMakeTarget.BUILD_TARGET, element.getBuildTarget());
|
||||||
|
target.setBuildAttribute(IMakeTarget.BUILD_COMMAND, element.getBuildCommand());
|
||||||
|
target.setBuildAttribute(IMakeTarget.BUILD_ARGUMENTS, element.getBuildArguments());
|
||||||
|
target.setStopOnError(element.isStopOnError());
|
||||||
|
target.setUseDefaultBuildCmd(element.isDefaultBuildCmd());
|
||||||
|
target.setAppendEnvironment(element.appendEnvironment());
|
||||||
|
|
||||||
|
makeTargets.add(target);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return makeTargets.toArray(new IMakeTarget[makeTargets.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list of make target transfer records for {@link MakeTargetTransfer}.
|
||||||
|
*/
|
||||||
|
List<MakeTargetData> getMakeTargetDataList() {
|
||||||
|
return makeTargetData;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionProvider;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code MakeTargetTransferDragSourceListener} supports dragging of selected
|
||||||
|
* make targets from Make Target View. {@link TextTransfer} is used as the
|
||||||
|
* transfer agent and provides for drag/drop and copy/paste between different
|
||||||
|
* eclipse sessions.
|
||||||
|
*
|
||||||
|
* @see AbstractSelectionDragAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener
|
||||||
|
*/
|
||||||
|
public class MakeTargetTransferDragSourceListener extends AbstractSelectionDragAdapter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting selection provider.
|
||||||
|
* @param provider - selection provider.
|
||||||
|
*/
|
||||||
|
public MakeTargetTransferDragSourceListener(ISelectionProvider provider) {
|
||||||
|
super(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return MakeTargetTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the elements contained in the given selection can be dragged.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return {@code true} if the selection can be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isDragable(ISelection selection) {
|
||||||
|
return MakeTargetDndUtil.isDragable(selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action executed during drag initialization.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dragInit(ISelection selection) {
|
||||||
|
// no special action is required
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the selection to be passed via drag and drop actions.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return selected make targets converted to {@link MakeTargetTransferData}
|
||||||
|
* in order to be transfered.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object prepareDataForTransfer(ISelection selection) {
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
MakeTargetTransferData makeTargetTransferData = new MakeTargetTransferData();
|
||||||
|
for (Object selectionItem : ((IStructuredSelection)selection).toList()) {
|
||||||
|
if (selectionItem instanceof IMakeTarget) {
|
||||||
|
makeTargetTransferData.addMakeTarget((IMakeTarget)selectionItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return makeTargetTransferData;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action to finish the drag.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dragDone() {
|
||||||
|
// no special action is required
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code MakeTargetTransferDropTargetListener} handles drop of make targets
|
||||||
|
* onto Make Target View. {@link MakeTargetTransfer} is used as the transfer agent and
|
||||||
|
* provides for drag/drop and copy/paste between different eclipse sessions.
|
||||||
|
*
|
||||||
|
* @see AbstractContainerAreaDropAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*/
|
||||||
|
public class MakeTargetTransferDropTargetListener extends AbstractContainerAreaDropAdapter {
|
||||||
|
|
||||||
|
private final Viewer fViewer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting a viewer such as TreeViewer to pull selection from later on.
|
||||||
|
* @param viewer - the viewer providing shell for UI.
|
||||||
|
*/
|
||||||
|
public MakeTargetTransferDropTargetListener(Viewer viewer) {
|
||||||
|
fViewer = viewer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return MakeTargetTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial drag operation. Only {@link DND#DROP_COPY} is supported for
|
||||||
|
* dropping files to Make Target View, same as for {@code dragOverOperation}.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragEnterOperation(int operation) {
|
||||||
|
return dragOverOperation(operation, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation of dragging over a drop target. Only {@link DND#DROP_COPY} is
|
||||||
|
* supported for dropping files to Make Target View.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragOverOperation(int operation, IContainer dropContainer) {
|
||||||
|
// This class is intended only for drag/drop between eclipse instances,
|
||||||
|
// so DND_COPY always set and we don't bother checking if the target is the source
|
||||||
|
if (operation!=DND.DROP_NONE) {
|
||||||
|
return DND.DROP_COPY;
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the actual drop of {@code dropObject} to {@code dropContainer}.
|
||||||
|
*
|
||||||
|
* @param dropObject - object to drop.
|
||||||
|
* @param dropContainer - container where to drop the object.
|
||||||
|
* @param operation - drop operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dropToContainer(Object dropObject, IContainer dropContainer, int operation) {
|
||||||
|
if (dropObject instanceof MakeTargetTransferData && dropContainer != null) {
|
||||||
|
createTransferTargetsUI((MakeTargetTransferData)dropObject, dropContainer,
|
||||||
|
operation, fViewer.getControl().getShell());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates make targets received by {@link MakeTargetTransfer} in Make Target View.
|
||||||
|
*
|
||||||
|
* @param makeTargetTransferData - incoming data.
|
||||||
|
* @param dropContainer - a container where the targets are being created.
|
||||||
|
* @param operation - drop/paste operation.
|
||||||
|
* @param shell - a shell to display warnings to the user.
|
||||||
|
*/
|
||||||
|
public static void createTransferTargetsUI(MakeTargetTransferData makeTargetTransferData, IContainer dropContainer,
|
||||||
|
int operation, Shell shell) {
|
||||||
|
IMakeTarget[] makeTargets = makeTargetTransferData.createMakeTargets(dropContainer.getProject());
|
||||||
|
MakeTargetDndUtil.copyTargets(makeTargets, dropContainer, operation, shell);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeCommonBuildInfo;
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.viewers.ISelectionProvider;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code TextTransferDragSourceListener} supports dragging of selected make
|
||||||
|
* targets from Make Target View. The targets converted to make commands in
|
||||||
|
* order to be presented as plain text. Each command will be one line of text.
|
||||||
|
* {@link TextTransfer} is used as the transfer agent.
|
||||||
|
*
|
||||||
|
* @see AbstractSelectionDragAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DragSourceListener
|
||||||
|
*/
|
||||||
|
public class TextTransferDragSourceListener extends AbstractSelectionDragAdapter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting selection provider.
|
||||||
|
* @param provider - selection provider.
|
||||||
|
*/
|
||||||
|
public TextTransferDragSourceListener(ISelectionProvider provider) {
|
||||||
|
super(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return TextTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the elements contained in the given selection can be dragged.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return {@code true} if the selection can be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean isDragable(ISelection selection) {
|
||||||
|
return MakeTargetDndUtil.isDragable(selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action executed during drag initialization.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void dragInit(ISelection selection) {
|
||||||
|
// no special action is required
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the selection to be passed via drag and drop actions.
|
||||||
|
*
|
||||||
|
* @param selection - the selected elements to be dragged.
|
||||||
|
* @return data to be passed. The data is a multiline string each line
|
||||||
|
* containing make target command.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected Object prepareDataForTransfer(ISelection selection) {
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
return convertSelectedMakeTargetsToText((IStructuredSelection) selection);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom action to finish the drag.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void dragDone() {
|
||||||
|
// no special action is required
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert selected make targets to textual representation. Each make command
|
||||||
|
* is presented as a line in the resulting multiline text.
|
||||||
|
*
|
||||||
|
* @param selection - selected make targets in Make Target View.
|
||||||
|
* @return make targets as miltiline text.
|
||||||
|
*/
|
||||||
|
public static String convertSelectedMakeTargetsToText(IStructuredSelection selection) {
|
||||||
|
String targetsText=""; //$NON-NLS-1$
|
||||||
|
for (Object selectionItem : selection.toList()) {
|
||||||
|
if (selectionItem instanceof IMakeTarget) {
|
||||||
|
IMakeTarget makeTarget = (IMakeTarget)selectionItem;
|
||||||
|
String buildCommand;
|
||||||
|
if (makeTarget.isDefaultBuildCmd()) {
|
||||||
|
buildCommand = MakeTargetDndUtil.getProjectBuildCommand(makeTarget.getProject());
|
||||||
|
} else {
|
||||||
|
buildCommand =makeTarget.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND,
|
||||||
|
MakeTargetDndUtil.DEFAULT_BUILD_COMMAND);
|
||||||
|
}
|
||||||
|
targetsText = targetsText
|
||||||
|
+ buildCommand + ' '
|
||||||
|
+ makeTarget.getBuildAttribute(IMakeTarget.BUILD_TARGET, "") //$NON-NLS-1$
|
||||||
|
+ System.getProperty("line.separator"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return targetsText;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.internal.ui.dnd;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@code TextTransferDropTargetListener} handles dropping of selected text to
|
||||||
|
* Make Target View. Each line of miltiline text passed is treated as separate
|
||||||
|
* make target command. {@link TextTransfer} is used as the transfer agent.
|
||||||
|
*
|
||||||
|
* @see AbstractContainerAreaDropAdapter
|
||||||
|
* @see org.eclipse.swt.dnd.DropTargetListener
|
||||||
|
*/
|
||||||
|
public class TextTransferDropTargetListener extends AbstractContainerAreaDropAdapter {
|
||||||
|
|
||||||
|
Viewer fViewer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting a viewer such as TreeViewer to pull selection from later on.
|
||||||
|
* @param viewer - the viewer providing shell for UI.
|
||||||
|
*/
|
||||||
|
public TextTransferDropTargetListener(Viewer viewer) {
|
||||||
|
fViewer = viewer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link Transfer} type that this listener can accept a
|
||||||
|
* drop operation for.
|
||||||
|
*/
|
||||||
|
public Transfer getTransfer() {
|
||||||
|
return TextTransfer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial drag operation. Only {@link DND#DROP_COPY} is supported for
|
||||||
|
* dropping text to Make Target View, same as for {@code dragOverOperation}.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragEnterOperation(int operation) {
|
||||||
|
return dragOverOperation(operation, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation of dragging over a drop target. Only {@link DND#DROP_COPY} is
|
||||||
|
* supported for dropping text to Make Target View.
|
||||||
|
*
|
||||||
|
* @param operation - incoming operation.
|
||||||
|
* @return changed operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int dragOverOperation(int operation, IContainer dropContainer) {
|
||||||
|
// This class is intended only for drag/drop between eclipse instances,
|
||||||
|
// so DND_COPY always set and we don't bother checking if the target is the source
|
||||||
|
if (operation!=DND.DROP_NONE) {
|
||||||
|
return DND.DROP_COPY;
|
||||||
|
}
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the actual drop of {@code dropObject} to {@code dropContainer}.
|
||||||
|
*
|
||||||
|
* @param dropObject - object to drop.
|
||||||
|
* @param dropContainer - container where to drop the object.
|
||||||
|
* @param operation - drop operation.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dropToContainer(Object dropObject, IContainer dropContainer, int operation) {
|
||||||
|
if (dropObject instanceof String && ((String)dropObject).length()>0 && dropContainer != null) {
|
||||||
|
createMultilineTargetsUI((String)dropObject, dropContainer, operation,
|
||||||
|
fViewer.getControl().getShell());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert multiline text to array of {@code IMakeTarget}s. Each line is
|
||||||
|
* interpreted as one separate make command.
|
||||||
|
*
|
||||||
|
* @param multilineText - input text.
|
||||||
|
* @param container - container where the targets will belong.
|
||||||
|
* @return resulting array of {@code IMakeTarget}s.
|
||||||
|
*/
|
||||||
|
private static IMakeTarget[] prepareMakeTargetsFromString(String multilineText, IContainer container) {
|
||||||
|
if (container!=null) {
|
||||||
|
String[] lines = multilineText.split("[\n\r]"); //$NON-NLS-1$
|
||||||
|
List<IMakeTarget> makeTargets = new ArrayList<IMakeTarget>(lines.length);
|
||||||
|
for (String command : lines) {
|
||||||
|
command = command.trim();
|
||||||
|
if (command.length() > 0) {
|
||||||
|
String name = command;
|
||||||
|
String buildCommand = command;
|
||||||
|
String buildTarget = null;
|
||||||
|
String defaultBuildCommand = MakeTargetDndUtil.getProjectBuildCommand(container.getProject());
|
||||||
|
if (command.startsWith(defaultBuildCommand+" ")) { //$NON-NLS-1$
|
||||||
|
buildCommand = defaultBuildCommand;
|
||||||
|
buildTarget = command.substring(defaultBuildCommand.length()+1).trim();
|
||||||
|
name = buildTarget;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
makeTargets.add(MakeTargetDndUtil.createMakeTarget(name, buildTarget, buildCommand, container));
|
||||||
|
} catch (CoreException e) {
|
||||||
|
// Ignore failed targets
|
||||||
|
MakeUIPlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return makeTargets.toArray(new IMakeTarget[makeTargets.size()]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combined operation of creating make targets in Make Target View from
|
||||||
|
* multiline text. The method will ask a confirmation if user tries to drop
|
||||||
|
* more then 1 target to prevent easily made mistake of unintended copying
|
||||||
|
* of old contents of the clipboard.
|
||||||
|
*
|
||||||
|
* @param multilineText - input make target commands in textual form.
|
||||||
|
* @param dropContainer - container where add the targets.
|
||||||
|
* @param operation - operation such as copying or moving. Must be a
|
||||||
|
* {@link org.eclipse.swt.dnd.DND} operation.
|
||||||
|
* @param shell - a shell to display progress of operation to user.
|
||||||
|
*
|
||||||
|
* @see DND#DROP_NONE
|
||||||
|
* @see DND#DROP_COPY
|
||||||
|
* @see DND#DROP_MOVE
|
||||||
|
* @see DND#DROP_LINK
|
||||||
|
*/
|
||||||
|
public static void createMultilineTargetsUI(String multilineText, IContainer dropContainer,
|
||||||
|
int operation, Shell shell) {
|
||||||
|
|
||||||
|
IMakeTarget[] makeTargets = prepareMakeTargetsFromString(multilineText, dropContainer);
|
||||||
|
boolean confirmed = true;
|
||||||
|
if (makeTargets.length > 1) {
|
||||||
|
String title = MakeUIPlugin.getResourceString("MakeTargetDnD.title.createFromTextConfirm"); //$NON-NLS-1$
|
||||||
|
String question = MessageFormat.format(MakeUIPlugin.getResourceString("MakeTargetDnD.message.createFromTextConfirm"), //$NON-NLS-1$
|
||||||
|
new Object[] { new Integer(makeTargets.length) });
|
||||||
|
|
||||||
|
String topTargets = ""; //$NON-NLS-1$
|
||||||
|
for (int i=0;i<makeTargets.length;i++) {
|
||||||
|
// limit dimensions of the confirm dialog
|
||||||
|
final int HEIGHT_LIMIT = 20;
|
||||||
|
final int LENGTH_LIMIT = 200;
|
||||||
|
if (i > HEIGHT_LIMIT) {
|
||||||
|
topTargets = topTargets + "..."; //$NON-NLS-1$
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
String name = makeTargets[i].getName();
|
||||||
|
if (name.length() > LENGTH_LIMIT) {
|
||||||
|
name = name.substring(0,LENGTH_LIMIT-3)+"..."; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
topTargets = topTargets + name + "\n"; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
confirmed = MessageDialog.openConfirm(shell, title, question + topTargets);
|
||||||
|
}
|
||||||
|
if (confirmed) {
|
||||||
|
MakeTargetDndUtil.copyTargets(makeTargets, dropContainer, operation, shell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.) - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.ui.views;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetDndUtil;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransfer;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferData;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDragSourceListener;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.swt.SWTError;
|
||||||
|
import org.eclipse.swt.dnd.Clipboard;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.ISharedImages;
|
||||||
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.actions.SelectionListenerAction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action to copy make targets from Make Target View to clipboard.
|
||||||
|
* {@link CopyTargetAction} can transfer targets as {@link IMakeTarget}s or
|
||||||
|
* plain text.
|
||||||
|
* <p>
|
||||||
|
* {@link CopyTargetAction} and {@link PasteTargetAction} are able to transfer
|
||||||
|
* targets inside Make Target View or between eclipse sessions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CopyTargetAction extends SelectionListenerAction {
|
||||||
|
|
||||||
|
private final Shell shell;
|
||||||
|
private final Clipboard clipboard;
|
||||||
|
private final PasteTargetAction pasteAction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting internal private fields and initializing the action.
|
||||||
|
*
|
||||||
|
* @param shell - the shell in which to show any dialogs.
|
||||||
|
* @param clipboard - system clipboard.
|
||||||
|
* @param pasteAction -associated paste action. May be {@code null}.
|
||||||
|
*/
|
||||||
|
protected CopyTargetAction(Shell shell, Clipboard clipboard, PasteTargetAction pasteAction) {
|
||||||
|
super(MakeUIPlugin.getResourceString("CopyTargetAction.label")); //$NON-NLS-1$
|
||||||
|
this.shell = shell;
|
||||||
|
this.clipboard = clipboard;
|
||||||
|
this.pasteAction = pasteAction;
|
||||||
|
|
||||||
|
ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
|
||||||
|
setDisabledImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_COPY_DISABLED));
|
||||||
|
setImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
|
||||||
|
setHoverImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
|
||||||
|
|
||||||
|
setToolTipText(MakeUIPlugin.getResourceString("CopyTargetAction.tooltip")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates enablement of this action in response to the given selection.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean updateSelection(IStructuredSelection selection) {
|
||||||
|
if (!super.updateSelection(selection)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MakeTargetDndUtil.isDragable(selection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform actual action of copying of make targets to clipboard. Two
|
||||||
|
* transfer agents are initiated, {@link MakeTargetTransfer} and
|
||||||
|
* {@link TextTransfer}.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
IStructuredSelection selection = getStructuredSelection();
|
||||||
|
|
||||||
|
MakeTargetTransferData makeTargetTransferData = new MakeTargetTransferData();
|
||||||
|
for (Object selectionItem : selection.toList()) {
|
||||||
|
if (selectionItem instanceof IMakeTarget) {
|
||||||
|
makeTargetTransferData.addMakeTarget((IMakeTarget) selectionItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
clipboard.setContents(new Object[] { makeTargetTransferData,
|
||||||
|
TextTransferDragSourceListener.convertSelectedMakeTargetsToText(selection) },
|
||||||
|
new Transfer[] { MakeTargetTransfer.getInstance(), TextTransfer.getInstance() });
|
||||||
|
|
||||||
|
// update the enablement of the paste action
|
||||||
|
if (pasteAction != null && pasteAction.getStructuredSelection() != null) {
|
||||||
|
pasteAction.selectionChanged(pasteAction.getStructuredSelection());
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SWTError e) {
|
||||||
|
MakeUIPlugin.errorDialog(shell,
|
||||||
|
MakeUIPlugin.getResourceString("CopyTargetAction.title.clipboardProblem"), //$NON-NLS-1$
|
||||||
|
MakeUIPlugin.getResourceString("CopyTargetAction.message.clipboardProblem"), //$NON-NLS-1$
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
* Andrew Gvozdev (Quoin Inc.)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.make.ui.views;
|
package org.eclipse.cdt.make.ui.views;
|
||||||
|
|
||||||
|
@ -14,6 +15,16 @@ import org.eclipse.cdt.make.core.IMakeTarget;
|
||||||
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
import org.eclipse.cdt.make.core.MakeCorePlugin;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
import org.eclipse.cdt.make.internal.ui.MakeUIImages;
|
||||||
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.AbstractContainerAreaDropAdapter;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.AbstractSelectionDragAdapter;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.FileTransferDropTargetListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.LocalTransferDragSourceListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.LocalTransferDropTargetListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransfer;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferDragSourceListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferDropTargetListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDragSourceListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDropTargetListener;
|
||||||
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
|
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
|
||||||
import org.eclipse.cdt.make.ui.MakeContentProvider;
|
import org.eclipse.cdt.make.ui.MakeContentProvider;
|
||||||
import org.eclipse.cdt.make.ui.MakeLabelProvider;
|
import org.eclipse.cdt.make.ui.MakeLabelProvider;
|
||||||
|
@ -31,6 +42,8 @@ import org.eclipse.jface.action.IToolBarManager;
|
||||||
import org.eclipse.jface.action.MenuManager;
|
import org.eclipse.jface.action.MenuManager;
|
||||||
import org.eclipse.jface.action.Separator;
|
import org.eclipse.jface.action.Separator;
|
||||||
import org.eclipse.jface.dialogs.IDialogSettings;
|
import org.eclipse.jface.dialogs.IDialogSettings;
|
||||||
|
import org.eclipse.jface.util.DelegatingDragAdapter;
|
||||||
|
import org.eclipse.jface.util.DelegatingDropAdapter;
|
||||||
import org.eclipse.jface.viewers.DoubleClickEvent;
|
import org.eclipse.jface.viewers.DoubleClickEvent;
|
||||||
import org.eclipse.jface.viewers.IDoubleClickListener;
|
import org.eclipse.jface.viewers.IDoubleClickListener;
|
||||||
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||||
|
@ -41,20 +54,32 @@ import org.eclipse.jface.viewers.Viewer;
|
||||||
import org.eclipse.jface.viewers.ViewerFilter;
|
import org.eclipse.jface.viewers.ViewerFilter;
|
||||||
import org.eclipse.jface.viewers.ViewerSorter;
|
import org.eclipse.jface.viewers.ViewerSorter;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.dnd.Clipboard;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.FileTransfer;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.dnd.Transfer;
|
||||||
import org.eclipse.swt.events.KeyAdapter;
|
import org.eclipse.swt.events.KeyAdapter;
|
||||||
import org.eclipse.swt.events.KeyEvent;
|
import org.eclipse.swt.events.KeyEvent;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Menu;
|
import org.eclipse.swt.widgets.Menu;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.ui.IActionBars;
|
import org.eclipse.ui.IActionBars;
|
||||||
|
import org.eclipse.ui.actions.TextActionHandler;
|
||||||
import org.eclipse.ui.part.DrillDownAdapter;
|
import org.eclipse.ui.part.DrillDownAdapter;
|
||||||
import org.eclipse.ui.part.ViewPart;
|
import org.eclipse.ui.part.ViewPart;
|
||||||
|
import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
|
||||||
|
|
||||||
public class MakeView extends ViewPart {
|
public class MakeView extends ViewPart {
|
||||||
|
|
||||||
|
private Clipboard clipboard;
|
||||||
|
|
||||||
private BuildTargetAction buildTargetAction;
|
private BuildTargetAction buildTargetAction;
|
||||||
private EditTargetAction editTargetAction;
|
private EditTargetAction editTargetAction;
|
||||||
private DeleteTargetAction deleteTargetAction;
|
private DeleteTargetAction deleteTargetAction;
|
||||||
AddTargetAction addTargetAction;
|
AddTargetAction addTargetAction;
|
||||||
|
private CopyTargetAction copyTargetAction;
|
||||||
|
private PasteTargetAction pasteTargetAction;
|
||||||
TreeViewer fViewer;
|
TreeViewer fViewer;
|
||||||
DrillDownAdapter drillDownAdapter;
|
DrillDownAdapter drillDownAdapter;
|
||||||
private Action trimEmptyFolderAction;
|
private Action trimEmptyFolderAction;
|
||||||
|
@ -68,6 +93,7 @@ public class MakeView extends ViewPart {
|
||||||
*
|
*
|
||||||
* @see org.eclipse.ui.IWorkbenchPart#setFocus()
|
* @see org.eclipse.ui.IWorkbenchPart#setFocus()
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void setFocus() {
|
public void setFocus() {
|
||||||
fViewer.getTree().setFocus();
|
fViewer.getTree().setFocus();
|
||||||
}
|
}
|
||||||
|
@ -77,12 +103,14 @@ public class MakeView extends ViewPart {
|
||||||
*
|
*
|
||||||
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
|
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void createPartControl(Composite parent) {
|
public void createPartControl(Composite parent) {
|
||||||
MakeUIPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(parent, IMakeHelpContextIds.MAKE_VIEW);
|
MakeUIPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(parent, IMakeHelpContextIds.MAKE_VIEW);
|
||||||
fViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
|
fViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
|
||||||
fViewer.setUseHashlookup(true);
|
fViewer.setUseHashlookup(true);
|
||||||
fViewer.setContentProvider(new MakeContentProvider());
|
fViewer.setContentProvider(new MakeContentProvider());
|
||||||
fViewer.setLabelProvider(new MakeLabelProvider());
|
fViewer.setLabelProvider(new MakeLabelProvider());
|
||||||
|
initDragAndDrop();
|
||||||
|
|
||||||
drillDownAdapter = new DrillDownAdapter(fViewer);
|
drillDownAdapter = new DrillDownAdapter(fViewer);
|
||||||
|
|
||||||
|
@ -100,6 +128,7 @@ public class MakeView extends ViewPart {
|
||||||
});
|
});
|
||||||
fViewer.getControl().addKeyListener(new KeyAdapter() {
|
fViewer.getControl().addKeyListener(new KeyAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
public void keyPressed(KeyEvent event) {
|
public void keyPressed(KeyEvent event) {
|
||||||
if (event.character == SWT.DEL && event.stateMask == 0) {
|
if (event.character == SWT.DEL && event.stateMask == 0) {
|
||||||
handleDeleteKeyPressed();
|
handleDeleteKeyPressed();
|
||||||
|
@ -111,6 +140,7 @@ public class MakeView extends ViewPart {
|
||||||
fViewer.setLabelProvider(new MakeLabelProvider());
|
fViewer.setLabelProvider(new MakeLabelProvider());
|
||||||
fViewer.setSorter(new ViewerSorter() {
|
fViewer.setSorter(new ViewerSorter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
public int category(Object element) {
|
public int category(Object element) {
|
||||||
if (element instanceof IResource) {
|
if (element instanceof IResource) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -126,6 +156,50 @@ public class MakeView extends ViewPart {
|
||||||
contributeToActionBars();
|
contributeToActionBars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize drag and drop operations.
|
||||||
|
*/
|
||||||
|
private void initDragAndDrop() {
|
||||||
|
int opers= DND.DROP_COPY | DND.DROP_MOVE;
|
||||||
|
|
||||||
|
// LocalSelectionTransfer is used inside Make Target View
|
||||||
|
// TextTransfer is used to drag outside the View or eclipse
|
||||||
|
Transfer[] dragTransfers= {
|
||||||
|
LocalSelectionTransfer.getInstance(),
|
||||||
|
MakeTargetTransfer.getInstance(),
|
||||||
|
TextTransfer.getInstance(),
|
||||||
|
};
|
||||||
|
AbstractSelectionDragAdapter[] dragListeners = {
|
||||||
|
new LocalTransferDragSourceListener(fViewer),
|
||||||
|
new MakeTargetTransferDragSourceListener(fViewer),
|
||||||
|
new TextTransferDragSourceListener(fViewer),
|
||||||
|
};
|
||||||
|
|
||||||
|
DelegatingDragAdapter delegatingDragAdapter = new DelegatingDragAdapter();
|
||||||
|
for (AbstractSelectionDragAdapter dragListener : dragListeners) {
|
||||||
|
delegatingDragAdapter.addDragSourceListener(dragListener);
|
||||||
|
}
|
||||||
|
fViewer.addDragSupport(opers, dragTransfers, delegatingDragAdapter);
|
||||||
|
|
||||||
|
Transfer[] dropTransfers= {
|
||||||
|
LocalSelectionTransfer.getInstance(),
|
||||||
|
MakeTargetTransfer.getInstance(),
|
||||||
|
FileTransfer.getInstance(),
|
||||||
|
TextTransfer.getInstance(),
|
||||||
|
};
|
||||||
|
AbstractContainerAreaDropAdapter[] dropListeners = {
|
||||||
|
new LocalTransferDropTargetListener(fViewer),
|
||||||
|
new MakeTargetTransferDropTargetListener(fViewer),
|
||||||
|
new FileTransferDropTargetListener(fViewer),
|
||||||
|
new TextTransferDropTargetListener(fViewer),
|
||||||
|
};
|
||||||
|
DelegatingDropAdapter delegatingDropAdapter = new DelegatingDropAdapter();
|
||||||
|
for (AbstractContainerAreaDropAdapter dropListener : dropListeners) {
|
||||||
|
delegatingDropAdapter.addDropTargetListener(dropListener);
|
||||||
|
}
|
||||||
|
fViewer.addDropSupport(opers | DND.DROP_DEFAULT, dropTransfers, delegatingDropAdapter);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns setting for this control.
|
* Returns setting for this control.
|
||||||
*
|
*
|
||||||
|
@ -184,6 +258,7 @@ public class MakeView extends ViewPart {
|
||||||
return haveTargets[0];
|
return haveTargets[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean select(Viewer viewer, Object parentElement, Object element) {
|
public boolean select(Viewer viewer, Object parentElement, Object element) {
|
||||||
if (isChecked() && element instanceof IFolder) {
|
if (isChecked() && element instanceof IFolder) {
|
||||||
try {
|
try {
|
||||||
|
@ -197,6 +272,7 @@ public class MakeView extends ViewPart {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
fViewer.refresh();
|
fViewer.refresh();
|
||||||
getSettings().put(FILTER_EMPTY_FOLDERS, isChecked());
|
getSettings().put(FILTER_EMPTY_FOLDERS, isChecked());
|
||||||
|
@ -204,16 +280,27 @@ public class MakeView extends ViewPart {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeActions() {
|
private void makeActions() {
|
||||||
buildTargetAction = new BuildTargetAction(fViewer.getControl().getShell());
|
Shell shell = fViewer.getControl().getShell();
|
||||||
addTargetAction = new AddTargetAction(fViewer.getControl().getShell());
|
|
||||||
deleteTargetAction = new DeleteTargetAction(fViewer.getControl().getShell());
|
clipboard = new Clipboard(shell.getDisplay());
|
||||||
editTargetAction = new EditTargetAction(fViewer.getControl().getShell());
|
|
||||||
|
buildTargetAction = new BuildTargetAction(shell);
|
||||||
|
addTargetAction = new AddTargetAction(shell);
|
||||||
|
copyTargetAction = new CopyTargetAction(shell, clipboard, pasteTargetAction);
|
||||||
|
pasteTargetAction = new PasteTargetAction(shell, clipboard);
|
||||||
|
deleteTargetAction = new DeleteTargetAction(shell);
|
||||||
|
editTargetAction = new EditTargetAction(shell);
|
||||||
trimEmptyFolderAction = new FilterEmtpyFoldersAction();
|
trimEmptyFolderAction = new FilterEmtpyFoldersAction();
|
||||||
}
|
}
|
||||||
private void contributeToActionBars() {
|
private void contributeToActionBars() {
|
||||||
IActionBars bars = getViewSite().getActionBars();
|
IActionBars actionBars = getViewSite().getActionBars();
|
||||||
fillLocalPullDown(bars.getMenuManager());
|
fillLocalPullDown(actionBars.getMenuManager());
|
||||||
fillLocalToolBar(bars.getToolBarManager());
|
fillLocalToolBar(actionBars.getToolBarManager());
|
||||||
|
|
||||||
|
TextActionHandler textActionHandler = new TextActionHandler(actionBars); // hooks handlers
|
||||||
|
textActionHandler.setCopyAction(copyTargetAction);
|
||||||
|
textActionHandler.setPasteAction(pasteTargetAction);
|
||||||
|
textActionHandler.setDeleteAction(deleteTargetAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillLocalToolBar(IToolBarManager toolBar) {
|
private void fillLocalToolBar(IToolBarManager toolBar) {
|
||||||
|
@ -243,6 +330,8 @@ public class MakeView extends ViewPart {
|
||||||
protected void fillContextMenu(IMenuManager manager) {
|
protected void fillContextMenu(IMenuManager manager) {
|
||||||
manager.add(buildTargetAction);
|
manager.add(buildTargetAction);
|
||||||
manager.add(addTargetAction);
|
manager.add(addTargetAction);
|
||||||
|
manager.add(copyTargetAction);
|
||||||
|
manager.add(pasteTargetAction);
|
||||||
manager.add(deleteTargetAction);
|
manager.add(deleteTargetAction);
|
||||||
manager.add(editTargetAction);
|
manager.add(editTargetAction);
|
||||||
manager.add(new Separator());
|
manager.add(new Separator());
|
||||||
|
@ -270,5 +359,20 @@ public class MakeView extends ViewPart {
|
||||||
buildTargetAction.selectionChanged(sel);
|
buildTargetAction.selectionChanged(sel);
|
||||||
deleteTargetAction.selectionChanged(sel);
|
deleteTargetAction.selectionChanged(sel);
|
||||||
editTargetAction.selectionChanged(sel);
|
editTargetAction.selectionChanged(sel);
|
||||||
|
copyTargetAction.selectionChanged(sel);
|
||||||
|
pasteTargetAction.selectionChanged(sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
if (clipboard != null) {
|
||||||
|
clipboard.dispose();
|
||||||
|
clipboard = null;
|
||||||
|
}
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008, 2009 Andrew Gvozdev.
|
||||||
|
* 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:
|
||||||
|
* Andrew Gvozdev (Quoin Inc.)- Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.make.ui.views;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.FileTransferDropTargetListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransfer;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferData;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferDropTargetListener;
|
||||||
|
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDropTargetListener;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
import org.eclipse.swt.dnd.Clipboard;
|
||||||
|
import org.eclipse.swt.dnd.DND;
|
||||||
|
import org.eclipse.swt.dnd.FileTransfer;
|
||||||
|
import org.eclipse.swt.dnd.TextTransfer;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.ISharedImages;
|
||||||
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.actions.SelectionListenerAction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action to paste make targets from clipboard to Make Target View.
|
||||||
|
* {@link PasteTargetAction} can accept several kinds of clipboard transfers
|
||||||
|
* including make targets, plain text or files .
|
||||||
|
* <p>
|
||||||
|
* {@link CopyTargetAction} and {@link PasteTargetAction} are able to transfer
|
||||||
|
* targets inside Make Target View or between eclipse sessions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PasteTargetAction extends SelectionListenerAction {
|
||||||
|
|
||||||
|
private final Shell shell;
|
||||||
|
private final Clipboard clipboard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor setting internal private fields and initializing the action.
|
||||||
|
*
|
||||||
|
* @param shell - the shell in which to show any dialogs.
|
||||||
|
* @param clipboard - system clipboard.
|
||||||
|
*/
|
||||||
|
protected PasteTargetAction(Shell shell, Clipboard clipboard) {
|
||||||
|
super(MakeUIPlugin.getResourceString("PasteTargetAction.label")); //$NON-NLS-1$
|
||||||
|
this.shell = shell;
|
||||||
|
this.clipboard = clipboard;
|
||||||
|
|
||||||
|
ISharedImages images = PlatformUI.getWorkbench().getSharedImages();
|
||||||
|
setDisabledImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED));
|
||||||
|
setImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
|
||||||
|
setHoverImageDescriptor(images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
|
||||||
|
|
||||||
|
setToolTipText(MakeUIPlugin.getResourceString("PasteTargetAction.tooltip")); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates enablement of this action in response to the given selection.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean updateSelection(IStructuredSelection selection) {
|
||||||
|
if (!super.updateSelection(selection)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selection.size() == 1 && (selection.getFirstElement() instanceof IContainer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform actual action of pasting of make targets from clipboard. An appropriate
|
||||||
|
* transfer agent is used depending on the clipboard content data type.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
List<?> resources = getSelectedResources();
|
||||||
|
if (resources.size() != 1 || !(resources.get(0) instanceof IContainer)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IContainer dropContainer = (IContainer) resources.get(0);
|
||||||
|
|
||||||
|
Object clipboardContent;
|
||||||
|
|
||||||
|
clipboardContent = clipboard.getContents(MakeTargetTransfer.getInstance());
|
||||||
|
if (clipboardContent instanceof MakeTargetTransferData) {
|
||||||
|
MakeTargetTransferDropTargetListener.createTransferTargetsUI(
|
||||||
|
(MakeTargetTransferData) clipboardContent, dropContainer, DND.DROP_COPY, shell);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clipboardContent = clipboard.getContents(FileTransfer.getInstance());
|
||||||
|
if (clipboardContent instanceof String[]) {
|
||||||
|
FileTransferDropTargetListener.createFileTargetsUI((String[]) clipboardContent,
|
||||||
|
dropContainer, DND.DROP_COPY, shell);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clipboardContent = clipboard.getContents(TextTransfer.getInstance());
|
||||||
|
if (clipboardContent instanceof String) {
|
||||||
|
TextTransferDropTargetListener.createMultilineTargetsUI((String) clipboardContent,
|
||||||
|
dropContainer, DND.DROP_COPY, shell);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue