blob: 96cd7300b14d80b390b37635d3d8848b2c7de170 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 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:
* Ericsson - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.tracepointactions;
import org.eclipse.cdt.debug.core.breakpointactions.IBreakpointAction;
import org.eclipse.cdt.debug.ui.breakpointactions.IBreakpointActionPage;
import org.eclipse.cdt.dsf.gdb.internal.tracepointactions.ITracepointAction;
import org.eclipse.cdt.dsf.gdb.internal.tracepointactions.WhileSteppingAction;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* @since 2.1
*/
public class WhileSteppingActionPage extends PlatformObject implements IBreakpointActionPage {
private WhileSteppingAction fWhileSteppingAction;
private Text fStepCountText;
private TracepointActionsList actionsList;
private TracepointGlobalActionsList globalActionsList;
// When dealing with a "while-stepping" action, we deal with a "child" global
// list, and must keep track of the parent global list, to properly update it.
private TracepointGlobalActionsList parentGlobalActionsList;
/**
* Create the composite
*/
private Composite createWhileSteppingActionComposite(Composite parent, int style) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(2, false));
final Label stepCountLabel = new Label(composite, SWT.NONE);
stepCountLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
stepCountLabel.setText(MessagesForTracepointActions.TracepointActions_Step_Count);
fStepCountText = new Text(composite, SWT.BORDER);
fStepCountText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fStepCountText.setText(Integer.toString(fWhileSteppingAction.getStepCount()));
final Label actionsTriggeredWhenLabel = new Label(composite, SWT.NONE);
actionsTriggeredWhenLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
actionsTriggeredWhenLabel.setText(MessagesForTracepointActions.TracepointActions_WhileStepping_Sub_Actions);
actionsList = new TracepointActionsList(composite, SWT.NONE);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
gridData.horizontalSpan = 2;
actionsList.setLayoutData(gridData);
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
composite.setLayout(gridLayout);
final Label label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gridData.horizontalSpan = 2;
label.setLayoutData(gridData);
final Label allAvailableActionsLabel = new Label(composite, SWT.NONE);
gridData = new GridData();
gridData.horizontalSpan = 2;
allAvailableActionsLabel.setLayoutData(gridData);
allAvailableActionsLabel.setText(MessagesForTracepointActions.TracepointActions_Available_actions);
globalActionsList = new TracepointGlobalActionsList(composite, SWT.NONE, true, parentGlobalActionsList, true);
gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
globalActionsList.setLayoutData(gridData);
String actionNames = fWhileSteppingAction.getSubActionsNames();
actionsList.setNames(actionNames);
// connect attached actions list to global list
globalActionsList.setClientList(actionsList);
globalActionsList.getAttachButton().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
HandleAttachButton();
}
});
globalActionsList.getDeleteButton().addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
HandleDeleteButton();
}
});
return composite;
}
protected void HandleAttachButton() {
ITracepointAction[] selectedActions = globalActionsList.getSelectedActions();
for (ITracepointAction action : selectedActions) {
actionsList.addAction(action);
}
}
/**
* Clean up attached actions that were just deleted from the GlobalActionList
*
* @since 7.0
*/
protected void HandleDeleteButton() {
// attached actions are now handled by the GlobalActionsList
globalActionsList.HandleDeleteButton();
}
public WhileSteppingAction getWhileSteppingAction() {
return fWhileSteppingAction;
}
@Override
public void actionDialogCanceled() {
}
@Override
public void actionDialogOK() {
// Make sure we are dealing with an int
int count = 1;
try {
count = Integer.parseInt(fStepCountText.getText());
} catch (NumberFormatException e) {
}
fWhileSteppingAction.setStepCount(count);
fWhileSteppingAction.setSubActionsNames(actionsList.getActionNames());
fWhileSteppingAction.setSubActionsContent(actionsList.getActionNames());
}
@Override
public Composite createComposite(IBreakpointAction action, Composite composite, int style) {
fWhileSteppingAction = (WhileSteppingAction)action;
return createWhileSteppingActionComposite(composite, style);
}
void setParentGlobalList(TracepointGlobalActionsList list) {
parentGlobalActionsList = list;
}
}