view dwt/widgets/Event.d @ 156:969e7de37c3d default tip

Fixes to get dwt to work with dmd and ldc
author Jacob Carlborg <doob@me.com>
date Wed, 08 Jul 2009 21:56:44 +0200
parents 9dd4a17513f9
children
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2000, 2008 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *     
 * Port to the D programming language:
 *     Jacob Carlborg <doob@me.com>
 *******************************************************************************/
module dwt.widgets.Event;


import dwt.graphics.GC;
import dwt.graphics.Rectangle;

import tango.text.convert.Format;

import dwt.dwthelper.utils;

import dwt.widgets.Widget;
import dwt.widgets.Display;

/**
 * Instances of this class provide a description of a particular
 * event which occurred within DWT. The DWT <em>untyped listener</em>
 * API uses these instances for all event dispatching.
 * <p>
 * Note: For a given event, only the fields which are appropriate
 * will be filled in. The contents of the fields which are not used
 * by the event are unspecified.
 * </p>
 * 
 * @see Listener
 * @see dwt.events.TypedEvent
 * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: ControlExample, Listeners</a>
 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
 */

public class Event {
    
    /**
     * the display where the event occurred
     * 
     * @since 2.0 
     */ 
    public Display display;
        
    /**
     * the widget that issued the event
     */
    public Widget widget;
    
    /**
     * the type of event, as defined by the event type constants
     * in class <code>DWT</code>
     *
     * @see dwt.DWT
     */
    public int type;
    
    /**
     * the event specific detail field, as defined by the detail constants
     * in class <code>DWT</code>
     * 
     * @see dwt.DWT
     */
    public int detail;
    
    /**
     * the item that the event occurred in (can be null)
     */
    public Widget item;
    
    /**
     * the index of the item where the event occurred
     * 
     * @since 3.2
     */
    public int index;
    
    /**
     * the graphics context to use when painting
     * that is configured to use the colors, font and
     * damaged region of the control.  It is valid
     * only during the paint and must not be disposed
     */
    public GC gc;
    
    /**
     * depending on the event type, the x offset of the bounding
     * rectangle of the region that requires painting or the
     * widget-relative, x coordinate of the pointer at the
     * time the mouse button was pressed or released
     */
    public int x;
    
    /**
     * depending on the event type, the y offset of the bounding
     * rectangle of the  region that requires painting or the
     * widget-relative, y coordinate of the pointer at the
     * time the mouse button was pressed or released
     */
    public int y;
    
    /**
     * the width of the bounding rectangle of the 
     * region that requires painting
     */
    public int width;
    
    /**
     * the height of the bounding rectangle of the 
     * region that requires painting
     */
    public int height;

    /**
     * depending on the event type, the number of following
     * paint events which are pending which may always be zero
     * on some platforms or the number of lines or pages to
     * scroll using the mouse wheel
     */
    public int count;
    
    /**
     * the time that the event occurred.
     * 
     * NOTE: This field is an unsigned integer and should
     * be AND'ed with 0xFFFFFFFFL so that it can be treated
     * as a signed long.
     */ 
    public int time;
    
    /**
     * the button that was pressed or released; 1 for the
     * first button, 2 for the second button, and 3 for the
     * third button, etc.
     */ 
    public int button;
    
    /**
     * depending on the event, the character represented by the key
     * that was typed.  This is the final character that results
     * after all modifiers have been applied.  For example, when the
     * user types Ctrl+A, the character value is 0x01 (ASCII SOH).
     * It is important that applications do not attempt to modify the
     * character value based on a stateMask (such as DWT.CTRL) or the
     * resulting character will not be correct.
     */
    public wchar character = '\0';
    
    /**
     * depending on the event, the key code of the key that was typed,
     * as defined by the key code constants in class <code>DWT</code>.
     * When the character field of the event is ambiguous, this field
     * contains the unaffected value of the original character.  For
     * example, typing Ctrl+M or Enter both result in the character '\r'
     * but the keyCode field will also contain '\r' when Enter was typed
     * and 'm' when Ctrl+M was typed.
     * 
     * @see dwt.DWT
     */
    public int keyCode;
    
    /**
     * depending on the event, the state of the keyboard modifier
     * keys and mouse masks at the time the event was generated.
     * 
     * @see dwt.DWT
     */
    public int stateMask;
    
    /**
     * depending on the event, the range of text being modified.
     * Setting these fields only has effect during ImeComposition 
     * events.
     */
    public int start, end;
    
    /**
     * depending on the event, the new text that will be inserted.
     * Setting this field will change the text that is about to
     * be inserted or deleted.
     */
    public String text;

    /**
     * depending on the event, a flag indicating whether the operation
     * should be allowed.  Setting this field to false will cancel the
     * operation.
     */
    public bool doit = true;
    
    /**
     * a field for application use
     */
    public Object data;
    
/**
 * Gets the bounds.
 * 
 * @return a rectangle that is the bounds.
 */
public Rectangle getBounds () {
    return new Rectangle (x, y, width, height);
}

/**
 * Sets the bounds.
 * 
 * @param rect the new rectangle
 */
public void setBounds (Rectangle rect) {
    this.x = rect.x;
    this.y = rect.y;
    this.width = rect.width;
    this.height = rect.height;
}

/**
 * Returns a string containing a concise, human-readable
 * description of the receiver.
 *
 * @return a string representation of the event
 */
public String toString () {
    return Format( "Event {{type={} {} time={} data={} x={} y={} width={} height={} detail={}}",
        type, widget, time, data, x, y, width, height, detail );  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
}
}