1 module uim.core.mixins;
2 
3 public import uim.core.mixins.function_;
4 public import uim.core.mixins.properties;
5 
6 template PropertyOverride(string dataType, string propertyName, string defaultValue = null) {
7 	const char[] PropertyOverride = "
8     alias "~propertyName~" = super."~propertyName~";
9 	@property override "~dataType~" "~propertyName~"() { return _"~propertyName~"; }
10 	@property override void "~propertyName~"("~dataType~" newValue) { _"~propertyName~" = newValue; }";
11 }
12 
13 template MyPropertyString(string propertyName, string defaultValue = null) {
14 	const char[] MyProperty = "
15 	protected string _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
16 	protected string _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
17 	
18 	auto "~propertyName~"Default() { return _default"~propertyName~"; }
19 	void "~propertyName~"Reset() { _"~propertyName~" = _default"~propertyName~"; }
20 	void "~propertyName~"Default(string v) { _default"~propertyName~" = v; }
21 	bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); }
22 
23 	@property string "~propertyName~"(this O)() { return _"~propertyName~"; }
24 	@property O "~propertyName~"(this O)(string newValue) { _"~propertyName~" = newValue; return cast(O)this; }";
25 }
26 
27 template MyPropertyOverride(string dataType, string propertyName, string sourceName = "super") {
28 	const char[] MyPropertyOverride = "
29     alias "~propertyName~" = "~sourceName~"."~propertyName~";
30 	@property "~dataType~" "~propertyName~"(this O)() { return _"~propertyName~"; }
31 	@property O "~propertyName~"(this O)("~dataType~" newValue) { _"~propertyName~" = newValue; return cast(O)this; }";
32 }
33 
34 template BoolProperty(string propertyName, string defaultValue = null) {
35 	const char[] BoolProperty = "
36 protected bool _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
37 protected bool _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
38 
39 @property bool "~propertyName~"() { return _"~propertyName~"; }
40 @property O "~propertyName~"(this O)(bool value) { _"~propertyName~" = value; return cast(O)this; }
41 
42 auto "~propertyName~"Default() { return _default"~propertyName~"; }
43 void "~propertyName~"Reset() { _"~propertyName~" = _default"~propertyName~"; }
44 void "~propertyName~"Default(bool value) { _default"~propertyName~" = value; }
45 bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); }
46 ";
47 }
48 
49 template StringProperty(string propertyName, string defaultValue = null) {
50 	const char[] StringProperty = "
51 protected string _"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
52 protected string _default"~propertyName~(defaultValue.length > 0 ? " = "~defaultValue : "")~";
53 
54 @property string "~propertyName~"() { return _"~propertyName~"; }
55 @property O "~propertyName~"(this O)(string value) { _"~propertyName~" = value; return cast(O)this; }
56 
57 auto "~propertyName~"Default() { return _default"~propertyName~"; }
58 void "~propertyName~"Reset() { _"~propertyName~" = _default"~propertyName~"; }
59 void "~propertyName~"Default(string value) { _default"~propertyName~" = value; }
60 bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); }
61 ";
62 }
63 
64 template EnumProperty(string dataType, string propertyName, string defaultValue = null) {
65 	const char[] EnumProperty = "
66 protected "~dataType~" _"~propertyName~(defaultValue.length > 0 ? " = "~dataType~"."~defaultValue : "")~";
67 protected "~dataType~" _default"~propertyName~(defaultValue.length > 0 ? " = "~dataType~"."~defaultValue : "")~";
68 
69 @property "~dataType~" "~propertyName~"() { return _"~propertyName~"; }
70 @property O "~propertyName~"(this O)("~dataType~" value) { _"~propertyName~" = value; return cast(O)this; }
71 
72 auto "~propertyName~"Default() { return _default"~propertyName~"; }
73 void "~propertyName~"Reset() { _"~propertyName~" = _default"~propertyName~"; }
74 void "~propertyName~"Default("~dataType~" value) { _default"~propertyName~" = value; }
75 bool "~propertyName~"IsDefault() { return (_"~propertyName~" == _default"~propertyName~"); }
76 ";
77 }