view dwtx/draw2d/ClickableEventHandler.d @ 98:95307ad235d9

Added Draw2d code, still work in progress
author Frank Benoit <benoit@tionex.de>
date Sun, 03 Aug 2008 00:52:14 +0200
parents
children
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2000, 2005 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:
 *     Frank Benoit <benoit@tionex.de>
 *******************************************************************************/
module dwtx.draw2d.ClickableEventHandler;

import dwt.dwthelper.utils;
import dwtx.draw2d.MouseMotionListener;
import dwtx.draw2d.MouseEvent;
import dwtx.draw2d.KeyEvent;
import dwtx.draw2d.FocusEvent;
import dwtx.draw2d.KeyListener;
import dwtx.draw2d.FocusListener;
import dwtx.draw2d.IFigure;
import dwtx.draw2d.ChangeEvent;
import dwtx.draw2d.ChangeListener;
import dwtx.draw2d.MouseListener;
import dwtx.draw2d.FigureListener;
import dwtx.draw2d.Clickable;
import dwtx.draw2d.ButtonModel;


class ClickableEventHandler
    : MouseMotionListener.Stub
    ,
        MouseListener,
        FigureListener,
        ChangeListener,
        KeyListener,
        FocusListener
{

private MouseEvent lastEvent;

public void focusLost(FocusEvent fe) {
    Clickable loser = cast(Clickable)fe.loser;
    loser.repaint();
    loser.getModel().setArmed(false);
    loser.getModel().setPressed(false);
}

public void focusGained(FocusEvent fe) {
    Clickable clickable = cast(Clickable)fe.gainer;
    clickable.repaint();
}

public void figureMoved(IFigure source) {
    if (lastEvent is null)
        return;
    mouseDragged(lastEvent);
}

public void handleStateChanged(ChangeEvent change) {
    Clickable clickable = cast(Clickable)change.getSource();
    if (change.getPropertyName() is ButtonModel.MOUSEOVER_PROPERTY
        && !clickable.isRolloverEnabled())
        return;
    clickable.repaint();
}

public void mouseDoubleClicked(MouseEvent me) { }

public void mouseDragged(MouseEvent me) {
    lastEvent = me;
    Clickable click = cast(Clickable)me.getSource();
    ButtonModel model = click.getModel();
    if (model.isPressed()) {
        bool over = click.containsPoint(me.getLocation());
            model.setArmed(over);
            model.setMouseOver(over);
    }
}

public void mouseEntered(MouseEvent me) {
    Clickable click = cast(Clickable)me.getSource();
    click.getModel().setMouseOver(true);
    click.addFigureListener(this);
}

public void mouseExited(MouseEvent me) {
    Clickable click = cast(Clickable)me.getSource();
    click.getModel().setMouseOver(false);
    click.removeFigureListener(this);
}

public void mouseMoved(MouseEvent me) { }

public void mousePressed(MouseEvent me) {
    if (me.button !is 1)
        return;
    lastEvent = me;
    Clickable click = cast(Clickable)me.getSource();
    ButtonModel model = click.getModel();
    click.requestFocus();
    model.setArmed(true);
    model.setPressed(true);
    me.consume();
}

public void mouseReleased(MouseEvent me) {
    if (me.button !is 1)
        return;
    ButtonModel model = (cast(Clickable)me.getSource()).getModel();
    if (!model.isPressed())
        return;
    model.setPressed(false);
    model.setArmed(false);
    me.consume();
}

public void keyPressed(KeyEvent ke) {
    ButtonModel model = (cast(Clickable)ke.getSource()).getModel();
    if (ke.character is ' ' || ke.character is '\r') {
        model.setPressed(true);
        model.setArmed(true);
    }
}

public void keyReleased(KeyEvent ke) {
    ButtonModel model = (cast(Clickable)ke.getSource()).getModel();
    if (ke.character is ' ' || ke.character is '\r') {
        model.setPressed(false);
        model.setArmed(false);
    }
}

}