Java tutorial
/***************************************************************************** * Copyright (c) 2006, 2008 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Thomas Koeckerbauer GUP, JKU - initial API and implementation *****************************************************************************/ package eu.geclipse.traceview.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; 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.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import eu.geclipse.traceview.internal.Activator; import eu.geclipse.traceview.internal.Messages; /** * Preference Page for the Event Markers */ public class MarkerPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { IPreferenceStore store; Button button; private Button upButton; private Button downButton; /** * Creates a new MarkerPreferencesPage */ public MarkerPreferencesPage() { super(); this.store = Activator.getDefault().getPreferenceStore(); } public void init(final IWorkbench workbench) { // nothing } @Override protected Control createContents(final Composite parent) { this.setTitle(Messages.getString("MarkerPreferencesPage.pageTitle")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(2, false); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); composite.setLayout(layout); composite.setLayoutData(layoutData); GridData gData; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); gData = new GridData(GridData.FILL_BOTH); gData.horizontalSpan = 1; gData.verticalSpan = 3; gData.grabExcessHorizontalSpace = true; gData.grabExcessVerticalSpace = true; gData.widthHint = 200; gData.heightHint = 100; final Table table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); MarkerEntry[] eventMarkers = getEventMarkers(); for (MarkerEntry entry : eventMarkers) { TableItem item = new TableItem(table, SWT.NONE); item.setData(entry); item.setText(entry.label); item.setChecked(entry.checked); } table.setLayoutData(gData); table.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { updateButtonStates(table); } }); table.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event event) { ((MarkerEntry) table.getSelection()[0].getData()).checked = event.detail == SWT.CHECK; } }); this.upButton = new Button(composite, SWT.PUSH); this.upButton.setText(Messages.getString("MarkerPreferencesPage.up")); //$NON-NLS-1$ gData = new GridData(GridData.FILL_HORIZONTAL); this.upButton.setLayoutData(gData); this.upButton.setEnabled(false); this.upButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { moveSelectedItem(table, -1); } }); this.downButton = new Button(composite, SWT.PUSH); this.downButton.setText(Messages.getString("MarkerPreferencesPage.down")); //$NON-NLS-1$ gData = new GridData(GridData.FILL_HORIZONTAL); this.downButton.setLayoutData(gData); this.downButton.setEnabled(false); this.downButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { moveSelectedItem(table, 1); } }); return composite; } MarkerEntry[] getEventMarkers() { List<MarkerEntry> eventMarkers = new ArrayList<MarkerEntry>(); for (IConfigurationElement configurationElement : Platform.getExtensionRegistry() .getConfigurationElementsFor("eu.geclipse.traceview.EventMarker")) { //$NON-NLS-1$ eventMarkers.add(new MarkerEntry(configurationElement.getAttribute("id"), //$NON-NLS-1$ configurationElement.getAttribute("label"), //$NON-NLS-1$ true)); } return eventMarkers.toArray(new MarkerEntry[0]); } void moveSelectedItem(final Table table, final int offset) { int index = table.getSelectionIndex(); TableItem item = table.getItem(index); boolean checked = item.getChecked(); MarkerEntry entry = (MarkerEntry) item.getData(); table.remove(index); TableItem newItem = new TableItem(table, SWT.NONE, index + offset); newItem.setChecked(checked); newItem.setData(entry); newItem.setText(entry.label); table.setSelection(index + offset); updateButtonStates(table); } void updateButtonStates(final Table table) { this.upButton.setEnabled(table.getSelectionIndex() != 0); this.downButton.setEnabled(table.getSelectionIndex() != table.getItemCount() - 1); } } class MarkerEntry { boolean checked; String id; String label; MarkerEntry(final String id, final String label, final boolean checked) { this.id = id; this.label = label; this.checked = checked; } }