package org.eclipse.jdt.internal.debug.ui.snippeteditor; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jface.action.Action; | |
import org.eclipse.jface.text.ITextSelection; | |
/** | |
* Base class for evaluation state dependent actions and | |
* supports to retarget the action to a different viewer. | |
*/ | |
public abstract class SnippetAction extends Action implements ISnippetStateChangedListener { | |
private JavaSnippetEditor fEditor; | |
public SnippetAction(JavaSnippetEditor editor) { | |
setEditor(editor); | |
} | |
public void setEditor(JavaSnippetEditor editor) { | |
if (fEditor != null) { | |
fEditor.removeSnippetStateChangedListener(this); | |
} | |
fEditor= editor; | |
if (fEditor != null) { | |
fEditor.addSnippetStateChangedListener(this); | |
snippetStateChanged(fEditor); | |
} | |
} | |
/** | |
* @see ISnippetStateChangedListener#snippetStateChanged(JavaSnippetEditor) | |
*/ | |
public void snippetStateChanged(JavaSnippetEditor editor) { | |
if (editor != null && !editor.isEvaluating()) { | |
update(); | |
} else { | |
setEnabled(false); | |
} | |
} | |
protected boolean textHasContent(String text) { | |
int length= text.length(); | |
if (length > 0) { | |
for (int i= 0; i < length; i++) { | |
if (Character.isLetterOrDigit(text.charAt(i))) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
/** | |
* Updates the enabled state based on the current text selection. | |
*/ | |
protected void update() { | |
if (fEditor != null) { | |
ITextSelection selection= (ITextSelection)fEditor.getSelectionProvider().getSelection(); | |
String text= selection.getText(); | |
boolean enabled= false; | |
if (text != null) { | |
enabled= textHasContent(text); | |
} | |
setEnabled(enabled); | |
} else { | |
setEnabled(false); | |
} | |
} | |
protected JavaSnippetEditor getEditor() { | |
return fEditor; | |
} | |
} |