Browse Source

Moved SetterSubject.

pull/4/head
grokys 12 years ago
parent
commit
93f63fd8ff
  1. 70
      Perspex/Setter.cs
  2. 6
      Perspex/Style.cs

70
Perspex/Setter.cs

@ -12,39 +12,6 @@ namespace Perspex
using System.Reactive.Disposables;
using Perspex.Controls;
internal class SetterSubject : IObservable<object>
{
private Control control;
private object onValue;
private object offValue;
private List<IObserver<object>> observers;
public SetterSubject(Control control, object onValue, object offValue)
{
this.control = control;
this.onValue = onValue;
this.offValue = offValue;
this.observers = new List<IObserver<object>>();
}
public IDisposable Subscribe(IObserver<object> observer)
{
observers.Add(observer);
return Disposable.Create(() => this.observers.Remove(observer));
}
public void Push(bool on)
{
foreach (IObserver<object> o in this.observers)
{
o.OnNext(on ? this.onValue : this.offValue);
}
}
}
public class Setter
{
private object oldValue;
@ -61,10 +28,43 @@ namespace Perspex
set;
}
internal SetterSubject CreateSubject(Control control)
internal Subject CreateSubject(Control control)
{
object oldValue = control.GetValue(this.Property);
return new SetterSubject(control, this.Value, oldValue);
return new Subject(control, this.Value, oldValue);
}
internal class Subject : IObservable<object>
{
private Control control;
private object onValue;
private object offValue;
private List<IObserver<object>> observers;
public Subject(Control control, object onValue, object offValue)
{
this.control = control;
this.onValue = onValue;
this.offValue = offValue;
this.observers = new List<IObserver<object>>();
}
public IDisposable Subscribe(IObserver<object> observer)
{
observers.Add(observer);
return Disposable.Create(() => this.observers.Remove(observer));
}
public void Push(bool on)
{
foreach (IObserver<object> o in this.observers)
{
o.OnNext(on ? this.onValue : this.offValue);
}
}
}
}
}

6
Perspex/Style.cs

@ -52,11 +52,11 @@ namespace Perspex
match = match.Previous;
}
List<SetterSubject> subjects = new List<SetterSubject>();
List<Setter.Subject> subjects = new List<Setter.Subject>();
foreach (Setter setter in this.Setters)
{
SetterSubject subject = setter.CreateSubject(control);
Setter.Subject subject = setter.CreateSubject(control);
subjects.Add(subject);
control.SetValue(setter.Property, subject);
}
@ -65,7 +65,7 @@ namespace Perspex
{
bool on = x.All(y => y);
foreach (SetterSubject subject in subjects)
foreach (Setter.Subject subject in subjects)
{
subject.Push(on);
}

Loading…
Cancel
Save