view tk/types.d @ 6:a27d2093991c

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 20:44:14 +0930
parents 8a39b13cd3e6
children 936feb16eed4
line wrap: on
line source

module tk.types;

private import std.string;
private import std.typecons;
private import std.algorithm;

mixin(defineEnum!("ButtonPress",
                  "SINGLE", "DOUBLE", "TRIPLE", "RELEASE"));
mixin(defineEnum!("ButtonNumber",
                  "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5"));
mixin(defineEnum!("ScrollDirection",
                  "UP", "DOWN", "LEFT", "RIGHT"));
mixin(defineEnum!("Modifier",
                  "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META",
                  "SCROLL_LOCK", "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5"));

class Mask {
    this(in Modifier[] modifiers) {
        _modifiers = modifiers.dup;
    }

    override string toString() const {
        string s;

        foreach (Modifier m; _modifiers) {
            if (s != "") s ~= "|";
            s ~= enumToString(m);
        }

        return s;
    }

    bool is_set(Modifier m) const {
        foreach (Modifier m2; _modifiers) {
            if (m == m2) {
                return true;
            }
        }

        return false;
    }

    bool is_unset(Modifier m) const {
        return !is_set(m);
    }

    private {
        Modifier[] _modifiers;
    }
}

/*
class Mask {
    this() {
    }

    this(in Mask other) {
        mBits = other.mBits;
    }

    void add(Modifier modifier) { mBits |= to_bit(modifier); }
    void remove(Modifier modifier) { mBits &= ~to_bit(modifier); }
    bool query(Modifier modifier) const { return cast(bool)(mBits & to_bit(modifier)); }

    override string toString() const {
        Modifier m = Modifier.SHIFT;
        return enumToString(m);
    }

    private {
        static int to_bit(Modifier modifier) { return 1 << cast(int)modifier; }
        int mBits;
    }
}
*/