/******************************************************************************* * Copyright (c) 2011 IBM Corporation * 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: * Daniel H Barboza <danielhb@br.ibm.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.valgrind.helgrind; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.linuxtools.internal.valgrind.helgrind.HelgrindPlugin; import org.eclipse.linuxtools.internal.valgrind.launch.LaunchConfigurationConstants; import org.eclipse.linuxtools.valgrind.launch.IValgrindToolPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.osgi.framework.Version; public class HelgrindToolPage extends AbstractLaunchConfigurationTab implements IValgrindToolPage { // HELGRIND controls private Button lockordersButton; private Combo historyCombo; private Spinner cacheSizeSpinner; private boolean isInitializing = false; private SelectionListener selectListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateLaunchConfigurationDialog(); } }; private ModifyListener modifyListener = e -> updateLaunchConfigurationDialog(); @Override public void createControl(Composite parent) { Composite top = new Composite(parent, SWT.NONE); GridLayout helgrindLayout = new GridLayout(2, true); top.setLayout(helgrindLayout); top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); lockordersButton = new Button(top, SWT.CHECK); lockordersButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); lockordersButton.setText(Messages.getString("HelgrindToolPage.track_lockorders")); //$NON-NLS-1$ lockordersButton.addSelectionListener(selectListener); Composite historyTop = new Composite(top, SWT.NONE); historyTop.setLayout(new GridLayout(2, false)); historyTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label historyLabel = new Label(historyTop, SWT.NONE); historyLabel.setText(Messages.getString("HelgrindToolPage.history_level")); //$NON-NLS-1$ historyCombo = new Combo(historyTop, SWT.READ_ONLY); String[] historyOpts = { HelgrindLaunchConstants.HISTORY_FULL, HelgrindLaunchConstants.HISTORY_APPROX, HelgrindLaunchConstants.HISTORY_NONE }; historyCombo.setItems(historyOpts); historyCombo.addSelectionListener(selectListener); Composite conflictCacheSizeTop = new Composite(top, SWT.NONE); conflictCacheSizeTop.setLayout(new GridLayout(2, false)); conflictCacheSizeTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label cacheSizeLabel = new Label(conflictCacheSizeTop, SWT.NONE); cacheSizeLabel.setText(Messages.getString("HelgrindToolPage.cache_size")); //$NON-NLS-1$ cacheSizeSpinner = new Spinner(conflictCacheSizeTop, SWT.BORDER); cacheSizeSpinner.setMaximum(Integer.MAX_VALUE); cacheSizeSpinner.addModifyListener(modifyListener); } @Override public String getName() { return Messages.getString("HelgrindToolPage.Helgrind_Options"); //$NON-NLS-1$ } @Override public void initializeFrom(ILaunchConfiguration configuration) { isInitializing = true; try { lockordersButton.setSelection(configuration.getAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_LOCKORDERS, HelgrindLaunchConstants.DEFAULT_HELGRIND_LOCKORDERS)); historyCombo.setText(configuration.getAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_HISTORYLEVEL, HelgrindLaunchConstants.DEFAULT_HELGRIND_HISTORYLEVEL)); cacheSizeSpinner.setSelection(configuration.getAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_CACHESIZE, HelgrindLaunchConstants.DEFAULT_HELGRIND_CACHESIZE)); } catch (CoreException e) { } isInitializing = false; } @Override public void performApply(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_LOCKORDERS, lockordersButton.getSelection()); configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_HISTORYLEVEL, historyCombo.getText()); configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_CACHESIZE, cacheSizeSpinner.getSelection()); } @Override public boolean isValid(ILaunchConfiguration launchConfig) { setErrorMessage(null); return true; } @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(LaunchConfigurationConstants.ATTR_TOOL, HelgrindPlugin.TOOL_ID); configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_LOCKORDERS, HelgrindLaunchConstants.DEFAULT_HELGRIND_LOCKORDERS); configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_HISTORYLEVEL, HelgrindLaunchConstants.DEFAULT_HELGRIND_HISTORYLEVEL); configuration.setAttribute(HelgrindLaunchConstants.ATTR_HELGRIND_CACHESIZE, HelgrindLaunchConstants.DEFAULT_HELGRIND_CACHESIZE); } @Override public void setValgrindVersion(Version ver) { // no constraints } @Override protected void updateLaunchConfigurationDialog() { if (!isInitializing) { super.updateLaunchConfigurationDialog(); } } public Button getLockordersButton() { return lockordersButton; } public Spinner getCacheSizeSpinner() { return cacheSizeSpinner; } public Combo getHistoryCombo() { return historyCombo; } }