Mercurial > projects > doodle
view tk/types.d @ 5:8a39b13cd3e6
Checkpoint
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Fri, 10 Jul 2009 18:19:16 +0930 |
parents | d6f44347373d |
children | a27d2093991c |
line wrap: on
line source
module tk.types; private import std.string; private import std.typecons; private import std.algorithm; /* enum ButtonPress { SINGLE, DOUBLE, TRIPLE, RELEASE } string toString(in ButtonPress bp) { switch (bp) { case ButtonPress.SINGLE: return "SINGLE"; case ButtonPress.DOUBLE: return "DOUBLE"; case ButtonPress.TRIPLE: return "TRIPLE"; case ButtonPress.RELEASE: return "RELEASE"; default: return std.string.format("<UNKNOWN ButtonPress: %s>", bp); } } enum ButtonNumber { BUTTON_1, BUTTON_2, BUTTON_3, BUTTON_4, BUTTON_5, } string toString(in ButtonNumber bn) { switch (bn) { case ButtonNumber.BUTTON_1: return "BUTTON_1"; case ButtonNumber.BUTTON_2: return "BUTTON_2"; case ButtonNumber.BUTTON_3: return "BUTTON_3"; case ButtonNumber.BUTTON_4: return "BUTTON_4"; case ButtonNumber.BUTTON_5: return "BUTTON_5"; default: return std.string.format("<UNKNOWN ButtonNumber: %s>", bn); } } enum ScrollDirection { UP, DOWN, LEFT, RIGHT } string toString(in ScrollDirection sd) { switch (sd) { case ScrollDirection.UP: return "UP"; case ScrollDirection.DOWN: return "DOWN"; case ScrollDirection.LEFT: return "LEFT"; case ScrollDirection.RIGHT: return "RIGHT"; default: return std.string.format("<UNKNOWN ScrollDirection: %s>", sd); } } enum Modifier { SHIFT, CAPS_LOCK, CONTROL, ALT, NUM_LOCK, META, SCROLL_LOCK, BUTTON_1, BUTTON_2, BUTTON_3, BUTTON_4, BUTTON_5 } string toString(in Modifier m) { switch (m) { case Modifier.SHIFT: return "SHIFT"; case Modifier.CAPS_LOCK: return "CAPS_LOCK"; case Modifier.CONTROL: return "CONTROL"; case Modifier.ALT: return "ALT"; case Modifier.NUM_LOCK: return "NUM_LOCK"; case Modifier.META: return "META"; case Modifier.SCROLL_LOCK: return "SCROLL_LOCK"; case Modifier.BUTTON_1: return "BUTTON_1"; case Modifier.BUTTON_2: return "BUTTON_2"; case Modifier.BUTTON_3: return "BUTTON_3"; case Modifier.BUTTON_4: return "BUTTON_4"; case Modifier.BUTTON_5: return "BUTTON_5"; default: return std.string.format("<UNKNOWN Modifier: %s>", m); } } */ 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")); struct Mask2 { this(in Modifier[] modifiers) { _modifiers = modifiers.dup; } string toString() const { string s; foreach (Modifier m; _modifiers) { 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); /* return format("Mask: %s", m); */ //return format("%d", mBits); } private { static int to_bit(Modifier modifier) { return 1 << cast(int)modifier; } int mBits; } }