view tk/types.d @ 8:bf7903435f58

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 21:49:04 +0930
parents 936feb16eed4
children f0ade1b49fe7
line wrap: on
line source

module tk.types;

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

mixin(defineEnum!("ButtonAction",
                  "SINGLE_PRESS", "DOUBLE_PRESS", "TRIPLE_PRESS", "RELEASE"));
mixin(defineEnum!("ButtonName",
                  "LEFT", "MIDDLE", "RIGHT", "FOUR", "FIVE"));
mixin(defineEnum!("ScrollDirection",
                  "UP", "DOWN", "LEFT", "RIGHT"));
mixin(defineEnum!("Modifier",
                  "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META",
                  "SCROLL_LOCK", "BUTTON_LEFT", "BUTTON_MIDDLE", "BUTTON_RIGHT", "BUTTON_FOUR", "BUTTON_FIVE"));

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;
    }
}