1 module uim.core.mixins.property; 2 3 auto PROPERTYPREFIX(string dataType, string propertyName, string defaultValue = null) { 4 return " 5 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 6 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 7 8 auto "~propertyName~"Default() { return _default"~propertyName~"; } 9 void "~propertyName~"Reset() { _"~propertyName~" = _default"~propertyName~"; } 10 void "~propertyName~"Default("~dataType~" value) { _default"~propertyName~" = value; } 11 bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); }"; 12 } 13 14 template OProperty_get(string dataType, string propertyName, string defaultValue = null) { 15 const char[] OProperty_get = PROPERTYPREFIX(dataType, propertyName, defaultValue) ~" 16 @property "~dataType~" "~propertyName~"() { return _"~propertyName~"; }"; 17 } 18 19 template OProperty_set(string dataType, string propertyName, string defaultValue = null) { 20 const char[] OProperty_set = PROPERTYPREFIX(dataType, propertyName, defaultValue) ~" 21 @property O "~propertyName~"(this O)("~dataType~" value) { _"~propertyName~" = value; return cast(O)this; }"; 22 } 23 24 template OProperty(string dataType, string propertyName, string defaultValue = null, string get = null, string set = null) { 25 const char[] getFkt = (get.length > 0) ? get : "return _"~propertyName~";"; 26 const char[] setFkt = (set.length > 0) ? set : "_"~propertyName~" = newValue; return cast(O)this;"; 27 28 const char[] OProperty = " 29 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 30 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 31 32 auto "~propertyName~"Default() { return _default"~propertyName~"; } 33 O "~propertyName~"Reset(this O)() { _"~propertyName~" = _default"~propertyName~"; } 34 O "~propertyName~"Default(this O)("~dataType~" v) { _default"~propertyName~" = v; } 35 bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); } 36 37 @property "~dataType~" "~propertyName~"() { "~getFkt~" } 38 @property O "~propertyName~"(this O)("~dataType~" newValue) { "~setFkt~" }"; 39 } 40 41 // mixins for Template based properties 42 43 template TProperty(string dataType, string propertyName, string defaultValue = null, string get = null, string set = null) { 44 const char[] getFkt = (get.length > 0) ? get : "return _"~propertyName~";"; 45 const char[] setFkt = (set.length > 0) ? set : "_"~propertyName~" = newValue;"; 46 47 const char[] TProperty = " 48 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 49 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 50 51 // O "~propertyName~"Reset(this O)() { _"~propertyName~" = _default"~propertyName~"; return cast(O)this;} 52 // auto "~propertyName~"Default() { return _default"~propertyName~"; } 53 // O "~propertyName~"Default(this O)("~dataType~" newValue) { _default"~propertyName~" = newValue; return cast(O)this; } 54 // bool "~propertyName~"IsDefault() { return (this._"~propertyName~" == _default"~propertyName~"); } 55 56 @property "~dataType~" "~propertyName~"(this O)() { "~getFkt~" } 57 @property O "~propertyName~"(this O)("~dataType~" newValue) { "~setFkt~" return cast(O)this; }"; 58 } 59 60 template TPropertyAA(string keyDataType, string valueDataType, string propertyName, string defaultValue = null, string get = null, string set = null) { 61 const char[] getFkt = (get.length > 0) ? get : "return _"~propertyName~";"; 62 const char[] setFkt = (set.length > 0) ? set : "_"~propertyName~" = newValue;"; 63 const char[] aaDataType = valueDataType~"["~keyDataType~"]"; 64 65 const char[] TPropertyAA = " 66 protected "~aaDataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 67 protected "~aaDataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 68 69 O "~propertyName~"Reset(this O)() { _"~propertyName~" = _default"~propertyName~"; return cast(O)this;} 70 auto "~propertyName~"Default() { return _default"~propertyName~"; } 71 O "~propertyName~"Default(this O)("~aaDataType~" newValue) { _default"~propertyName~" = newValue; return cast(O)this; } 72 bool "~propertyName~"IsDefault() { return (this._"~propertyName~" == _default"~propertyName~"); } 73 74 @property "~aaDataType~" "~propertyName~"(this O)() { "~getFkt~" } 75 @property O "~propertyName~"(this O)("~aaDataType~" newValue) { "~setFkt~" return cast(O)this; } 76 O "~propertyName~"(this O)("~keyDataType~" key, "~valueDataType~" value) { _"~propertyName~"[key] = value; return cast(O)this; } 77 O "~propertyName~"Add(this O)("~aaDataType~" values) { foreach(k,v;values) _"~propertyName~"[k] = v; return cast(O)this; }"; 78 } 79 80 // mixins for Extended Template based properties 81 82 template TXProperty_get(string dataType, string propertyName, string defaultValue = null, string get = null) { 83 const char[] getFkt = (get.length > 0) ? get : "return _"~propertyName~";"; 84 85 const char[] TXProperty_get = " 86 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 87 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 88 89 O "~propertyName~"Reset(this O)() { _"~propertyName~" = _default"~propertyName~"; return cast(O)this;} 90 auto "~propertyName~"Default() { return _default"~propertyName~"; } 91 O "~propertyName~"Default(this O)("~dataType~" newValue) { _default"~propertyName~" = newValue; return cast(O)this; } 92 bool "~propertyName~"IsDefault() { return (this._"~propertyName~" == _default"~propertyName~"); } 93 94 @property "~dataType~" "~propertyName~"(this O)() { "~getFkt~" }"; 95 } 96 97 template TXProperty(string dataType, string propertyName, string defaultValue = null, string get = null, string set = null) { 98 const char[] getFkt = (get.length > 0) ? get : "return _"~propertyName~";"; 99 const char[] setFkt = (set.length > 0) ? set : "_"~propertyName~" ~= newValue;"; 100 101 const char[] TXProperty = " 102 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 103 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~"; 104 105 O "~propertyName~"Reset(this O)() { _"~propertyName~" = _default"~propertyName~"; return cast(O)this;} 106 auto "~propertyName~"Default() { return _default"~propertyName~"; } 107 O "~propertyName~"Default(this O)("~dataType~" newValue) { _default"~propertyName~" = newValue; return cast(O)this; } 108 bool "~propertyName~"IsDefault() { return (this._"~propertyName~" == _default"~propertyName~"); } 109 110 @property "~dataType~" "~propertyName~"(this O)() { "~getFkt~" } 111 @property O "~propertyName~"(this O)("~dataType~" newValue) { "~setFkt~" return cast(O)this; }"; 112 } 113 114 unittest { 115 116 }