diff options
author | Araq <rumpf_a@web.de> | 2012-01-08 11:07:23 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-01-08 11:07:23 +0100 |
commit | a42a5e8e7cd84a1e0f5f44b3d2a488842a019529 (patch) | |
tree | fe584fb9b6d0dd5fe06019a12d07648782f906d7 /tests/compile | |
parent | f8721ed20e93fc09ae95469f981cfa7fd0a807f4 (diff) | |
download | Nim-a42a5e8e7cd84a1e0f5f44b3d2a488842a019529.tar.gz |
disabled tdatabind.nim as it's still to heavy for the compiler
Diffstat (limited to 'tests/compile')
-rw-r--r-- | tests/compile/tdatabind.nim | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/compile/tdatabind.nim b/tests/compile/tdatabind.nim new file mode 100644 index 000000000..b2e870d93 --- /dev/null +++ b/tests/compile/tdatabind.nim @@ -0,0 +1,95 @@ +discard """ + disabled: true +""" + +import events +type + TProperty*[T] = object of TObject + getProc: proc(property: TProperty[T]): T + setProc: proc(property: var TProperty[T], value: T) + value: T + ValueChanged*: TEventHandler + Binders: seq[TProperty[T]] + EEmitter: TEventEmitter + # Not a descriptive name but it was that or TPropertyValueChangeEventArgs. + TValueEventArgs[T] = object of TEventArgs + Property*: TProperty[T] + + +proc newProperty*[T](value: T): TProperty[T] = + var prop: TProperty[T] + + prop.EEmitter = initEventEmitter() + prop.Binders = @[] + prop.ValueChanged = initEventHandler("ValueChanged") + prop.value = value + + proc getter(property: TProperty[T]): T = + return property.value + + prop.getProc = getter + + proc setter(property: var TProperty[T], v: T) = + property.value = v + + # fire event here + var args: TValueEventArgs[T] + args.Property = property + property.EEmitter.emit(property.ValueChanged, args) + + prop.setProc = setter + + return prop + +proc `prop`[T] (p: TProperty[T]): T = + # I'm assuming this is trying to get a value from the property. + # i.e. myVar = myProperty + return p.getProc(p) + +proc `~=`[T] (p: var TProperty[T], v: T) = + # Assuming this is setting the value. + p.setProc(p, v) + +proc `$`[T] (p: TProperty[T]): string = + var value = p.getProc(p) + return $value + +proc propertyBind*[T](p1: var TProperty[T], p2: var TProperty[T]) = + p1.Binders.add(p2) + + # make handler -> handler[T] so trigger even more generics bugs ... + proc handler(e: TEventArgs) = + type TEA = TValueEventArgs[T] + var args = TEA(e) + var val = args.Property.getProc(p1) + for i in countup(0, len(e.Property.ValueChanged.Binders) -1): + var binded = e.Property.ValueChanged.Binders[i] + binded.setProc(binded, val) + + echo("Property 1 has changed to " & $val) + + if p1.ValueChanged.containsHandler(handler) == false: + addHandler(p1.ValueChanged, handler) + +proc `->`[T](p1: var TProperty[T], p2: var TProperty[T]) = + propertyBind(p2,p1) + +when isMainModule: + # Initial value testing + var myProp = newProperty(5) + + echo(myProp) + + myProp ~= 7 # Temp operator until overloading of '=' is implemented. + echo(myProp) + + # Binding testing + + var prop1 = newProperty(9) + var prop2: TProperty[int] + + prop2 -> prop1 # Binds prop2 to prop1 + + prop1 ~= 7 + echo(prop2) # Output: 7 + |