view doodle/tk/events.d @ 28:1754cb773d41

Part-way through getting to compile with configure/builder.
author Graham St Jack <graham.stjack@internode.on.net>
date Sun, 02 Aug 2009 16:27:21 +0930
parents tk/events.d@c643c04e3f5e
children 157b4ad5615d
line wrap: on
line source

module doodle.tk.events;

public {
    import doodle.tk.types;
    import doodle.tk.geometry;
}

abstract class Event {
    this(in Mask mask) {
        mMask = mask;
    }

    Mask mask() const { return mMask; }

    private {
        Mask mMask;
    }
}

final class CrossingEvent : Event {
    this(in Mask mask) {
        super(mask);
    }

    private {
    }
}

final class KeyEvent : Event {
    this(in string str, in uint value, in Mask mask) {
        super(mask);
        mStr = str;
        mValue = value;
    }

    string str() const { return mStr; }

    override string toString() const {
        return std.string.format("Key event: %s, %d, %s", mStr, mValue, mMask);
    }

    private {
        string mStr;
        uint mValue;
    }
}

abstract class PointerEvent : Event {
    this(in Point pixel_point, in Point model_point, in Mask mask) {
        super(mask);
        mPixelPoint = pixel_point;
        mModelPoint = model_point;
    }

    Point pixel_point() const { return mPixelPoint; }
    Point model_point() const { return mModelPoint; }

    private {
        Point mPixelPoint;
        Point mModelPoint;
    }
}

final class ButtonEvent : PointerEvent {
    this(in ButtonAction button_action,
         in ButtonName button_name,
         in Point pixel_point,
         in Point model_point,
         in Mask mask) {   
        super(pixel_point, model_point, mask);
        mButtonAction = button_action;
        mButtonName = button_name;
    }

    override string toString() const {
        return std.string.format("Button event: %s, %s, %s, %s, %s",
                                 enumToString(mButtonAction), enumToString(mButtonName),
                                 mPixelPoint, mModelPoint, mMask);
    }

    ButtonAction button_action() const { return mButtonAction; }
    ButtonName button_name() const { return mButtonName; }

    private {
        ButtonAction mButtonAction;
        ButtonName mButtonName;
    }
}

final class MotionEvent : PointerEvent {
    this(in Point pixel_point,
         in Point model_point,
         in Mask mask) {
        super(pixel_point, model_point, mask);
    }

    override string toString() const {
        return std.string.format("Motion event: %s, %s, %s",
                                 mPixelPoint, mModelPoint, mMask);
    }
}

final class ScrollEvent : PointerEvent {
    this(in ScrollDirection scroll_direction,
         in Point pixel_point,
         in Point model_point,
         in Mask mask) {
        super(pixel_point, model_point, mask);
        mScrollDirection = scroll_direction;
    }

    override string toString() const {
        return std.string.format("Scroll event: %s, %s, %s, %s",
                                 enumToString(mScrollDirection), mPixelPoint, mModelPoint, mMask);
    }

    ScrollDirection scroll_direction() const { return mScrollDirection; }

    private {
        ScrollDirection mScrollDirection;
    }
}