blob: 2a1835d1d0c0488caf65ad39ea58e2fbc841a5dd [file] [log] [blame]
/****************************************************************************
* Tuning and Analysis Utilities
* http://www.cs.uoregon.edu/research/paracomp/tau
****************************************************************************
* Copyright (c) 1997-2006
* Department of Computer and Information Science, University of Oregon
* Advanced Computing Laboratory, Los Alamos National Laboratory
* Research Center Juelich, ZAM Germany
*
* 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:
* Wyatt Spear - initial API and implementation
****************************************************************************/
package org.eclipse.ptp.etfw.preferences;
import java.io.File;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ptp.etfw.Activator;
import org.eclipse.ptp.etfw.IToolLaunchConfigurationConstants;
import org.eclipse.ptp.etfw.messages.Messages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* Provides a user-interface for and managed workspace-wide performance tool
* settings. The location of the local tool xml definition file is the most
* critical of these
*
* @author wspear
*
*/
public class ExternalToolPreferencePage extends PreferencePage implements IWorkbenchPreferencePage,
IToolLaunchConfigurationConstants {
protected List XMLLocs = null;
protected Button browseXMLButton = null;
protected Button removeItemButton = null;
// protected Button checkAutoOpts=null;
// protected Button checkAixOpts=null;
public ExternalToolPreferencePage() {
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}
protected class WidgetListener extends SelectionAdapter implements ModifyListener, IPropertyChangeListener {
@Override
public void widgetSelected(SelectionEvent e) {
Object source = e.getSource();
if (source == browseXMLButton) {
handleXMLBrowseButtonSelected();
}
if (source == removeItemButton) {
handleRemoveItem();
}
updatePreferencePage();
}
public void modifyText(ModifyEvent evt) {
Object source = evt.getSource();
if (source == XMLLocs) {
}
updatePreferencePage();
}
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(FieldEditor.IS_VALID))
updatePreferencePage();
}
}
protected WidgetListener listener = new WidgetListener();
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(createGridLayout(1, true, 0, 0));
composite.setLayoutData(spanGridData(GridData.FILL_HORIZONTAL, 2));
createTauConf(composite);
loadSaved();
defaultSetting();
return composite;
}
/**
* Create the TAU options UI
*
* @param parent
*/
private void createTauConf(Composite parent) {
Group aGroup = new Group(parent, SWT.SHADOW_ETCHED_IN);
aGroup.setLayout(createGridLayout(1, true, 10, 10));
aGroup.setLayoutData(spanGridData(GridData.FILL_HORIZONTAL, 2));
aGroup.setText(Messages.ExternalToolPreferencePage_ExToolConf);
Composite xmlcom = new Composite(aGroup, SWT.NONE);
xmlcom.setLayout(createGridLayout(2, false, 0, 0));
xmlcom.setLayoutData(spanGridData(GridData.FILL_HORIZONTAL, 5));
Label tauarchComment = new Label(xmlcom, SWT.WRAP);
tauarchComment.setText(Messages.ExternalToolPreferencePage_ToolDefFile);
XMLLocs = new List(xmlcom, SWT.BORDER | SWT.V_SCROLL);
XMLLocs.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// XMLLocs.add.addModifyListener(listener);
browseXMLButton = new Button(xmlcom, SWT.PUSH);
browseXMLButton.setText(Messages.ExternalToolPreferencePage_Add);
browseXMLButton.addSelectionListener(listener);
removeItemButton = new Button(xmlcom, SWT.PUSH);
removeItemButton.setText(Messages.ExternalToolPreferencePage_Remove);
removeItemButton.addSelectionListener(listener);
// TODO: Implement tau-option checking
// GridData gridData = new GridData(GridData.VERTICAL_ALIGN_END);
// gridData.horizontalSpan = 3;
// gridData.horizontalAlignment = GridData.FILL;
//
// if(org.eclipse.cdt.utils.Platform.getOS().toLowerCase().trim().indexOf("aix")>=0)
// {
// checkAixOpts=createCheckButton(tauarch,"Automatically use Eclipse internal builder (May be needed for AIX compatibility)");
// checkAixOpts.setLayoutData(gridData);
// checkAixOpts.addSelectionListener(listener);
// }
//
// checkAutoOpts=createCheckButton(tauarch,
// "Check for TAU System options");
// checkAutoOpts.setLayoutData(gridData);
// checkAutoOpts.addSelectionListener(listener);
}
protected void handleRemoveItem() {
XMLLocs.remove(XMLLocs.getSelectionIndices());
}
/**
* Allow user to specify a TAU arch directory. The specified directory must
* contain at least one recognizable TAU makefile in its lib sub-directory
* to be accepted.
*
*/
protected void handleXMLBrowseButtonSelected() {
FileDialog dialog = new FileDialog(getShell());
File path = null;
String correctPath = null;
int maxXDex = XMLLocs.getItemCount() - 1;
if (maxXDex >= 0) {
correctPath = getFieldContent(XMLLocs.getItem(maxXDex));
}
if (correctPath != null) {
path = new File(correctPath);
if (path.exists())
dialog.setFilterPath(path.isFile() ? correctPath : path.getParent());
}
// String tlpath = correctPath+File.separator+"lib";
//
// class makefilter implements FilenameFilter{
// public boolean accept(File dir, String name) {
// if(name.indexOf("Makefile.tau")!=0 || name.indexOf("-pdt")<=0)
// return false;
// return true;
// }
// }
// File[] mfiles=null;
// makefilter mfilter = new makefilter();
// File test = new File(tlpath);
dialog.setText(Messages.ExternalToolPreferencePage_SelectToolDefXML);
String out = getFieldContent(dialog.open());
if (out != null) {
File test = new File(out);
if (test.canRead() && test.isFile()) {
XMLLocs.add(out);
} else {
// TODO: print a warning?
}
}
// dialog.setMessage("You must select a valid TAU architecture directory. Such a directory should be created when you configure and install TAU. It must contain least one valid stub makefile configured with the Program Database Toolkit (pdt)");
// String selectedPath=null;
// while(true)
// {
// selectedPath = dialog.open();
// if(selectedPath==null)
// break;
//
// tlpath=selectedPath+File.separator+"lib";
// test = new File(tlpath);
// if(test.exists()){
// mfiles = test.listFiles(mfilter);
// }
// if (mfiles!=null&&mfiles.length>0)
// {
// if (selectedPath != null)
// XMLLoc.setText(selectedPath);
// break;
// }
// }
}
private void loadSaved() {
Preferences preferences = Activator.getDefault().getPluginPreferences();
String fiList = preferences.getString(XMLLOCID);
String[] files = fiList.split(",,,"); //$NON-NLS-1$
for (String s : files) {
XMLLocs.add(s);// setText(preferences.getString(XMLLOCID));
}
// TODO: Add checks
// checkAutoOpts.setSelection(preferences.getBoolean("TAUCheckForAutoOptions"));
// if(checkAixOpts!=null)
// checkAixOpts.setSelection(preferences.getBoolean("TAUCheckForAIXOptions"));
}
@Override
public boolean performOk() {
Preferences preferences = Activator.getDefault().getPluginPreferences();
String fiList = ""; //$NON-NLS-1$
for (int i = 0; i < XMLLocs.getItemCount(); i++) {
fiList += XMLLocs.getItem(i);
if (i < XMLLocs.getItemCount() - 1) {
fiList += ",,,"; //$NON-NLS-1$
}
}
preferences.setValue(XMLLOCID, fiList);// XMLLoc.getText());
Activator.getDefault().refreshTools();
// TODO: Add checks
// preferences.setValue("TAUCheckForAutoOptions",
// checkAutoOpts.getSelection());
// if(checkAixOpts!=null)
// preferences.setValue("TAUCheckForAIXOptions",
// checkAixOpts.getSelection());
//
// Activator.getDefault().savePluginPreferences();
return true;
}
protected Button createCheckButton(Composite parent, String label) {
return createButton(parent, label, SWT.CHECK | SWT.LEFT);
}
protected Button createButton(Composite parent, String label, int type) {
Button button = new Button(parent, type);
button.setText(label);
GridData data = new GridData();
button.setLayoutData(data);
return button;
}
public void init(IWorkbench workbench) {
}
protected void defaultSetting() {
}
@Override
public void dispose() {
super.dispose();
}
@Override
public void performDefaults() {
defaultSetting();
updateApplyButton();
}
protected void updatePreferencePage() {
setErrorMessage(null);
setMessage(null);
setValid(true);
}
protected String getFieldContent(String text) {
if (text == null)
return null;
if (text.trim().length() == 0 || text.equals(EMPTY_STRING))
return null;
return text;
}
protected GridLayout createGridLayout(int columns, boolean isEqual, int mh, int mw) {
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = columns;
gridLayout.makeColumnsEqualWidth = isEqual;
gridLayout.marginHeight = mh;
gridLayout.marginWidth = mw;
return gridLayout;
}
protected GridData spanGridData(int style, int space) {
GridData gd = null;
if (style == -1)
gd = new GridData();
else
gd = new GridData(style);
gd.horizontalSpan = space;
return gd;
}
}