mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 06:02:11 +02:00
Bug 235747: [registers] Allow user to edit the register groups.
Bug 235747: Move register group actions to the command framework. Change-Id: Ife5aefc1a1609309724db01d92a35750e25def24 Signed-off-by: Alvaro Sanchez-Leon <alvsan09@gmail.com> Signed-off-by: Marc Khouzam <marc.khouzam@ericsson.com> Reviewed-on: https://git.eclipse.org/r/13980 Tested-by: Hudson CI
This commit is contained in:
parent
a830f285fe
commit
3ab1678bc3
42 changed files with 4758 additions and 937 deletions
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: %pluginName
|
||||
Bundle-SymbolicName: org.eclipse.cdt.debug.core; singleton:=true
|
||||
Bundle-Version: 7.5.0.qualifier
|
||||
Bundle-Version: 7.6.0.qualifier
|
||||
Bundle-Activator: org.eclipse.cdt.debug.core.CDebugCorePlugin
|
||||
Bundle-Vendor: %providerName
|
||||
Bundle-Localization: plugin
|
||||
|
@ -16,20 +16,28 @@ Export-Package: org.eclipse.cdt.debug.core,
|
|||
org.eclipse.cdt.debug.core.disassembly,
|
||||
org.eclipse.cdt.debug.core.executables,
|
||||
org.eclipse.cdt.debug.core.model,
|
||||
org.eclipse.cdt.debug.core.model.provisional;x-friends:="org.eclipse.cdt.dsf,org.eclipse.cdt.debug.ui.memory.memorybrowser,org.eclipse.cdt.dsf.gdb,org.eclipse.cdt.debug.ui.memory.traditional",
|
||||
org.eclipse.cdt.debug.core.model.provisional;
|
||||
x-friends:="org.eclipse.cdt.dsf,
|
||||
org.eclipse.cdt.debug.ui.memory.memorybrowser,
|
||||
org.eclipse.cdt.dsf.gdb,
|
||||
org.eclipse.cdt.debug.ui.memory.traditional",
|
||||
org.eclipse.cdt.debug.core.sourcelookup,
|
||||
org.eclipse.cdt.debug.internal.core;x-friends:="org.eclipse.cdt.dsf.gdb,org.eclipse.cdt.dsf.gdb.ui,org.eclipse.cdt.dsf,org.eclipse.cdt.dsf.ui",
|
||||
org.eclipse.cdt.debug.internal.core;
|
||||
x-friends:="org.eclipse.cdt.dsf.gdb,
|
||||
org.eclipse.cdt.dsf.gdb.ui,
|
||||
org.eclipse.cdt.dsf,
|
||||
org.eclipse.cdt.dsf.ui",
|
||||
org.eclipse.cdt.debug.internal.core.breakpoints;x-friends:="org.eclipse.cdt.debug.edc,org.eclipse.cdt.dsf.gdb",
|
||||
org.eclipse.cdt.debug.internal.core.disassembly;x-internal:=true,
|
||||
org.eclipse.cdt.debug.internal.core.executables;x-internal:=true,
|
||||
org.eclipse.cdt.debug.internal.core.model;x-internal:=true,
|
||||
org.eclipse.cdt.debug.internal.core.srcfinder;x-internal:=true,
|
||||
org.eclipse.cdt.debug.internal.core.model;x-friends:="org.eclipse.cdt.dsf.ui,org.eclipse.cdt.dsf.gdb",
|
||||
org.eclipse.cdt.debug.internal.core.sourcelookup;
|
||||
x-friends:="org.eclipse.cdt.dsf.ui,
|
||||
org.eclipse.cdt.debug.edc,
|
||||
org.eclipse.cdt.debug.gdbjtag.core,
|
||||
org.eclipse.cdt.dsf.gdb,
|
||||
org.eclipse.cdt.dsf"
|
||||
org.eclipse.cdt.dsf",
|
||||
org.eclipse.cdt.debug.internal.core.srcfinder;x-internal:=true
|
||||
Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
|
||||
org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
|
||||
org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)",
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<version>7.5.0-SNAPSHOT</version>
|
||||
<version>7.6.0-SNAPSHOT</version>
|
||||
<artifactId>org.eclipse.cdt.debug.core</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.core.model;
|
||||
|
||||
import org.eclipse.debug.core.commands.IDebugCommandHandler;
|
||||
|
||||
/**
|
||||
* Handler interface to for the addRegisterGroup command
|
||||
*
|
||||
* @since 7.6
|
||||
*/
|
||||
public interface IAddRegisterGroupHandler extends IDebugCommandHandler {
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.core.model;
|
||||
|
||||
import org.eclipse.debug.core.commands.IDebugCommandHandler;
|
||||
|
||||
/**
|
||||
* Handler interface to for the editRegisterGroup command
|
||||
* @since 7.6
|
||||
*/
|
||||
public interface IEditRegisterGroupHandler extends IDebugCommandHandler {
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.core.model;
|
||||
|
||||
import org.eclipse.debug.core.commands.IDebugCommandHandler;
|
||||
|
||||
/**
|
||||
* Handler interface to for the removeRegisterGroups command
|
||||
* @since 7.6
|
||||
*/
|
||||
public interface IRemoveRegisterGroupsHandler extends IDebugCommandHandler {
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.core.model;
|
||||
|
||||
import org.eclipse.debug.core.commands.IDebugCommandHandler;
|
||||
|
||||
/**
|
||||
* Handler interface to for the restoreRegisterGroups command
|
||||
* @since 7.6
|
||||
*/
|
||||
public interface IRestoreRegisterGroupsHandler extends IDebugCommandHandler {
|
||||
}
|
|
@ -0,0 +1,263 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2014 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation in CRegisterManager.java and CRegisterGroup.java
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Integrated from files above for Bug 235747
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.internal.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||
import org.eclipse.cdt.debug.core.model.IRegisterDescriptor;
|
||||
import org.eclipse.cdt.debug.internal.core.model.CoreModelMessages;
|
||||
import org.eclipse.cdt.debug.internal.core.model.IRegisterGroupDescriptor;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.debug.core.DebugPlugin;
|
||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
public class RegisterGroupsPersistance {
|
||||
private static final String BLANK_STRING = ""; //$NON-NLS-1$
|
||||
private static final String DEFAULT_LAUNCH_CONFIGURATION_TARGET_ATTRIBUTE = ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_REGISTER_GROUPS;
|
||||
private static final String ELEMENT_REGISTER_GROUP_LIST = "registerGroups"; //$NON-NLS-1$
|
||||
private static final String ATTR_REGISTER_GROUP_MEMENTO = "memento"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELEMENT_GROUP = "group"; //$NON-NLS-1$
|
||||
private static final String ELEMENT_REGISTER_GROUP = "registerGroup"; //$NON-NLS-1$
|
||||
private static final String ATTR_REGISTER_GROUP_NAME = "name"; //$NON-NLS-1$
|
||||
private static final String ATTR_REGISTER_GROUP_ENABLED = "enabled"; //$NON-NLS-1$
|
||||
|
||||
private static final String ELEMENT_REGISTER = "register"; //$NON-NLS-1$
|
||||
|
||||
private static final String ATTR_REGISTER_NAME = "name"; //$NON-NLS-1$
|
||||
private static final String ATTR_REGISTER_ORIGINAL_GROUP_NAME = "originalGroupName"; //$NON-NLS-1$
|
||||
|
||||
private final ILaunchConfiguration fLaunchConfig;
|
||||
|
||||
private String fLaunchConfigTargetAttribute = DEFAULT_LAUNCH_CONFIGURATION_TARGET_ATTRIBUTE;
|
||||
|
||||
// Constructor
|
||||
public RegisterGroupsPersistance(ILaunchConfiguration configuration) {
|
||||
fLaunchConfig = configuration;
|
||||
}
|
||||
|
||||
private class RegisterGroupDescriptor implements IRegisterGroupDescriptor {
|
||||
|
||||
private final String fMemento;
|
||||
private final String fName;
|
||||
private final boolean fEnabled;
|
||||
IRegisterDescriptor[] fRegisterDescriptors = null;
|
||||
|
||||
public RegisterGroupDescriptor(String memento, String groupName, boolean enabled) {
|
||||
fMemento = memento;
|
||||
fName = groupName;
|
||||
fEnabled = enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return fName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return fEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegisterDescriptor[] getChildren() throws CoreException {
|
||||
if (fRegisterDescriptors == null) {
|
||||
|
||||
Node node = DebugPlugin.parseDocument(fMemento);
|
||||
Element element = (Element) node;
|
||||
|
||||
List<IRegisterDescriptor> list = new ArrayList<IRegisterDescriptor>();
|
||||
Node childNode = element.getFirstChild();
|
||||
while (childNode != null) {
|
||||
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element child = (Element) childNode;
|
||||
if (ELEMENT_REGISTER.equals(child.getNodeName())) {
|
||||
String name = child.getAttribute(ATTR_REGISTER_NAME);
|
||||
String originalGroupName = child.getAttribute(ATTR_REGISTER_ORIGINAL_GROUP_NAME);
|
||||
if (name == null || name.length() == 0 || originalGroupName == null
|
||||
|| originalGroupName.length() == 0) {
|
||||
abort(CoreModelMessages.getString("CRegisterGroup.3"), null); //$NON-NLS-1$
|
||||
} else {
|
||||
IRegisterDescriptor d = findDescriptor(originalGroupName, name);
|
||||
if (d != null)
|
||||
list.add(d);
|
||||
else
|
||||
CDebugCorePlugin.log(CoreModelMessages.getString("CRegisterGroup.4")); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
}
|
||||
childNode = childNode.getNextSibling();
|
||||
}
|
||||
|
||||
fRegisterDescriptors = list.toArray(new IRegisterDescriptor[list.size()]);
|
||||
}
|
||||
|
||||
return fRegisterDescriptors;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class RegisterDescriptor implements IRegisterDescriptor {
|
||||
private final String fGroupName;
|
||||
private final String fName;
|
||||
|
||||
private RegisterDescriptor(String oGroupName, String rname) {
|
||||
fGroupName = oGroupName;
|
||||
fName = rname;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return fName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGroupName() {
|
||||
return fGroupName;
|
||||
}
|
||||
}
|
||||
|
||||
public void setLaunchConfigurationTargetAttribute(String launchConfigurationTargetAttribute) {
|
||||
fLaunchConfigTargetAttribute = launchConfigurationTargetAttribute;
|
||||
}
|
||||
|
||||
public String getLaunchConfigurationTargetAttribute() {
|
||||
|
||||
return fLaunchConfigTargetAttribute;
|
||||
}
|
||||
|
||||
public IRegisterGroupDescriptor[] parseGroups() {
|
||||
List<IRegisterGroupDescriptor> groups = new ArrayList<IRegisterGroupDescriptor>();
|
||||
String memento;
|
||||
try {
|
||||
memento = fLaunchConfig.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_REGISTER_GROUPS, BLANK_STRING);
|
||||
|
||||
if (memento != null && memento.length() > 0) {
|
||||
Node node = DebugPlugin.parseDocument(memento);
|
||||
|
||||
if (node.getNodeType() != Node.ELEMENT_NODE) {
|
||||
abort("Unable to restore register groups - invalid memento.", null); //$NON-NLS-1$
|
||||
}
|
||||
Element element = (Element) node;
|
||||
if (!ELEMENT_REGISTER_GROUP_LIST.equals(element.getNodeName())) {
|
||||
abort("Unable to restore register groups - expecting register group list element.", null); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
Node childNode = element.getFirstChild();
|
||||
while (childNode != null) {
|
||||
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
|
||||
Element child = (Element) childNode;
|
||||
if (ELEMENT_GROUP.equals(child.getNodeName())) {
|
||||
String groupMemento = child.getAttribute(ATTR_REGISTER_GROUP_MEMENTO);
|
||||
//
|
||||
IRegisterGroupDescriptor groupdesc = createGroupFromMemento(groupMemento);
|
||||
if (groupdesc != null) {
|
||||
groups.add(groupdesc);
|
||||
}
|
||||
}
|
||||
}
|
||||
childNode = childNode.getNextSibling();
|
||||
}
|
||||
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return groups.toArray(new IRegisterGroupDescriptor[groups.size()]);
|
||||
|
||||
}
|
||||
|
||||
public void saveGroups(IRegisterGroupDescriptor[] groups) throws CoreException {
|
||||
try {
|
||||
ILaunchConfigurationWorkingCopy wc = fLaunchConfig.getWorkingCopy();
|
||||
|
||||
//if no groups present, save to a blank string, i.e. expected by CDI and handled by DSF
|
||||
wc.setAttribute(fLaunchConfigTargetAttribute, (groups.length > 0) ? getMemento(groups) : BLANK_STRING);
|
||||
wc.doSave();
|
||||
} catch (CoreException e) {
|
||||
abort(e.getMessage() + ", cause: " + e.getCause(), e); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
protected IRegisterDescriptor findDescriptor(String originalGroupName, String name) {
|
||||
return new RegisterDescriptor(originalGroupName, name);
|
||||
}
|
||||
|
||||
private IRegisterGroupDescriptor createGroupFromMemento(String memento) throws CoreException {
|
||||
Node node = DebugPlugin.parseDocument(memento);
|
||||
if (node.getNodeType() != Node.ELEMENT_NODE) {
|
||||
abort(CoreModelMessages.getString("CRegisterGroup.0"), null); //$NON-NLS-1$
|
||||
}
|
||||
Element element = (Element) node;
|
||||
if (!ELEMENT_REGISTER_GROUP.equals(element.getNodeName())) {
|
||||
abort(CoreModelMessages.getString("CRegisterGroup.1"), null); //$NON-NLS-1$
|
||||
}
|
||||
String groupName = element.getAttribute(ATTR_REGISTER_GROUP_NAME);
|
||||
if (groupName == null || groupName.length() == 0) {
|
||||
abort(CoreModelMessages.getString("CRegisterGroup.2"), null); //$NON-NLS-1$
|
||||
}
|
||||
String e = element.getAttribute(ATTR_REGISTER_GROUP_ENABLED);
|
||||
boolean enabled = Boolean.parseBoolean(e);
|
||||
|
||||
IRegisterGroupDescriptor group = new RegisterGroupDescriptor(memento, groupName, enabled);
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
private String getMemento(IRegisterGroupDescriptor[] groups) throws CoreException {
|
||||
Document document = DebugPlugin.newDocument();
|
||||
Element element = document.createElement(ELEMENT_REGISTER_GROUP_LIST);
|
||||
for (IRegisterGroupDescriptor group : groups) {
|
||||
Element child = document.createElement(ELEMENT_GROUP);
|
||||
child.setAttribute(ATTR_REGISTER_GROUP_MEMENTO, getMemento(group));
|
||||
element.appendChild(child);
|
||||
}
|
||||
|
||||
document.appendChild(element);
|
||||
return DebugPlugin.serializeDocument(document);
|
||||
}
|
||||
|
||||
private String getMemento(IRegisterGroupDescriptor group) throws CoreException {
|
||||
Document document = DebugPlugin.newDocument();
|
||||
Element element = document.createElement(ELEMENT_REGISTER_GROUP);
|
||||
element.setAttribute(ATTR_REGISTER_GROUP_NAME, group.getName());
|
||||
element.setAttribute(ATTR_REGISTER_GROUP_ENABLED, Boolean.valueOf(group.isEnabled()).toString());
|
||||
IRegisterDescriptor[] registerDescriptors = group.getChildren();
|
||||
for (int i = 0; i < registerDescriptors.length; ++i) {
|
||||
Element child = document.createElement(ELEMENT_REGISTER);
|
||||
child.setAttribute(ATTR_REGISTER_NAME, registerDescriptors[i].getName());
|
||||
child.setAttribute(ATTR_REGISTER_ORIGINAL_GROUP_NAME, registerDescriptors[i].getGroupName());
|
||||
element.appendChild(child);
|
||||
}
|
||||
|
||||
document.appendChild(element);
|
||||
return DebugPlugin.serializeDocument(document);
|
||||
}
|
||||
|
||||
private void abort(String message, Throwable exception) throws CoreException {
|
||||
IStatus status = new Status(IStatus.ERROR, CDebugCorePlugin.PLUGIN_ID, IStatus.ERROR, message, exception);
|
||||
throw new CoreException(status);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson AB and others.
|
||||
* 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:
|
||||
* Alvaro Sanchez-Leon (Ericsson) - First Implementation and API (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.core.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.IRegisterDescriptor;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
/**
|
||||
* Describes a register Group
|
||||
*/
|
||||
public interface IRegisterGroupDescriptor {
|
||||
/**
|
||||
* @return the register group's name
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* @return the enabled state
|
||||
*/
|
||||
public boolean isEnabled();
|
||||
|
||||
/**
|
||||
* @return the registers associated to this group
|
||||
* @throws CoreException
|
||||
*/
|
||||
public IRegisterDescriptor[] getChildren() throws CoreException;
|
||||
}
|
|
@ -142,12 +142,26 @@ ModulesDetailPaneFontDefinition.description=The text font used in the detail pan
|
|||
ModulePropertiesAction.label=Properties...
|
||||
ModulePropertiesAction.tooltip=Open Module Properties Dialog
|
||||
|
||||
RegisterGroupingCategory.description=Set of commands for Register Grouping
|
||||
RegisterGroupingCategory.name=Register Grouping commands
|
||||
AddRegisterGroup.description=Adds a Register Group
|
||||
AddRegisterGroup.name=Add RegisterGroup
|
||||
AddRegisterGroup.label=Add Register Group
|
||||
AddRegisterGroupAction.label=Add Register Group
|
||||
AddRegisterGroupAction.tooltip=Add Register Group
|
||||
RemoveRegisterGroupAction.label=Remove Register Group
|
||||
RemoveRegisterGroupAction.tooltip=Remove Register Group
|
||||
RemoveRegisterGroups.description=Removes one or more Register Groups
|
||||
RemoveRegisterGroups.name=Remove Register Groups
|
||||
RemoveRegisterGroups.label=Remove Register Groups
|
||||
RemoveRegisterGroupsAction.label=Remove Register Groups
|
||||
RemoveRegisterGroupsAction.tooltip=Remove Register Groups
|
||||
EditRegisterGroup.description=Edits a Register Group
|
||||
EditRegisterGroup.name=Edit Register Group
|
||||
EditRegisterGroup.label=Edit Register Group
|
||||
EditRegisterGroupAction.label=Edit Register Group
|
||||
EditRegisterGroupAction.tooltip=Edit Register Group
|
||||
RestoreRegisterGroups.description=Restores the Default Register Groups
|
||||
RestoreRegisterGroups.name=Restore Default Register Groups
|
||||
RestoreRegisterGroups.label=Restore Default Register Groups
|
||||
RestoredefaultRegisterGroupsAction.label=Restore Default Register Groups
|
||||
RestoredefaultRegisterGroupsAction.tooltip=Restore Default Register Groups
|
||||
|
||||
|
|
|
@ -798,34 +798,6 @@
|
|||
class="org.eclipse.cdt.debug.core.model.ICVariable">
|
||||
</selection>
|
||||
</action>
|
||||
<action
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.RestoreDefaultRegisterGroupsActionDelegate"
|
||||
helpContextId="restore_default_register_groups_action_context"
|
||||
id="org.eclipse.cdt.debug.ui.restoreDefaultRegisterGroupsAction"
|
||||
label="%RestoredefaultRegisterGroupsAction.label"
|
||||
menubarPath="additions"
|
||||
style="push"
|
||||
tooltip="%RestoredefaultRegisterGroupsAction.tooltip">
|
||||
<enablement>
|
||||
<pluginState
|
||||
id="org.eclipse.cdt.debug.ui"
|
||||
value="activated"/>
|
||||
</enablement>
|
||||
</action>
|
||||
<action
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.AddRegisterGroupActionDelegate"
|
||||
helpContextId="add_register_group_action_context"
|
||||
id="org.eclipse.cdt.debug.ui.addRegisterGroupAction"
|
||||
label="%AddRegisterGroupAction.label"
|
||||
menubarPath="additions"
|
||||
style="push"
|
||||
tooltip="%AddRegisterGroupAction.tooltip">
|
||||
<enablement>
|
||||
<pluginState
|
||||
id="org.eclipse.cdt.debug.ui"
|
||||
value="activated"/>
|
||||
</enablement>
|
||||
</action>
|
||||
</viewerContribution>
|
||||
<objectContribution
|
||||
objectClass="org.eclipse.cdt.debug.core.model.ICModule"
|
||||
|
@ -868,27 +840,6 @@
|
|||
</enablement>
|
||||
</action>
|
||||
</viewerContribution>
|
||||
<objectContribution
|
||||
adaptable="false"
|
||||
id="org.eclipse.cdt.debug.ui.RegisterGroupActions"
|
||||
objectClass="org.eclipse.cdt.debug.core.model.IPersistableRegisterGroup">
|
||||
<action
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.RemoveRegisterGroupActionDelegate"
|
||||
enablesFor="+"
|
||||
helpContextId="remove_register_group_action_context"
|
||||
id="org.eclipse.cdt.debug.ui.removeRegisterGroupAction"
|
||||
label="%RemoveRegisterGroupAction.label"
|
||||
menubarPath="additions"
|
||||
tooltip="%RemoveRegisterGroupAction.tooltip"/>
|
||||
<action
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.EditRegisterGroupActionDelegate"
|
||||
enablesFor="1"
|
||||
helpContextId="edit_register_group_action_context"
|
||||
id="org.eclipse.cdt.debug.ui.editRegisterGroupAction"
|
||||
label="%EditRegisterGroupAction.label"
|
||||
menubarPath="additions"
|
||||
tooltip="%EditRegisterGroupAction.tooltip"/>
|
||||
</objectContribution>
|
||||
<viewerContribution
|
||||
id="org.eclipse.debug.ui.MemoryView.RenderingViewPane.popupMenu.1"
|
||||
targetID="org.eclipse.debug.ui.MemoryView.RenderingViewPane.1">
|
||||
|
@ -1395,18 +1346,14 @@
|
|||
<factory
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.RetargettableActionAdapterFactory"
|
||||
adaptableType="org.eclipse.cdt.internal.ui.editor.CEditor">
|
||||
<adapter
|
||||
type="org.eclipse.debug.ui.actions.IRunToLineTarget">
|
||||
</adapter>
|
||||
<adapter type="org.eclipse.debug.ui.actions.IRunToLineTarget"/>
|
||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IResumeAtLineTarget"/>
|
||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IMoveToLineTarget"/>
|
||||
</factory>
|
||||
<factory
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.RetargettableActionAdapterFactory"
|
||||
adaptableType="org.eclipse.cdt.internal.ui.editor.asm.AsmTextEditor">
|
||||
<adapter
|
||||
type="org.eclipse.debug.ui.actions.IRunToLineTarget">
|
||||
</adapter>
|
||||
<adapter type="org.eclipse.debug.ui.actions.IRunToLineTarget"/>
|
||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IResumeAtLineTarget"/>
|
||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IMoveToLineTarget"/>
|
||||
</factory>
|
||||
|
@ -1964,6 +1911,35 @@
|
|||
</extension>
|
||||
<extension
|
||||
point="org.eclipse.ui.commands">
|
||||
<category
|
||||
description="%RegisterGroupingCategory.description"
|
||||
id="org.eclipse.cdt.debug.ui.category.registerGrouping"
|
||||
name="%RegisterGroupingCategory.name">
|
||||
</category>
|
||||
<command
|
||||
categoryId="org.eclipse.cdt.debug.ui.category.registerGrouping"
|
||||
description="%AddRegisterGroup.description"
|
||||
id="org.eclipse.cdt.debug.ui.command.addRegisterGroup"
|
||||
name="%AddRegisterGroup.name">
|
||||
</command>
|
||||
<command
|
||||
categoryId="org.eclipse.cdt.debug.ui.category.registerGrouping"
|
||||
description="%EditRegisterGroup.description"
|
||||
id="org.eclipse.cdt.debug.ui.command.editRegisterGroup"
|
||||
name="%EditRegisterGroup.name">
|
||||
</command>
|
||||
<command
|
||||
categoryId="org.eclipse.cdt.debug.ui.category.registerGrouping"
|
||||
description="%RestoreRegisterGroups.description"
|
||||
id="org.eclipse.cdt.debug.ui.command.restoreRegisterGroups"
|
||||
name="%RestoreRegisterGroups.name">
|
||||
</command>
|
||||
<command
|
||||
categoryId="org.eclipse.cdt.debug.ui.category.registerGrouping"
|
||||
description="%RemoveRegisterGroups.description"
|
||||
id="org.eclipse.cdt.debug.ui.command.removeRegisterGroups"
|
||||
name="%RemoveRegisterGroups.name">
|
||||
</command>
|
||||
<category
|
||||
description="%ReverseDebuggingCategory.description"
|
||||
id="org.eclipse.cdt.debug.ui.category.reverseDebugging"
|
||||
|
@ -2072,6 +2048,76 @@
|
|||
</extension>
|
||||
<extension
|
||||
point="org.eclipse.ui.handlers">
|
||||
<handler
|
||||
class="org.eclipse.cdt.debug.internal.ui.commands.AddRegisterGroupCommandHandler"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.addRegisterGroup">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<or>
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegisterGroup">
|
||||
</instanceof>
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegister">
|
||||
</instanceof>
|
||||
</or>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.debug.internal.ui.commands.EditRegisterGroupCommandHandler"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.editRegisterGroup">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegisterGroup">
|
||||
</instanceof>
|
||||
</iterate>
|
||||
<count value="1">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.debug.internal.ui.commands.RestoreRegisterGroupsCommandHandler"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.restoreRegisterGroups">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<or>
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegisterGroup">
|
||||
</instanceof>
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegister">
|
||||
</instanceof>
|
||||
</or>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.debug.internal.ui.commands.RemoveRegisterGroupsCommandHandler"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.removeRegisterGroups">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<instanceof
|
||||
value="org.eclipse.cdt.debug.internal.core.model.CRegisterGroup">
|
||||
</instanceof>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.debug.internal.ui.commands.ReverseToggleCommandHandler"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.reverseToggle">
|
||||
|
@ -2279,6 +2325,48 @@
|
|||
<extension
|
||||
point="org.eclipse.ui.menus">
|
||||
|
||||
<!-- Register Grouping contributions to the registers view popup -->
|
||||
<menuContribution
|
||||
locationURI="popup:org.eclipse.debug.ui.RegisterView?after=additions">
|
||||
<command
|
||||
commandId="org.eclipse.cdt.debug.ui.command.restoreRegisterGroups"
|
||||
label="%RestoreRegisterGroups.label"
|
||||
style="push">
|
||||
<visibleWhen checkEnabled="true">
|
||||
</visibleWhen>
|
||||
</command>
|
||||
</menuContribution>
|
||||
<menuContribution
|
||||
locationURI="popup:org.eclipse.debug.ui.RegisterView?after=additions">
|
||||
<command
|
||||
commandId="org.eclipse.cdt.debug.ui.command.addRegisterGroup"
|
||||
label="%AddRegisterGroup.label"
|
||||
style="push">
|
||||
<visibleWhen checkEnabled="true">
|
||||
</visibleWhen>
|
||||
</command>
|
||||
</menuContribution>
|
||||
<menuContribution
|
||||
locationURI="popup:org.eclipse.debug.ui.RegisterView?after=additions">
|
||||
<command
|
||||
commandId="org.eclipse.cdt.debug.ui.command.removeRegisterGroups"
|
||||
label="%RemoveRegisterGroups.label"
|
||||
style="push">
|
||||
<visibleWhen checkEnabled="true">
|
||||
</visibleWhen>
|
||||
</command>
|
||||
</menuContribution>
|
||||
<menuContribution
|
||||
locationURI="popup:org.eclipse.debug.ui.RegisterView?after=additions">
|
||||
<command
|
||||
commandId="org.eclipse.cdt.debug.ui.command.editRegisterGroup"
|
||||
label="%EditRegisterGroup.label"
|
||||
style="push">
|
||||
<visibleWhen checkEnabled="true">
|
||||
</visibleWhen>
|
||||
</command>
|
||||
</menuContribution>
|
||||
|
||||
<!-- Reverse debugging contributions to Debug view -->
|
||||
<menuContribution
|
||||
locationURI="toolbar:org.eclipse.debug.ui.DebugView?after=additions">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2007 QNX Software Systems and others.
|
||||
* Copyright (c) 2004, 2014 QNX Software Systems and others.
|
||||
* 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Alvaro Sanchez-Leon (Ericsson) - preserve selection changes (needed by Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
|
@ -187,6 +188,7 @@ public abstract class AbstractViewActionDelegate extends ActionDelegate implemen
|
|||
*/
|
||||
@Override
|
||||
public void selectionChanged( IAction action, ISelection selection ) {
|
||||
setSelection( selection );
|
||||
update();
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
# Marc Khouzam (Ericsson) - Added dynamic printf support (400628)
|
||||
# Simon Marchi (Ericsson) - Modified error messages in CastToArrayActionDelegate (437182)
|
||||
# Marc Dumais (Ericsson) - Bug 437692
|
||||
# Alvaro Sanchez-Leon (Ericsson) - Allow user to edit the register groups (Bug 235747)
|
||||
###############################################################################
|
||||
|
||||
LoadSymbolsActionDelegate.Unable_to_load_symbols_of_shared_library_1=Unable to load symbols of shared library.
|
||||
|
@ -119,9 +120,10 @@ ToggleDetailPaneAction.4=Place the Detail Pane on the Right of the Main Tree Vie
|
|||
ToggleDetailPaneAction.5=Place the Detail Pane on the Right of the Main Tree View
|
||||
ToggleDetailPaneAction.6=Hide the Detail Pane so that only the Main Tree View is Visible
|
||||
ToggleDetailPaneAction.7=Hide the Detail Pane so that only the Main Tree View is Visible
|
||||
AddRegisterGroupActionDelegate.0=Error
|
||||
RegisterGroupActionDelegate.0=Error
|
||||
AddRegisterGroupActionDelegate.1=Error(s) occurred adding register group.
|
||||
EditRegisterGroupActionDelegate.0=Unable to edit register group.
|
||||
RemoveRegisterGroupsActionDelegate.0=Unable to remove register group(s).
|
||||
AddEventBreakpointActionDelegate.0=Error adding Event Breakpoint
|
||||
AddEventBreakpointActionDelegate.2=Action is not supported by installed debuggers
|
||||
ToggleCBreakpointsTargetFactory.CBreakpointDescription=Standard C/C++ breakpoint type.
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2005 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.debug.core.DebugEvent;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.IDebugElement;
|
||||
import org.eclipse.debug.ui.DebugUITools;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.jface.window.Window;
|
||||
|
||||
/**
|
||||
* A delegate for the "Add register group" action.
|
||||
*/
|
||||
public class AddRegisterGroupActionDelegate extends AbstractViewActionDelegate {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#getErrorDialogTitle()
|
||||
*/
|
||||
@Override
|
||||
protected String getErrorDialogTitle() {
|
||||
return ActionMessages.getString( "AddRegisterGroupActionDelegate.0" ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#getErrorDialogMessage()
|
||||
*/
|
||||
@Override
|
||||
protected String getErrorDialogMessage() {
|
||||
return ActionMessages.getString( "AddRegisterGroupActionDelegate.1" ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#doAction()
|
||||
*/
|
||||
@Override
|
||||
protected void doAction() throws DebugException {
|
||||
RegisterGroupDialog dialog = new RegisterGroupDialog( getView().getSite().getShell(), getDebugTarget().getRegisterDescriptors() );
|
||||
if ( dialog.open() == Window.OK ) {
|
||||
getDebugTarget().addRegisterGroup( dialog.getName(), dialog.getDescriptors() );
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#update()
|
||||
*/
|
||||
@Override
|
||||
protected void update() {
|
||||
IAction action = getAction();
|
||||
if ( action != null ) {
|
||||
ICDebugTarget target = getDebugTarget();
|
||||
action.setEnabled( ( target != null ) ? target.isSuspended() : false );
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#doHandleDebugEvent(org.eclipse.debug.core.DebugEvent)
|
||||
*/
|
||||
@Override
|
||||
protected void doHandleDebugEvent( DebugEvent event ) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#init(org.eclipse.jface.action.IAction)
|
||||
*/
|
||||
@Override
|
||||
public void init( IAction action ) {
|
||||
super.init( action );
|
||||
Object element = DebugUITools.getDebugContext();
|
||||
setSelection( (element != null) ? new StructuredSelection( element ) : new StructuredSelection() );
|
||||
update();
|
||||
}
|
||||
|
||||
private ICDebugTarget getDebugTarget() {
|
||||
Object element = getSelection().getFirstElement();
|
||||
if ( element instanceof IDebugElement ) {
|
||||
return (ICDebugTarget)((IDebugElement)element).getDebugTarget().getAdapter( ICDebugTarget.class );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,82 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2005 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.model.IPersistableRegisterGroup;
|
||||
import org.eclipse.cdt.debug.core.model.IRegisterDescriptor;
|
||||
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
|
||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.IDebugTarget;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.ui.IObjectActionDelegate;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.actions.ActionDelegate;
|
||||
|
||||
|
||||
public class EditRegisterGroupActionDelegate extends ActionDelegate implements IObjectActionDelegate {
|
||||
|
||||
private IPersistableRegisterGroup fSelection;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
|
||||
*/
|
||||
@Override
|
||||
public void setActivePart( IAction action, IWorkbenchPart targetPart ) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
@Override
|
||||
public void selectionChanged( IAction action, ISelection selection ) {
|
||||
if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
if ( !ss.isEmpty() ) {
|
||||
Object s = ss.getFirstElement();
|
||||
if ( s instanceof IPersistableRegisterGroup ) {
|
||||
fSelection = (IPersistableRegisterGroup)s;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IPersistableRegisterGroup getRegisterGroup() {
|
||||
return fSelection;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction)
|
||||
*/
|
||||
@Override
|
||||
public void run( IAction action ) {
|
||||
IPersistableRegisterGroup group = getRegisterGroup();
|
||||
IRegisterDescriptor[] all;
|
||||
try {
|
||||
all = ((CDebugTarget)group.getDebugTarget()).getRegisterDescriptors();
|
||||
RegisterGroupDialog dialog = new RegisterGroupDialog( Display.getCurrent().getActiveShell(), group.getName(), all, group.getRegisterDescriptors() );
|
||||
if ( dialog.open() == Window.OK ) {
|
||||
IDebugTarget target = group.getDebugTarget();
|
||||
if ( target instanceof ICDebugTarget ) {
|
||||
((ICDebugTarget)target).modifyRegisterGroup( group, dialog.getDescriptors() );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( DebugException e ) {
|
||||
CDebugUIPlugin.errorDialog( ActionMessages.getString( "EditRegisterGroupActionDelegate.0" ), e.getStatus() ); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2005 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.debug.core.model.IDebugTarget;
|
||||
import org.eclipse.debug.core.model.IRegisterGroup;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.IObjectActionDelegate;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.actions.ActionDelegate;
|
||||
|
||||
/**
|
||||
* The "Remove Register Group" action.
|
||||
*/
|
||||
public class RemoveRegisterGroupActionDelegate extends ActionDelegate implements IObjectActionDelegate {
|
||||
|
||||
private IRegisterGroup[] fRegisterGroups;
|
||||
|
||||
/**
|
||||
* Constructor for RemoveRegisterGroupActionDelegate.
|
||||
*/
|
||||
public RemoveRegisterGroupActionDelegate() {
|
||||
super();
|
||||
setRegisterGroups( new IRegisterGroup[0] );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
|
||||
*/
|
||||
@Override
|
||||
public void setActivePart( IAction action, IWorkbenchPart targetPart ) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
|
||||
*/
|
||||
@Override
|
||||
public void selectionChanged( IAction action, ISelection selection ) {
|
||||
ArrayList list = new ArrayList();
|
||||
if ( selection instanceof IStructuredSelection ) {
|
||||
IStructuredSelection ss = (IStructuredSelection)selection;
|
||||
Iterator it = ss.iterator();
|
||||
while( it.hasNext() ) {
|
||||
Object o = it.next();
|
||||
if ( o instanceof IRegisterGroup ) {
|
||||
list.add( o );
|
||||
}
|
||||
}
|
||||
}
|
||||
setRegisterGroups( (IRegisterGroup[])list.toArray( new IRegisterGroup[list.size()] ) );
|
||||
}
|
||||
|
||||
protected IRegisterGroup[] getRegisterGroups() {
|
||||
return fRegisterGroups;
|
||||
}
|
||||
|
||||
protected void setRegisterGroups( IRegisterGroup[] registerGroups ) {
|
||||
fRegisterGroups = registerGroups;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction)
|
||||
*/
|
||||
@Override
|
||||
public void run( IAction action ) {
|
||||
IRegisterGroup[] groups = getRegisterGroups();
|
||||
if ( groups.length > 0 ) {
|
||||
IDebugTarget target = groups[0].getDebugTarget();
|
||||
if ( target instanceof ICDebugTarget ) {
|
||||
((ICDebugTarget)target).removeRegisterGroups( groups );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2005 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.debug.core.DebugEvent;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.IDebugElement;
|
||||
import org.eclipse.debug.ui.DebugUITools;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
|
||||
|
||||
public class RestoreDefaultRegisterGroupsActionDelegate extends AbstractViewActionDelegate {
|
||||
|
||||
@Override
|
||||
protected String getErrorDialogTitle() {
|
||||
return ActionMessages.getString( "RestoreDefaultRegisterGroupsActionDelegate.0" ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getErrorDialogMessage() {
|
||||
return ActionMessages.getString( "RestoreDefaultRegisterGroupsActionDelegate.1" ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doAction() throws DebugException {
|
||||
getDebugTarget().restoreDefaultRegisterGroups();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void update() {
|
||||
IAction action = getAction();
|
||||
if ( action != null ) {
|
||||
ICDebugTarget target = getDebugTarget();
|
||||
action.setEnabled( ( target != null ) ? target.isSuspended() : false );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doHandleDebugEvent( DebugEvent event ) {
|
||||
}
|
||||
|
||||
private ICDebugTarget getDebugTarget() {
|
||||
Object element = getSelection().getFirstElement();
|
||||
if ( element instanceof IDebugElement ) {
|
||||
return (ICDebugTarget)((IDebugElement)element).getDebugTarget().getAdapter( ICDebugTarget.class );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractViewActionDelegate#init(org.eclipse.jface.action.IAction)
|
||||
*/
|
||||
@Override
|
||||
public void init( IAction action ) {
|
||||
super.init( action );
|
||||
Object element = DebugUITools.getDebugContext();
|
||||
setSelection( (element != null) ? new StructuredSelection( element ) : new StructuredSelection() );
|
||||
update();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,169 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2014 QNX Software Systems and others.
|
||||
* 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:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Support Register Groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.model.IPersistableRegisterGroup;
|
||||
import org.eclipse.cdt.debug.core.model.IRegisterDescriptor;
|
||||
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.RegisterGroupDialog;
|
||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||
import org.eclipse.core.commands.AbstractHandler;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.IDebugElement;
|
||||
import org.eclipse.debug.core.model.IDebugTarget;
|
||||
import org.eclipse.debug.core.model.IRegisterGroup;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
|
||||
public abstract class AbstractRegisterGroupCommandHandler extends AbstractHandler {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#addRegisterGroup(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public void addRegisterGroup(IStructuredSelection selection) {
|
||||
ICDebugTarget t = getDebugTarget(selection);
|
||||
if (t != null) {
|
||||
// Using Debug model
|
||||
try {
|
||||
IRegisterDescriptor[] registers = t.getRegisterDescriptors();
|
||||
RegisterGroupDialog dialog = new RegisterGroupDialog(Display.getCurrent().getActiveShell(), registers);
|
||||
if (dialog.open() == Window.OK) {
|
||||
t.addRegisterGroup(dialog.getName(), dialog.getDescriptors());
|
||||
}
|
||||
} catch (DebugException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#canAddRegisterGroup(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public boolean canAddRegisterGroup(IStructuredSelection selection) {
|
||||
ICDebugTarget target = getDebugTarget(selection);
|
||||
return (target != null) ? target.isSuspended() : false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#editRegisterGroup(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public void editRegisterGroup(IStructuredSelection selection) {
|
||||
IPersistableRegisterGroup group = getRegisterGroup(selection);
|
||||
if (group == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
IRegisterDescriptor[] all;
|
||||
try {
|
||||
all = ((CDebugTarget) group.getDebugTarget()).getRegisterDescriptors();
|
||||
RegisterGroupDialog dialog = new RegisterGroupDialog(Display.getCurrent().getActiveShell(),
|
||||
group.getName(), all, group.getRegisterDescriptors());
|
||||
if (dialog.open() == Window.OK) {
|
||||
IDebugTarget target = group.getDebugTarget();
|
||||
if (target instanceof ICDebugTarget) {
|
||||
((ICDebugTarget) target).modifyRegisterGroup(group, dialog.getDescriptors());
|
||||
}
|
||||
}
|
||||
} catch (DebugException e) {
|
||||
CDebugUIPlugin.errorDialog(ActionMessages.getString("EditRegisterGroupActionDelegate.0"), e.getStatus()); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#canEditRegisterGroup(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public boolean canEditRegisterGroup(IStructuredSelection selection) {
|
||||
IPersistableRegisterGroup group = getRegisterGroup(selection);
|
||||
return (group != null);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#removeRegisterGroups(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public void removeRegisterGroups(IStructuredSelection selection) {
|
||||
IRegisterGroup[] groups = getRegisterGroups(selection);
|
||||
if (groups.length > 0) {
|
||||
IDebugTarget target = groups[0].getDebugTarget();
|
||||
if (target instanceof ICDebugTarget) {
|
||||
((ICDebugTarget) target).removeRegisterGroups(groups);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#canRemoveRegisterGroups(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public boolean canRemoveRegisterGroups(IStructuredSelection selection) {
|
||||
IRegisterGroup[] groups = getRegisterGroups(selection);
|
||||
if (groups.length > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#restoreDefaultGroups(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public void restoreDefaultGroups(IStructuredSelection selection) {
|
||||
getDebugTarget(selection).restoreDefaultRegisterGroups();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.internal.ui.actions.IRegisterGroupActionsTarget#canRestoreDefaultGroups(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.IStructuredSelection)
|
||||
*/
|
||||
public boolean canRestoreDefaultGroups(IStructuredSelection selection) {
|
||||
ICDebugTarget target = getDebugTarget(selection);
|
||||
return (target != null) ? target.isSuspended() : false;
|
||||
}
|
||||
|
||||
private ICDebugTarget getDebugTarget(IStructuredSelection selection) {
|
||||
|
||||
Object element = selection.getFirstElement();
|
||||
|
||||
if (element instanceof IDebugElement) {
|
||||
return (ICDebugTarget) ((IDebugElement) element).getDebugTarget().getAdapter(ICDebugTarget.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private IPersistableRegisterGroup getRegisterGroup(IStructuredSelection ss) {
|
||||
IPersistableRegisterGroup selectedGroup = null;
|
||||
if (!ss.isEmpty()) {
|
||||
Object s = ss.getFirstElement();
|
||||
if (s instanceof IPersistableRegisterGroup) {
|
||||
selectedGroup = (IPersistableRegisterGroup) s;
|
||||
}
|
||||
}
|
||||
|
||||
return selectedGroup;
|
||||
}
|
||||
|
||||
private IRegisterGroup[] getRegisterGroups(IStructuredSelection ss) {
|
||||
ArrayList<IRegisterGroup> list = new ArrayList<IRegisterGroup>();
|
||||
for (Iterator<?> iterator = ss.iterator(); iterator.hasNext();) {
|
||||
Object selection = iterator.next();
|
||||
if (selection instanceof IRegisterGroup) {
|
||||
list.add((IRegisterGroup) selection);
|
||||
}
|
||||
}
|
||||
|
||||
return list.toArray(new IRegisterGroup[list.size()]);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command handler to trigger an AddRegisterGroup operation
|
||||
*/
|
||||
public class AddRegisterGroupCommandHandler extends AbstractRegisterGroupCommandHandler {
|
||||
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
if (s instanceof IStructuredSelection) {
|
||||
state = canAddRegisterGroup((IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
addRegisterGroup((IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command handler to trigger an AddRegisterGroup operation
|
||||
*/
|
||||
public class EditRegisterGroupCommandHandler extends AbstractRegisterGroupCommandHandler {
|
||||
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
if (s instanceof IStructuredSelection) {
|
||||
state = canEditRegisterGroup((IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
editRegisterGroup((IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command handler to trigger a RemoveRegisterGroups operation
|
||||
*/
|
||||
public class RemoveRegisterGroupsCommandHandler extends AbstractRegisterGroupCommandHandler {
|
||||
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
if (s instanceof IStructuredSelection) {
|
||||
state = canRemoveRegisterGroups((IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
removeRegisterGroups((IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.commands;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command handler to trigger an AddRegisterGroup operation
|
||||
*/
|
||||
public class RestoreRegisterGroupsCommandHandler extends AbstractRegisterGroupCommandHandler {
|
||||
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
if (s instanceof IStructuredSelection) {
|
||||
state = canRestoreDefaultGroups((IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
restoreDefaultGroups((IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2012 Ericsson and others.
|
||||
* Copyright (c) 2012, 2014 Ericsson and others.
|
||||
* 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
|
||||
|
@ -9,6 +9,7 @@
|
|||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
* Grzegorz Kuligowski - Cannot cast to type that contain commas (bug 393474)
|
||||
* Marc Khouzam (Ericsson) - Support for glob-expressions for local variables (bug 394408)
|
||||
* Alvaro Sanchez-Leon (Ericsson AB) - Allow user to edit register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.gdb.service;
|
||||
|
||||
|
@ -37,9 +38,9 @@ import org.eclipse.cdt.dsf.debug.service.IExpressions;
|
|||
import org.eclipse.cdt.dsf.debug.service.IExpressions2;
|
||||
import org.eclipse.cdt.dsf.debug.service.IExpressions3;
|
||||
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters2;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IStack;
|
||||
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IStack.IVariableDMContext;
|
||||
|
@ -781,17 +782,16 @@ public class GDBPatternMatchingExpressions extends AbstractDsfService implements
|
|||
* @param rm RequestMonitor that will contain the unsorted matches.
|
||||
*/
|
||||
protected void matchRegisters(final IExpressionGroupDMContext globDmc, final DataRequestMonitor<List<IExpressionDMContext>> rm) {
|
||||
final IRegisters registerService = getServicesTracker().getService(IRegisters.class);
|
||||
final IRegisters2 registerService = getServicesTracker().getService(IRegisters2.class);
|
||||
if (registerService == null) {
|
||||
rm.done(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INVALID_HANDLE, "Register service unavailable", null)); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
registerService.getRegisterGroups(globDmc, new ImmediateDataRequestMonitor<IRegisterGroupDMContext[]>(rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
final IContainerDMContext contDmc = DMContexts.getAncestorOfType(globDmc, IContainerDMContext.class);
|
||||
|
||||
registerService.getRegisters(
|
||||
new CompositeDMContext(new IDMContext[] { getData()[0], globDmc } ),
|
||||
new CompositeDMContext(new IDMContext[] { contDmc, globDmc } ),
|
||||
new ImmediateDataRequestMonitor<IRegisterDMContext[]>(rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
|
@ -815,8 +815,6 @@ public class GDBPatternMatchingExpressions extends AbstractDsfService implements
|
|||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all local variables that match the specified glob-pattern.
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,6 +17,7 @@
|
|||
* William Riley (Renesas) - Support for GDB 7.3 disassembly service (Bug 357270)
|
||||
* Marc Khouzam (Ericsson) - Support for GDB 7.4 processes service (Bug 389945)
|
||||
* Marc Khouzam (Ericsson) - Support dynamic printf in bp service 7.5 (Bug 400628)
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Allow user to edit the register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.gdb.service;
|
||||
|
||||
|
@ -48,7 +49,6 @@ import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
|||
import org.eclipse.cdt.dsf.mi.service.MIDisassembly;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIExpressions;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIModules;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIRegisters;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIStack;
|
||||
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||
|
@ -231,7 +231,7 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
|||
|
||||
@Override
|
||||
protected IRegisters createRegistersService(DsfSession session) {
|
||||
return new MIRegisters(session);
|
||||
return new GDBRegisters(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2012, 2013 Ericsson and others.
|
||||
* Copyright (c) 2012, 2014 Ericsson and others.
|
||||
* 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Bug 235747
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.gdb.service;
|
||||
|
||||
|
@ -25,6 +26,9 @@ class Messages extends NLS {
|
|||
public static String UniqueMatch;
|
||||
public static String UniqueMatches;
|
||||
public static String ErrorNotSupported;
|
||||
public static String RegisterGroup_name_reserved;
|
||||
public static String RegisterGroup_name_used;
|
||||
public static String RegisterGroup_invalid_number_of_registers;
|
||||
|
||||
static {
|
||||
// initialize resource bundle
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
###############################################################################
|
||||
# Copyright (c) 2012 Ericsson and others.
|
||||
# Copyright (c) 2012, 2014 Ericsson and others.
|
||||
# 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
#
|
||||
# Contributors:
|
||||
# Marc Khouzam (Ericsson) - initial API and implementation
|
||||
# Alvaro Sanchez-Leon (Ericsson) - Support Register Groups (Bug 235747)
|
||||
###############################################################################
|
||||
|
||||
Tracing_not_supported_error=Tracing not supported
|
||||
|
@ -17,3 +18,6 @@ NoMatches=No matches
|
|||
UniqueMatch={0} unique match
|
||||
UniqueMatches={0} unique matches
|
||||
ErrorNotSupported=Operation not supported with this GDB version
|
||||
RegisterGroup_name_reserved=The group name "{0}" is reserved
|
||||
RegisterGroup_name_used=The group name "{0}" is already in use
|
||||
RegisterGroup_invalid_number_of_registers=A minimum of one register is needed for a Register Group
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2010 Wind River Systems and others.
|
||||
* Copyright (c) 2006, 2014 Wind River Systems and others.
|
||||
* 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
|
||||
|
@ -11,6 +11,7 @@
|
|||
* Roland Grunberg (RedHat) - Refresh all registers once one is changed (Bug 400840)
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Make Registers View specific to a frame (Bug 323552)
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Register view does not refresh register names per process (Bug 418176)
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Allow user to edit the register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.mi.service;
|
||||
|
||||
|
@ -66,7 +67,18 @@ import org.osgi.framework.BundleContext;
|
|||
*/
|
||||
|
||||
public class MIRegisters extends AbstractDsfService implements IRegisters, ICachingService {
|
||||
private static final String BLANK_STRING = ""; //$NON-NLS-1$
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
protected static final String BLANK_STRING = ""; //$NON-NLS-1$
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
protected static final String ROOT_GROUP_NAME = Messages.MIRegisters_General_Registers;
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
protected static final String ROOT_GROUP_DESCRIPTION = Messages.MIRegisters_General_Registers_description;
|
||||
/*
|
||||
* Support class used to construct Register Group DMCs.
|
||||
*/
|
||||
|
@ -83,6 +95,12 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
|
||||
public int getGroupNo() { return fGroupNo; }
|
||||
public String getName() { return fGroupName; }
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
public void setName(String groupName) {
|
||||
fGroupName = groupName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
@ -93,7 +111,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
@Override
|
||||
public int hashCode() { return super.baseHashCode() ^ fGroupNo; }
|
||||
@Override
|
||||
public String toString() { return baseToString() + ".group[" + fGroupNo + "]"; } //$NON-NLS-1$ //$NON-NLS-2$
|
||||
public String toString() { return baseToString() + ".group[" + fGroupNo + "," + fGroupName + "]"; } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -125,17 +143,17 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
}
|
||||
|
||||
/**
|
||||
* This Register context is associated to two parent contexts. A stack frame context (IFrameDMContext), and a register group
|
||||
* context (MIRegisterGroupDMC). When the scenario requires to build a register contexts from the selection of a thread, then the top
|
||||
* frame shall be resolved and be provided in this constructor.
|
||||
* This Register context is associated to two parent contexts. A stack frame context (IFrameDMContext), and a
|
||||
* register group context (MIRegisterGroupDMC). When the scenario requires to build a register contexts from the
|
||||
* selection of a thread, then the top frame shall be resolved and be provided in this constructor.
|
||||
*
|
||||
* The frame context is necessary to resolve the register's data e.g. value
|
||||
*
|
||||
* @since 4.3
|
||||
*/
|
||||
public MIRegisterDMC(MIRegisters service, MIRegisterGroupDMC group, IFrameDMContext frameDmc, int regNo, String regName) {
|
||||
super(service.getSession().getId(),
|
||||
new IDMContext[] { frameDmc, group });
|
||||
public MIRegisterDMC(MIRegisters service, MIRegisterGroupDMC group, IFrameDMContext frameDmc, int regNo,
|
||||
String regName) {
|
||||
super(service.getSession().getId(), new IDMContext[] { frameDmc, group });
|
||||
fRegNo = regNo;
|
||||
fRegName = regName;
|
||||
}
|
||||
|
@ -162,7 +180,10 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
|
||||
private final IRegisterDMContext fRegisterDmc;
|
||||
|
||||
RegisterChangedDMEvent(IRegisterDMContext registerDMC) {
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
public RegisterChangedDMEvent(IRegisterDMContext registerDMC) {
|
||||
fRegisterDmc = registerDMC;
|
||||
}
|
||||
|
||||
|
@ -172,6 +193,24 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates a change in the list of Register groups e.g. after addition and removal
|
||||
* @since 4.6
|
||||
*/
|
||||
public static class GroupsChangedDMEvent implements IRegisters.IGroupsChangedDMEvent {
|
||||
|
||||
private final IContainerDMContext fGroupContainerDmc;
|
||||
|
||||
public GroupsChangedDMEvent(IContainerDMContext containerDMC) {
|
||||
fGroupContainerDmc = containerDMC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IContainerDMContext getDMContext() {
|
||||
return fGroupContainerDmc;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Internal control variables.
|
||||
*/
|
||||
|
@ -180,6 +219,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
|
||||
//One Group per container process
|
||||
private final Map<IContainerDMContext, MIRegisterGroupDMC> fContainerToGroupMap = new HashMap<IContainerDMContext, MIRegisterGroupDMC>();
|
||||
|
||||
private CommandCache fRegisterNameCache; // Cache for holding the Register Names in the single Group
|
||||
private CommandCache fRegisterValueCache; // Cache for holding the Register Values
|
||||
|
||||
|
@ -267,13 +307,13 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
public void getRegisterGroupData(IRegisterGroupDMContext regGroupDmc, DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||
/**
|
||||
* For the GDB GDBMI implementation there is only on group. The GPR and FPU registers are grouped into
|
||||
* one set. We are going to hard wire this set as the "General Registers".
|
||||
* one set. We are going to hard wire this set as the value of ROOT_GROUP_NAME.
|
||||
*/
|
||||
class RegisterGroupData implements IRegisterGroupDMData {
|
||||
@Override
|
||||
public String getName() { return "General Registers"; } //$NON-NLS-1$
|
||||
public String getName() { return ROOT_GROUP_NAME; }
|
||||
@Override
|
||||
public String getDescription() { return "General Purpose and FPU Register Group"; } //$NON-NLS-1$
|
||||
public String getDescription() { return ROOT_GROUP_DESCRIPTION; }
|
||||
}
|
||||
|
||||
rm.setData( new RegisterGroupData() ) ;
|
||||
|
@ -387,7 +427,10 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
});
|
||||
}
|
||||
|
||||
static class RegisterData implements IRegisterDMData {
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
protected static class RegisterData implements IRegisterDMData {
|
||||
|
||||
final private String fRegName;
|
||||
final private String fRegDesc;
|
||||
|
@ -487,14 +530,18 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
fRegisterValueCache.reset();
|
||||
}
|
||||
|
||||
private void generateRegisterChangedEvent(final IRegisterDMContext dmc ) {
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
protected void generateRegisterChangedEvent(IRegisterDMContext dmc ) {
|
||||
getSession().dispatchEvent(new RegisterChangedDMEvent(dmc), getProperties());
|
||||
|
||||
// Temporary fix for Bug 400840
|
||||
// Fix for Bug 400840
|
||||
// When one register is modified, it could affect other registers.
|
||||
// To properly reflect that, we send a change for all registers.
|
||||
// We cheat since we know there is currently only one group. Once we handle
|
||||
// more groups, this may not work properly.
|
||||
// We cheat by pretending the group has changed, since we know there is
|
||||
// only one group.
|
||||
// This method can be extended by group managers to propagate the event as needed
|
||||
final IRegisterGroupDMContext groupDmc = DMContexts.getAncestorOfType(dmc, IRegisterGroupDMContext.class);
|
||||
if (groupDmc != null) {
|
||||
IRegistersChangedDMEvent event = new IRegistersChangedDMEvent() {
|
||||
|
@ -505,7 +552,6 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
};
|
||||
getSession().dispatchEvent(event, getProperties());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -524,15 +570,16 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
}
|
||||
|
||||
//Bug 418176
|
||||
//Only one group per Process (container) is supported for the time being
|
||||
//Only one group per Process (container) is supported in the implementation of this class
|
||||
MIRegisterGroupDMC registerGroup = fContainerToGroupMap.get(contDmc);
|
||||
|
||||
if (registerGroup == null) {
|
||||
registerGroup = new MIRegisterGroupDMC( this , contDmc, 0 , "General Registers" ) ; //$NON-NLS-1$
|
||||
registerGroup = new MIRegisterGroupDMC(this, contDmc, 0, ROOT_GROUP_NAME);
|
||||
fContainerToGroupMap.put(contDmc, registerGroup);
|
||||
}
|
||||
|
||||
MIRegisterGroupDMC[] groupDMCs = new MIRegisterGroupDMC[] { registerGroup };
|
||||
|
||||
rm.setData(groupDMCs) ;
|
||||
rm.done() ;
|
||||
}
|
||||
|
@ -642,28 +689,21 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
* @see org.eclipse.cdt.dsf.debug.service.IRegisters#writeRegister(org.eclipse.cdt.dsf.debug.service.IRegisters.IRegisterDMContext, java.lang.String, java.lang.String, org.eclipse.cdt.dsf.concurrent.RequestMonitor)
|
||||
*/
|
||||
@Override
|
||||
public void writeRegister(IRegisterDMContext regCtx, final String regValue, final String formatId, final RequestMonitor rm) {
|
||||
MIRegisterGroupDMC grpDmc = DMContexts.getAncestorOfType(regCtx, MIRegisterGroupDMC.class);
|
||||
if ( grpDmc == null ) {
|
||||
rm.setStatus( new Status( IStatus.ERROR , GdbPlugin.PLUGIN_ID , INVALID_HANDLE , "RegisterGroup context not found" , null ) ) ; //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
public void writeRegister(IRegisterDMContext regCtx, final String regValue, final String formatId,
|
||||
final RequestMonitor rm) {
|
||||
|
||||
assert(regCtx instanceof MIRegisterDMC);
|
||||
final MIRegisterDMC regDmc = (MIRegisterDMC) regCtx;
|
||||
|
||||
final MIRegisterDMC regDmc = (MIRegisterDMC)regCtx;
|
||||
// There is only one group and its number must be 0.
|
||||
if ( grpDmc.getGroupNo() == 0 ) {
|
||||
final IExpressions exprService = getServicesTracker().getService(IExpressions.class);
|
||||
String regName = regDmc.getName();
|
||||
final IExpressionDMContext exprCtxt = exprService.createExpression(regCtx, "$" + regName); //$NON-NLS-1$
|
||||
|
||||
final FormattedValueDMContext valueDmc = exprService.getFormattedValueContext(exprCtxt, formatId);
|
||||
exprService.getFormattedExpressionValue(
|
||||
valueDmc,
|
||||
new DataRequestMonitor<FormattedValueDMData>(getExecutor(), rm) {
|
||||
exprService.getFormattedExpressionValue(valueDmc, new DataRequestMonitor<FormattedValueDMData>(getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
if(! regValue.equals(getData().getFormattedValue()) || ! valueDmc.getFormatID().equals(formatId)){
|
||||
if (!regValue.equals(getData().getFormattedValue()) || !valueDmc.getFormatID().equals(formatId)) {
|
||||
exprService.writeExpression(exprCtxt, regValue, formatId, new DataRequestMonitor<MIInfo>(getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
|
@ -671,18 +711,12 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
rm.done();
|
||||
}
|
||||
});
|
||||
}//if
|
||||
}// if
|
||||
else {
|
||||
rm.done();
|
||||
}
|
||||
}//handleSuccess
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, NOT_SUPPORTED, "Invalid group = " + grpDmc, null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
}// handleSuccess
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2010 Ericsson and others.
|
||||
* Copyright (c) 2010, 2014 Ericsson and others.
|
||||
* 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
|
||||
|
@ -8,6 +8,7 @@
|
|||
* Contributors:
|
||||
* Ericsson - initial API and implementation
|
||||
* Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121)
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Support Register Groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.mi.service;
|
||||
|
||||
|
@ -23,6 +24,8 @@ class Messages extends NLS {
|
|||
public static String Breakpoint_installation_failed;
|
||||
public static String MIExpressions_NotAvailableBecauseChildOfDynamicVarobj;
|
||||
public static String MIExpressions_ReturnValueAlias;
|
||||
public static String MIRegisters_General_Registers;
|
||||
public static String MIRegisters_General_Registers_description;
|
||||
|
||||
static {
|
||||
// initialize resource bundle
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
###############################################################################
|
||||
# Copyright (c) 2010 Ericsson and others.
|
||||
# Copyright (c) 2010, 2014 Ericsson and others.
|
||||
# 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
|
||||
|
@ -8,6 +8,7 @@
|
|||
# Contributors:
|
||||
# Ericsson - initial API and implementation
|
||||
# Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121)
|
||||
# Alvaro Sanchez-Leon (Ericsson) - Support Register Groups (Bug 235747)
|
||||
###############################################################################
|
||||
|
||||
Breakpoint_attribute_detailed_problem=Breakpoint installation failed: {0}
|
||||
|
@ -16,3 +17,7 @@ Breakpoint_installation_failed=installation failed
|
|||
|
||||
MIExpressions_NotAvailableBecauseChildOfDynamicVarobj=N/A (child of pretty-printed object)
|
||||
MIExpressions_ReturnValueAlias=%s returned
|
||||
|
||||
MIRegisters_General_Registers=General Registers
|
||||
|
||||
MIRegisters_General_Registers_description=General Purpose and FPU Register Group
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2013 Ericsson and others.
|
||||
* Copyright (c) 2007, 2014 Ericsson and others.
|
||||
* 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
|
||||
|
@ -9,9 +9,11 @@
|
|||
* Ericsson - Initial Implementation
|
||||
* Marc Khouzam (Ericsson) - Add support to receive multiple events
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Add filter out and wait for a given type of event
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Allow user to edit the register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.tests.dsf.gdb.framework;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
@ -96,29 +98,34 @@ public class ServiceEventWaitor<V> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Will wait and discard events that are not either of the specified type or a subtype
|
||||
* It will stop and return the first one found or exit after the specified timeout
|
||||
*
|
||||
* @param type - The parent type of an acceptable event
|
||||
* @param timeout the maximum time to wait in milliseconds to wait for a specified event
|
||||
* Wait for events of V type for the specified amount of time
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public synchronized <T extends V> T waitForEvent(Class<T> type, int timeout) throws Exception {
|
||||
public synchronized List<V> waitForEvents(int period) {
|
||||
long startMs = System.currentTimeMillis();
|
||||
//The Specified Event received or Timeout exception will exit the loop
|
||||
List<V> events = new ArrayList<V>();
|
||||
|
||||
//Timeout exception will exit the loop and return the resulting list of events
|
||||
while (true) {
|
||||
int timeRemaining = (int) (timeout - (System.currentTimeMillis() - startMs));
|
||||
int timeRemaining = (int) (period - (System.currentTimeMillis() - startMs));
|
||||
if (timeRemaining > 0) {
|
||||
V sevent = waitForEvent(timeRemaining);
|
||||
if (type.isAssignableFrom(sevent.getClass())) {
|
||||
return (T) sevent;
|
||||
V sevent;
|
||||
try {
|
||||
sevent = waitForEvent(timeRemaining);
|
||||
if (sevent != null) {
|
||||
events.add(sevent);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
throw new Exception("Timed out waiting for ServiceEvent: " + type.getName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return events;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Block until 'timeout' or the expected event occurs. The expected event is
|
||||
* specified at construction time.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2012 Ericsson and others.
|
||||
* Copyright (c) 2012, 2014 Ericsson and others.
|
||||
* 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
|
||||
|
@ -8,6 +8,7 @@
|
|||
* Contributors:
|
||||
* Marc Khouzam (Ericsson) - Initial Implementation
|
||||
* Marc Khouzam (Ericsson) - Tests for Pattern Matching for variables (Bug 394408)
|
||||
* Alvaro Sanchez-Leon (Ericsson AB) - Allow user to edit register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.tests.dsf.gdb.tests;
|
||||
|
||||
|
@ -24,9 +25,7 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
|||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
|
||||
import org.eclipse.cdt.dsf.concurrent.Query;
|
||||
import org.eclipse.cdt.dsf.datamodel.CompositeDMContext;
|
||||
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IExpressions;
|
||||
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMAddress;
|
||||
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
|
||||
|
@ -36,9 +35,8 @@ import org.eclipse.cdt.dsf.debug.service.IExpressions3.IExpressionDMDataExtensio
|
|||
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
|
||||
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRegisters2;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
||||
import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType;
|
||||
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
|
||||
|
@ -67,7 +65,7 @@ public class GDBPatternMatchingExpressionsTest extends BaseTestCase {
|
|||
private DsfServicesTracker fServicesTracker;
|
||||
|
||||
protected IMIExpressions fExpService;
|
||||
protected IRegisters fRegService;
|
||||
protected IRegisters2 fRegService;
|
||||
|
||||
@Override
|
||||
protected void setLaunchAttributes() {
|
||||
|
@ -88,7 +86,7 @@ public class GDBPatternMatchingExpressionsTest extends BaseTestCase {
|
|||
|
||||
fExpService = fServicesTracker.getService(IMIExpressions.class);
|
||||
|
||||
fRegService = fServicesTracker.getService(IRegisters.class);
|
||||
fRegService = fServicesTracker.getService(IRegisters2.class);
|
||||
}
|
||||
};
|
||||
fSession.getExecutor().submit(runnable).get();
|
||||
|
@ -173,11 +171,7 @@ public class GDBPatternMatchingExpressionsTest extends BaseTestCase {
|
|||
Query<String> query = new Query<String>() {
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<String> rm) {
|
||||
fRegService.getRegisterGroups(threadDmc, new ImmediateDataRequestMonitor<IRegisterGroupDMContext[]>(rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
fRegService.getRegisters(
|
||||
new CompositeDMContext(new IDMContext[] { getData()[0], threadDmc } ),
|
||||
fRegService.getRegisters(threadDmc,
|
||||
new ImmediateDataRequestMonitor<IRegisterDMContext[]>(rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
|
@ -199,8 +193,6 @@ public class GDBPatternMatchingExpressionsTest extends BaseTestCase {
|
|||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
fSession.getExecutor().execute(query);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -341,6 +341,70 @@
|
|||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.dsf.debug.internal.ui.actions.DsfAddRegisterGroupCommand"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.addRegisterGroup">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<or>
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterVMNode$RegisterVMC">
|
||||
</instanceof>
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterGroupVMNode$RegisterGroupVMC">
|
||||
</instanceof>
|
||||
</or>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.dsf.debug.internal.ui.actions.DsfEditRegisterGroupCommand"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.editRegisterGroup">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterGroupVMNode$RegisterGroupVMC">
|
||||
</instanceof>
|
||||
</iterate>
|
||||
<count value="1">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.dsf.debug.internal.ui.actions.DsfRemoveRegisterGroupsCommand"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.removeRegisterGroups">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterGroupVMNode$RegisterGroupVMC">
|
||||
</instanceof>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
<handler
|
||||
class="org.eclipse.cdt.dsf.debug.internal.ui.actions.DsfRestoreRegisterGroupsCommand"
|
||||
commandId="org.eclipse.cdt.debug.ui.command.restoreRegisterGroups">
|
||||
<activeWhen>
|
||||
<with variable="selection">
|
||||
<iterate operator="and">
|
||||
<or>
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterVMNode$RegisterVMC">
|
||||
</instanceof>
|
||||
<instanceof value="org.eclipse.cdt.dsf.debug.ui.viewmodel.register.RegisterGroupVMNode$RegisterGroupVMC">
|
||||
</instanceof>
|
||||
</or>
|
||||
</iterate>
|
||||
<count value="+">
|
||||
</count>
|
||||
</with>
|
||||
</activeWhen>
|
||||
</handler>
|
||||
</extension>
|
||||
<extension point="org.eclipse.core.expressions.definitions">
|
||||
<definition id="org.eclipse.cdt.dsf.debug.ui.testIsUpdateModesActionSetActive">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2013 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2009, 2014 Wind River Systems, Inc. and others.
|
||||
* 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
|
||||
|
@ -9,6 +9,7 @@
|
|||
* Wind River Systems - initial API and implementation
|
||||
* Patrick Chuong (Texas Instruments) - Bug 315446: Invalid event breakpoint type (group) name
|
||||
* Alvaro Sanchez-Leon (Ericsson AB) - Support for Step into selection (bug 244865)
|
||||
* Alvaro Sanchez-Leon (Ericsson AB) - Support Register Groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.debug.internal.ui;
|
||||
|
||||
|
@ -18,6 +19,14 @@ public class Messages extends NLS {
|
|||
public static String ToggleBreakpointsTargetFactory_description;
|
||||
public static String ToggleBreakpointsTargetFactory_name;
|
||||
public static String DsfUIStepIntoEditorSelection;
|
||||
public static String RegisterGroupInfo;
|
||||
public static String Information;
|
||||
public static String DefaultRegistersGroupName;
|
||||
public static String ProposeGroupNameRoot;
|
||||
public static String RegisterGroupConfirmRestoreTitle;
|
||||
public static String RegisterGroupConfirmRestoreMessage;
|
||||
public static String RegisterGroupRestore;
|
||||
public static String RegisterGroupRestoreCancel;
|
||||
|
||||
static {
|
||||
// initialize resource bundle
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
###############################################################################
|
||||
# Copyright (c) 2009, 2013 Wind River Systems and others.
|
||||
# Copyright (c) 2009, 2014 Wind River Systems and others.
|
||||
# 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
|
||||
|
@ -9,9 +9,19 @@
|
|||
# Wind River Systems - initial API and implementation
|
||||
# Ericsson - added Tracepoint support
|
||||
# Ericsson - added Step into selection support
|
||||
# Ericsson - Support Register Groups
|
||||
###############################################################################
|
||||
|
||||
ToggleBreakpointsTargetFactory_description=Standard C/C++ breakpoint type.
|
||||
ToggleBreakpointsTargetFactory_name=C/C++ Breakpoints
|
||||
|
||||
DsfUIStepIntoEditorSelection=Step Into
|
||||
Information=Information
|
||||
RegisterGroupInfo=Register Group
|
||||
DefaultRegistersGroupName=New Group
|
||||
ProposeGroupNameRoot=Group_
|
||||
RegisterGroupConfirmRestoreTitle=Register Groups - Confirm Restore
|
||||
RegisterGroupConfirmRestoreMessage=Are you sure you want to restore to the default register group(s) ?
|
||||
RegisterGroupRestore=OK
|
||||
RegisterGroupRestoreCancel=Cancel
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,48 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command performing adding a register group.
|
||||
* @since 2.4
|
||||
*/
|
||||
public class DsfAddRegisterGroupCommand extends AbstractDsfRegisterGroupActions {
|
||||
@Override
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
Object p = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME);
|
||||
if (s instanceof IStructuredSelection && p instanceof IWorkbenchPart) {
|
||||
state = canAddRegisterGroup((IWorkbenchPart)p, (IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
IWorkbenchPart part = HandlerUtil.getActivePart(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
addRegisterGroup(part, (IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command performing adding a register group.
|
||||
* @since 2.4
|
||||
*/
|
||||
public class DsfEditRegisterGroupCommand extends AbstractDsfRegisterGroupActions {
|
||||
@Override
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
Object p = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME);
|
||||
if (s instanceof IStructuredSelection && p instanceof IWorkbenchPart) {
|
||||
state = canEditRegisterGroup((IWorkbenchPart)p, (IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
IWorkbenchPart part = HandlerUtil.getActivePart(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
editRegisterGroup(part, (IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command performing adding a register group.
|
||||
* @since 2.4
|
||||
*/
|
||||
public class DsfRemoveRegisterGroupsCommand extends AbstractDsfRegisterGroupActions {
|
||||
@Override
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
Object p = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME);
|
||||
if (s instanceof IStructuredSelection && p instanceof IWorkbenchPart) {
|
||||
state = canRemoveRegisterGroups((IWorkbenchPart)p, (IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
IWorkbenchPart part = HandlerUtil.getActivePart(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
removeRegisterGroups(part, (IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Marc Khouzam (Ericsson) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.debug.internal.ui.actions;
|
||||
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.expressions.IEvaluationContext;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.ui.ISources;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.handlers.HandlerUtil;
|
||||
|
||||
/**
|
||||
* Command performing adding a register group.
|
||||
* @since 2.4
|
||||
*/
|
||||
public class DsfRestoreRegisterGroupsCommand extends AbstractDsfRegisterGroupActions {
|
||||
@Override
|
||||
public void setEnabled(Object evaluationContext) {
|
||||
boolean state = false;
|
||||
if (evaluationContext instanceof IEvaluationContext) {
|
||||
Object s = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
|
||||
Object p = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME);
|
||||
if (s instanceof IStructuredSelection && p instanceof IWorkbenchPart) {
|
||||
state = canRestoreDefaultGroups((IWorkbenchPart)p, (IStructuredSelection)s);
|
||||
}
|
||||
}
|
||||
setBaseEnabled(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object execute(ExecutionEvent event) {
|
||||
ISelection selection = HandlerUtil.getCurrentSelection(event);
|
||||
IWorkbenchPart part = HandlerUtil.getActivePart(event);
|
||||
if (selection instanceof IStructuredSelection) {
|
||||
restoreDefaultGroups(part, (IStructuredSelection)selection);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2010 Wind River Systems and others.
|
||||
* Copyright (c) 2006, 2014 Wind River Systems and others.
|
||||
* 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
|
||||
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* Wind River Systems - initial API and implementation
|
||||
* Alvaro Sanchez-Leon (Ericsson) - Allow user to edit the register groups (Bug 235747)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.dsf.internal.ui;
|
||||
|
||||
|
@ -22,6 +23,8 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.jface.resource.ImageDescriptor;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.IWorkbenchWindow;
|
||||
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
|
@ -169,4 +172,18 @@ public class DsfUIPlugin extends AbstractUIPlugin {
|
|||
return new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, code, message, exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the active workbench shell or <code>null</code> if none
|
||||
*
|
||||
* @return the active workbench shell or <code>null</code> if none
|
||||
*/
|
||||
public static Shell getActiveWorkbenchShell() {
|
||||
IWorkbenchWindow window = getDefault().getWorkbench().getActiveWorkbenchWindow();
|
||||
if (window != null) {
|
||||
return window.getShell();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 Ericsson and others.
|
||||
* 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:
|
||||
* Alvaro Sanchez-Leon (Ericsson) - First API (Bug 235747)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.dsf.debug.service;
|
||||
|
||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
||||
|
||||
/**
|
||||
* Service extension of IRegisters to manage user defined Register Groups
|
||||
* @since 2.6
|
||||
*/
|
||||
public interface IRegisters2 extends IRegisters {
|
||||
/**
|
||||
* Returns a boolean indicating if it is allowed to add a new register group with the given selected context
|
||||
*
|
||||
* @param rm - monitor encapsulating the response
|
||||
*/
|
||||
public void canAddRegisterGroup(IDMContext ctx, DataRequestMonitor<Boolean> rm);
|
||||
|
||||
/**
|
||||
* Add a Register group referencing the given registers
|
||||
*
|
||||
* @param ctx - A context containing a parent group context e.g. IContainerDMContext
|
||||
* @param name - register group name
|
||||
* @param registers - registers part of this new group
|
||||
* @param rm - request monitor
|
||||
*/
|
||||
public void addRegisterGroup(IDMContext ctx, String name, IRegisterDMContext[] registers, RequestMonitor rm);
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating if it is allowed to edit the given group
|
||||
*
|
||||
* @param rm - monitor encapsulating the response
|
||||
*/
|
||||
public void canEditRegisterGroup(IRegisterGroupDMContext group,
|
||||
DataRequestMonitor<Boolean> rm);
|
||||
|
||||
/**
|
||||
* Edit the given register group and update its name and associated registers
|
||||
*
|
||||
* @param group - group to be edited
|
||||
* @param groupName - new group name or null if name is not to be changed
|
||||
* @param registers - new list of registers for this group or null if the list of registers is not be changed
|
||||
* @param rm - request monitor
|
||||
*/
|
||||
public void editRegisterGroup(IRegisterGroupDMContext group, String groupName,
|
||||
IRegisterDMContext[] registers, RequestMonitor rm);
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating if it is allowed to remove the given registers groups
|
||||
* @param groups - list of register group contexts to be removed
|
||||
* @param rm
|
||||
*/
|
||||
public void canRemoveRegisterGroups(IRegisterGroupDMContext[] groups,
|
||||
DataRequestMonitor<Boolean> rm);
|
||||
|
||||
/**
|
||||
* Remove the given register groups
|
||||
*
|
||||
* @param groups - groups that shall be removed
|
||||
* @param rm - request monitor
|
||||
*/
|
||||
public void removeRegisterGroups(IRegisterGroupDMContext[] groups, RequestMonitor rm);
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating if it is allowed to restore to the default groups
|
||||
* @param ctx
|
||||
* @param rm
|
||||
*/
|
||||
public void canRestoreDefaultGroups(IDMContext ctx, DataRequestMonitor<Boolean> rm);
|
||||
|
||||
/**
|
||||
* Remove all the user defined register groups and restore the default ones to their
|
||||
* original state.
|
||||
*
|
||||
* @param rm - request monitor
|
||||
*/
|
||||
public void restoreDefaultGroups(IDMContext selectionContext, RequestMonitor rm);
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue