package eu.geclipse.traceview.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.TitleAreaDialog;
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.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class MarkerOrderDialog extends TitleAreaDialog {
private List<EventMarkerEntry> initMarkerList;
private List<EventMarkerEntry> newMarkerList;
private Table table;
private Button upButton;
private Button downButton;
public MarkerOrderDialog( Shell parentShell ) {
super( parentShell );
}
void setEventMarkerEntries(List<EventMarkerEntry> list) {
this.initMarkerList = list;
}
List<EventMarkerEntry> getEventMarkerEntries() {
return this.newMarkerList;
}
@Override
protected boolean isResizable() {
return true;
}
@Override
protected Control createDialogArea( Composite parent ) {
setTitle( Messages.getString("MarkerOrderDialog.dialogTitle") ); //$NON-NLS-1$
setMessage( Messages.getString("MarkerOrderDialog.dialogDesc") ); //$NON-NLS-1$
getShell().setText( Messages.getString("MarkerOrderDialog.winTitle") ); //$NON-NLS-1$
Composite comp = new Composite( parent, SWT.FILL );
comp.setLayout( new GridLayout(2, false) );
comp.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
GridData gData = new GridData(SWT.FILL, SWT.FILL, true, true);
gData.verticalSpan = 3;
table = new Table(comp, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
table.setLayoutData( gData );
for ( EventMarkerEntry item : this.initMarkerList ) {
getTableItem( item, table.getItemCount() );
}
upButton = new Button( comp, SWT.BORDER );
upButton.setText( Messages.getString("MarkerOrderDialog.moveUp") ); //$NON-NLS-1$
upButton.setEnabled( false );
upButton.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false ) );
upButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
int selectionIndex = table.getSelectionIndex();
EventMarkerEntry item = ( EventMarkerEntry )table.getItem( selectionIndex ).getData();
boolean selected = table.getItem( selectionIndex ).getChecked();
table.remove( selectionIndex );
TableItem tableItem = getTableItem( item, selectionIndex - 1 );
tableItem.setChecked( selected );
table.setSelection( selectionIndex - 1 );
updateButtonState();
}
});
downButton = new Button( comp, SWT.BORDER );
downButton.setText( Messages.getString("MarkerOrderDialog.moveDown") ); //$NON-NLS-1$
downButton.setEnabled( false );
downButton.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false ) );
downButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
int selectionIndex = table.getSelectionIndex();
EventMarkerEntry item = ( EventMarkerEntry )table.getItem( selectionIndex ).getData();
boolean selected = table.getItem( selectionIndex ).getChecked();
table.remove( selectionIndex );
TableItem tableItem = getTableItem( item, selectionIndex + 1 );
tableItem.setChecked( selected );
table.setSelection( selectionIndex + 1 );
updateButtonState();
}
});
table.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
updateButtonState();
}
} );
return comp;
}
private void updateButtonState() {
upButton.setEnabled( table.getSelectionIndex() > 0 );
downButton.setEnabled( table.getSelectionIndex() < table.getItemCount()-1 );
}
private TableItem getTableItem(EventMarkerEntry entry, int index) {
TableItem tableItem = new TableItem( table, SWT.NONE, index );
tableItem.setText( entry.label );
tableItem.setData( entry );
tableItem.setChecked( entry.enabled );
return tableItem;
}
@Override
protected void okPressed() {
this.newMarkerList = new ArrayList<EventMarkerEntry>();
for (TableItem item : table.getItems()) {
EventMarkerEntry entry = ( EventMarkerEntry )item.getData();
entry.enabled = item.getChecked();
this.newMarkerList.add( entry );
}
super.okPressed();
}
}