package org.keplerproject.ldt.luaprofiler.launcher.ui.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; 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.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.kepler.ldt.laucher.LauncherPlugin; import org.keplerproject.ldt.luaprofiler.core.LuaProfiler; import org.keplerproject.ldt.luaprofiler.core.LuaProfiler.LuaProfilerInfo; /** * Lua Profiler page Extension. * @author edgard * @version $Id$ * @since 1.2 */ public class LuaProfilerPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { protected CheckboxTableViewer tableViewer; protected Button addButton; // protected Button editButton; protected Button removeButton; public LuaProfilerPreferencePage() { setPreferenceStore(LauncherPlugin.getDefault().getPreferenceStore()); } public void init(IWorkbench workbench) { } @Override protected Control createContents(Composite parent) { noDefaultAndApplyButton(); Composite composite = createPageRoot(parent); Table table = new Table(composite, 0x10820); GridData data = new GridData(1808); table.setLayoutData(data); table.setHeaderVisible(true); table.setLinesVisible(false); TableColumn column = new TableColumn(table, 0); column.setText("Name"); column.setWidth(100); column = new TableColumn(table, 0); column.setText("Path"); column.setWidth(250); tableViewer = new CheckboxTableViewer(table); tableViewer.setContentProvider(new IStructuredContentProvider() { @SuppressWarnings("unchecked") public Object[] getElements(Object input) { List<LuaProfilerInfo> l = (List<LuaProfilerInfo>) input; return l.toArray(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldVal, Object newVal) { } }); tableViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object arg0, int arg1) { return null; } public String getColumnText(Object arg0, int column) { switch (column) { case 0: return ((LuaProfilerInfo) arg0).getName(); case 1: return ((LuaProfilerInfo) arg0).getFile().getAbsolutePath(); default: return ""; } } public void addListener(ILabelProviderListener arg0) { } public void dispose() { } public boolean isLabelProperty(Object arg0, String arg1) { return false; } public void removeListener(ILabelProviderListener arg0) { } }); tableViewer .addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { enableButtons(); } }); tableViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { LuaProfiler.getDefault().setSelectedProfiler( (LuaProfilerInfo) event.getElement()); tableViewer.setChecked(event.getElement(), true); } }); tableViewer.setInput(LuaProfiler.getDefault().getAvailableProfilers()); if (LuaProfiler.getDefault().getSelectedProfiler() != null) { tableViewer.setChecked(LuaProfiler.getDefault() .getSelectedProfiler(), true); } createButtonGroup(composite); enableButtons(); return composite; } protected Composite createPageRoot(Composite parent) { Composite composite = new Composite(parent, 0); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); return composite; } protected void createButtonGroup(Composite composite) { Composite buttons = new Composite(composite, 0); buttons.setLayoutData(new GridData(1)); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; buttons.setLayout(layout); addButton = new Button(buttons, 8); addButton.setLayoutData(new GridData(768)); addButton.setText("Add"); addButton.addListener(13, new Listener() { public void handleEvent(Event evt) { addProfiler(); } }); /* * editButton = new Button(buttons, 8); editButton.setLayoutData(new * GridData(768)); editButton.setText("Edit"); * editButton.addListener(13, new Listener() { * * public void handleEvent(Event evt) { editProfiler(); } * * }); */ removeButton = new Button(buttons, 8); removeButton.setLayoutData(new GridData(768)); removeButton.setText("Remove"); removeButton.addListener(13, new Listener() { public void handleEvent(Event evt) { removeProfiler(); } }); } protected void addProfiler() { InputDialog name = new InputDialog(getShell(), "Name", "Profiler Name", "Profiler", null); name.open(); FileDialog file = new FileDialog(getShell(), SWT.OPEN); if(Platform.getOS().equals(Platform.OS_WIN32)) file.setFilterExtensions(new String[] { "*.dll", "*.a", "*.lib" }); else file.setFilterExtensions(new String[] { "*.so", "*.a"}); LuaProfilerInfo info = new LuaProfilerInfo(name.getValue(), file.open()); tableViewer.add(info); } protected void removeProfiler() { tableViewer.remove(getSelection()); } protected void enableButtons() { if (getSelection() != null) { // editButton.setEnabled(true); removeButton.setEnabled(true); } else { // editButton.setEnabled(false); removeButton.setEnabled(false); } } protected Object getSelection() { return ((IStructuredSelection) tableViewer.getSelection()) .getFirstElement(); } @Override public boolean performOk() { TableItem[] itens = tableViewer.getTable().getItems(); List<LuaProfilerInfo> profilers = new ArrayList<LuaProfilerInfo>( itens.length); for (TableItem item : itens) { profilers.add((LuaProfilerInfo) item.getData()); } LuaProfiler.getDefault().setAvailableProfilers(profilers); LuaProfilerInfo selected = (LuaProfilerInfo) ((IStructuredSelection) tableViewer .getSelection()).getFirstElement(); LuaProfiler.getDefault().setSelectedProfiler(selected); return true; } }