blob: dbaea53ffb64c99e6959c13f9fe130dc302c10e4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002-2007 Innoopract Informationssysteme GmbH.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package org.eclipse.swt.internal.widgets;
import java.text.MessageFormat;
import java.util.ArrayList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
public final class UntypedEventAdapter
implements ControlListener,
DisposeListener,
SelectionListener,
FocusListener,
TreeListener,
ShellListener,
MenuListener,
ModifyListener,
SetDataListener,
VerifyListener,
MouseListener
{
private ArrayList listeners = new ArrayList();
private class Entry {
final int eventType;
final Listener listener;
private Entry( final int eventType, final Listener listener ) {
this.eventType = eventType;
this.listener = listener;
}
}
public void controlMoved( final ControlEvent evt ) {
Event event = createEvent( SWT.Move, evt.getSource() );
dispatchEvent( SWT.Move, event );
}
public void controlResized( final ControlEvent evt ) {
Event event = createEvent( SWT.Resize, evt.getSource() );
dispatchEvent( SWT.Resize, event );
}
public void widgetDisposed( final DisposeEvent evt ) {
Event event = createEvent( SWT.Dispose, evt.getSource() );
dispatchEvent( SWT.Dispose, event );
}
public void widgetDefaultSelected( final SelectionEvent evt ) {
Event event = createEvent( SWT.DefaultSelection, evt.getSource() );
event.x = evt.x;
event.y = evt.y;
event.height = evt.height;
event.width = evt.width;
dispatchEvent( SWT.DefaultSelection, event );
}
public void widgetSelected( final SelectionEvent evt ) {
Event event = createEvent( SWT.Selection, evt.getSource() );
event.x = evt.x;
event.y = evt.y;
event.height = evt.height;
event.width = evt.width;
event.detail = evt.detail;
event.item = evt.item;
event.text = evt.text;
dispatchEvent( SWT.Selection, event );
}
public void focusGained( final FocusEvent evt ) {
Event event = createEvent( SWT.FocusIn, evt.getSource() );
dispatchEvent( SWT.FocusIn, event );
}
public void focusLost( final FocusEvent evt ) {
Event event = createEvent( SWT.FocusOut, evt.getSource() );
dispatchEvent( SWT.FocusOut, event );
}
public void treeCollapsed( final TreeEvent evt ) {
Event event = createEvent( SWT.Collapse, evt.getSource() );
event.item = evt.item;
dispatchEvent( SWT.Collapse, event );
}
public void treeExpanded( final TreeEvent evt ) {
Event event = createEvent( SWT.Expand, evt.getSource() );
event.item = evt.item;
dispatchEvent( SWT.Expand, event );
}
public void shellActivated( final ShellEvent evt ) {
Event event = createEvent( SWT.Activate, evt.getSource() );
dispatchEvent( SWT.Activate, event );
}
public void shellClosed( final ShellEvent evt ) {
Event event = createEvent( SWT.Close, evt.getSource() );
dispatchEvent( SWT.Close, event );
}
public void shellDeactivated( final ShellEvent evt ) {
Event event = createEvent( SWT.Deactivate, evt.getSource() );
dispatchEvent( SWT.Deactivate, event );
}
public void menuHidden( final MenuEvent evt ) {
Event event = createEvent( SWT.Hide, evt.getSource() );
dispatchEvent( SWT.Hide, event );
}
public void menuShown( final MenuEvent evt ) {
Event event = createEvent( SWT.Show, evt.getSource() );
dispatchEvent( SWT.Show, event );
}
public void modifyText( final ModifyEvent evt ) {
Event event = createEvent( SWT.Modify, evt.getSource() );
dispatchEvent( SWT.Modify, event );
}
public void verifyText( final VerifyEvent evt ) {
Event event = createEvent( SWT.Verify, evt.getSource() );
event.doit = evt.doit;
event.text = evt.text;
dispatchEvent( SWT.Verify, event );
}
public void update( final SetDataEvent evt ) {
Event event = createEvent( SWT.SetData, evt.getSource() );
event.item = evt.item;
event.index = evt.index;
dispatchEvent( SWT.SetData, event );
}
public void mouseDown( final MouseEvent evt ) {
Event event = createEvent( SWT.MouseDown, evt.getSource() );
event.button = evt.button;
event.x = evt.x;
event.y = evt.y;
dispatchEvent( SWT.MouseDown, event );
}
public void mouseUp( final MouseEvent evt ) {
Event event = createEvent( SWT.MouseUp, evt.getSource() );
event.button = evt.button;
event.x = evt.x;
event.y = evt.y;
dispatchEvent( SWT.MouseUp, event );
}
public void mouseDoubleClick( final MouseEvent evt ) {
Event event = createEvent( SWT.MouseDoubleClick, evt.getSource() );
event.button = evt.button;
event.x = evt.x;
event.y = evt.y;
dispatchEvent( SWT.MouseDoubleClick, event );
}
public void addListener( final Widget widget,
final int eventType,
final Listener listener )
{
addListener( eventType, listener );
switch( eventType ) {
case SWT.Move:
case SWT.Resize:
ControlEvent.addListener( widget, this );
break;
case SWT.Dispose:
DisposeEvent.addListener( widget, this );
break;
case SWT.Selection:
case SWT.DefaultSelection:
SelectionEvent.addListener( widget, this );
break;
case SWT.FocusIn:
case SWT.FocusOut:
FocusEvent.addListener( widget, this );
break;
case SWT.Expand:
case SWT.Collapse:
TreeEvent.addListener( widget, ( TreeListener )this );
break;
case SWT.Activate:
case SWT.Deactivate:
case SWT.Close:
ShellEvent.addListener( widget, this );
break;
case SWT.Hide:
case SWT.Show:
MenuEvent.addListener( widget, this );
break;
case SWT.Modify:
ModifyEvent.addListener( widget, this );
break;
case SWT.Verify:
VerifyEvent.addListener( widget, this );
break;
case SWT.SetData:
SetDataEvent.addListener( widget, this );
break;
case SWT.MouseDown:
case SWT.MouseUp:
case SWT.MouseDoubleClick:
MouseEvent.addListener( widget, this );
break;
default:
String txt = "The untyped event ''{0}'' is not supported.";
Object[] param = new Object[] { new Integer( eventType ) };
String msg = MessageFormat.format( txt, param );
throw new IllegalArgumentException( msg );
}
}
public void removeListener( final Widget widget,
final int eventType,
final Listener listener )
{
removeListener( eventType, listener );
switch( eventType ) {
case SWT.Move:
case SWT.Resize:
ControlEvent.removeListener( widget, this );
break;
case SWT.Dispose:
DisposeEvent.removeListener( widget, this );
break;
case SWT.Selection:
case SWT.DefaultSelection:
SelectionEvent.removeListener( widget, this );
break;
case SWT.FocusIn:
case SWT.FocusOut:
FocusEvent.removeListener( widget, this );
break;
case SWT.Expand:
case SWT.Collapse:
TreeEvent.removeListener( widget, ( TreeListener )this );
break;
case SWT.Activate:
case SWT.Deactivate:
case SWT.Close:
ShellEvent.removeListener( widget, this );
break;
case SWT.Hide:
case SWT.Show:
MenuEvent.removeListener( widget, this );
break;
case SWT.Modify:
ModifyEvent.removeListener( widget, this );
break;
case SWT.Verify:
VerifyEvent.removeListener( widget, this );
break;
case SWT.SetData:
SetDataEvent.removeListener( widget, this );
break;
case SWT.MouseDown:
case SWT.MouseUp:
case SWT.MouseDoubleClick:
MouseEvent.removeListener( widget, this );
break;
default:
String txt = "The untyped event ''{0}'' is not supported.";
Object[] param = new Object[] { new Integer( eventType ) };
String msg = MessageFormat.format( txt, param );
throw new IllegalArgumentException( msg );
}
}
void addListener( final int eventType, final Listener listener ) {
listeners.add( new Entry( eventType, listener ) );
}
void removeListener( final int eventType, final Listener listener ) {
Entry[] entries = getEntries();
boolean found = false;
for( int i = 0; !found && i < entries.length; i++ ) {
// TODO [fappel]: check whether we have also to compare eventType!
found = entries[ i ].listener == listener;
if( found ) {
listeners.remove( entries[ i ] );
}
}
}
public boolean isEmpty() {
return listeners.isEmpty();
}
//////////////////
// helping methods
private void dispatchEvent( final int eventType, final Event event ) {
Entry[] entries = getEntries();
for( int i = 0; i < entries.length; i++ ) {
if( entries[ i ].eventType == eventType ) {
entries[ i ].listener.handleEvent( event );
}
}
}
private Entry[] getEntries() {
Entry[] result = new Entry[ listeners.size() ];
listeners.toArray( result );
return result;
}
private static Event createEvent( final int eventType, final Object source ) {
Widget widget = ( Widget )source;
Event result = new Event();
result.type = eventType;
result.widget = widget;
result.display = widget.getDisplay();
return result;
}
}