"""
This example demonstrates how props can set each-other without
getting into an infinite loop.
"""
from flexx import event
class Temperature(event.HasEvents):
    """ Temperature object with a settable prop for both Celcius and
    Fahrenheit.
    """
    @event.prop
    def C(self, t=0):
        t = float(t)
        self.F = t * 1.8 + 32
        return t
    @event.prop
    def F(self, t=0):
        t = float(t)
        self.C = (t - 32) / 1.8
        return t
    @event.connect('C', 'F')
    def on_temp_change(self, *events):
        # This gets called once with two events when either C or F is changed.
        print('  temp in Celcius: %1.1f C' % self.C)
        print('  temp in Fahrenheit: %1.1f F' % self.F)
t = Temperature()
print('Water if freezing:')
t.C = 0
print('Average annual temp in California')
t.F = 59.4
event.loop.iter()