blob: 1bea61cff2fb651e5d97e9cdd3249d6f94461ee5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions;
import java.util.Iterator;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValueModification;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.SelectionProviderAction;
import org.eclipse.ui.help.WorkbenchHelp;
/**
* Action for changing the value of primitives and <code>String</code> variables.
*/
public class ChangeVariableValueAction extends SelectionProviderAction {
private ChangeVariableValueInputDialog fInputDialog;
protected IVariable fVariable;
public ChangeVariableValueAction(Viewer viewer) {
super(viewer, ActionMessages.getString("ChangeVariableValue.title")); //$NON-NLS-1$
setDescription(ActionMessages.getString("ChangeVariableValue.toolTipText")); //$NON-NLS-1$
setImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_CHANGE_VARIABLE_VALUE));
setHoverImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_CHANGE_VARIABLE_VALUE));
setDisabledImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_CHANGE_VARIABLE_VALUE));
WorkbenchHelp.setHelp(
this,
IDebugHelpContextIds.CHANGE_VALUE_ACTION);
}
/**
* Edit the variable value with an inline text editor.
*/
protected void doActionPerformed(final IVariable variable) {
IWorkbenchWindow window= DebugUIPlugin.getActiveWorkbenchWindow();
if (window == null) {
return;
}
Shell activeShell= window.getShell();
// If a previous edit is still in progress, don't start another
if (fInputDialog != null) {
return;
}
fVariable = variable;
String name= ""; //$NON-NLS-1$
String value= ""; //$NON-NLS-1$
try {
name= fVariable.getName();
value= fVariable.getValue().getValueString();
} catch (DebugException exception) {
DebugUIPlugin.errorDialog(activeShell, ActionMessages.getString("ChangeVariableValue.errorDialogTitle"),ActionMessages.getString("ChangeVariableValue.errorDialogMessage"), exception); //$NON-NLS-2$ //$NON-NLS-1$
fInputDialog= null;
return;
}
fInputDialog= new ChangeVariableValueInputDialog(activeShell, ActionMessages.getString("ChangeVariableValueSet_Variable_Value_1"), ActionMessages.getString("ChangeVariableValueEnter_a_new_value_for__2") + name + ':', value, new IInputValidator() { //$NON-NLS-1$ //$NON-NLS-2$
/**
* Returns an error string if the input is invalid
*/
public String isValid(String input) {
try {
if (fVariable.verifyValue(input)) {
return null; // null means valid
}
} catch (DebugException exception) {
return ActionMessages.getString("ChangeVariableValueAn_exception_occurred_3"); //$NON-NLS-1$
}
return ActionMessages.getString("ChangeVariableValueInvalid_value_4"); //$NON-NLS-1$
}
});
fInputDialog.open();
String newValue= fInputDialog.getValue();
if (newValue != null) {
// null value means cancel was pressed
try {
fVariable.setValue(newValue);
getSelectionProvider().setSelection(new StructuredSelection(variable));
} catch (DebugException de) {
DebugUIPlugin.errorDialog(activeShell, ActionMessages.getString("ChangeVariableValue.errorDialogTitle"),ActionMessages.getString("ChangeVariableValue.errorDialogMessage"), de); //$NON-NLS-2$ //$NON-NLS-1$
fInputDialog= null;
return;
}
}
fInputDialog= null;
}
/**
* Updates the enabled state of this action based
* on the selection
*/
protected void update(IStructuredSelection sel) {
Iterator iter= sel.iterator();
if (iter.hasNext()) {
Object object= iter.next();
if (object instanceof IValueModification) {
IValueModification varMod= (IValueModification)object;
if (!varMod.supportsValueModification()) {
setEnabled(false);
return;
}
setEnabled(!iter.hasNext());
return;
}
}
setEnabled(false);
}
/**
* @see IAction#run()
*/
public void run() {
Iterator iterator= getStructuredSelection().iterator();
doActionPerformed((IVariable)iterator.next());
}
/**
* @see SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
*/
public void selectionChanged(IStructuredSelection sel) {
update(sel);
}
}