/*****************************************************************************
* 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;
}
}