public void DeriveWithSelectorRemoveTwo() { var list = new RxList<string>("1", "2", "3"); var derived = list.Derive(x => int.Parse(x)); list.RemoveRange(new[] { "1", "3" }); Assert.AreEqual(2, derived[0]); }
/*********** One-way binds ***********/ public static ISubscription bind <A>( this RxList <A> list, int max, string maxName, Fn <int, IObservable <Option <A> >, ISubscription> bindObservable ) { var subscription = list.rxSize.subscribe(size => { if (size > max) { throw new Exception(String.Format( "Max {0} {1} are supported in view, " + "but list size was exceeded.", max, maxName )); } }); var enumeration = Enumerable.Range(0, max).Select(i => { var observable = list.rxElement(i); return(bindObservable(i, observable)); }).ToList(); /** Eagerly evaluate to bind **/ return(new Subscription(() => { subscription.unsubscribe(); foreach (var s in enumeration) { s.unsubscribe(); } })); }
private void MapChildrenToDb <TModel, TDatabase>(RxList <TModel> modelObjects, List <TDatabase> dbObjects) where TModel : IdObject where TDatabase : IIdObject, new() { if (modelObjects == null) { return; } foreach (var modelObject in modelObjects) { object dbObjectFromCache; TDatabase dbObject; if (cache.TryGetValue(modelObject, out dbObjectFromCache)) { dbObject = (TDatabase)dbObjectFromCache; } else { dbObject = new TDatabase(); Bind(modelObject, dbObject); dbObjects.Add(dbObject); } MapScalarsToDb(modelObject, dbObject); } }
public void DeriveWithSelectorAdd() { var list = new RxList<string>("1"); var derived = list.Derive(x => int.Parse(x)); list.Add("2"); Assert.AreEqual(1, derived[0]); Assert.AreEqual(2, derived[1]); }
public void DeriveWithSelectorInitialState() { var list = new RxList<string>("1", "2", "3"); var derived = list.Derive(x => int.Parse(x)); Assert.AreEqual(1, derived[0]); Assert.AreEqual(2, derived[1]); Assert.AreEqual(3, derived[2]); }
public void DeriveRemovesOnModified() { var list = new RxList<string>("1", "2", "3"); int removed = -1; list.Derive(x => int.Parse(x), x => removed = x); list[0] = "5"; Assert.AreEqual(1, removed); }
public void DeriveWithSelectorInsertTwo() { var list = new RxList<string>("2"); var derived = list.Derive(x => int.Parse(x)); list.InsertRange(new[] { new RxListItem<string>(0, "1"), new RxListItem<string>(1, "3") }); Assert.AreEqual(1, derived[0]); Assert.AreEqual(2, derived[1]); Assert.AreEqual(3, derived[2]); }
public void DeriveWithSelectorModifyOne() { var list = new RxList<string>("1", "2", "3"); var derived = list.Derive(x => int.Parse(x)); list[1] = "4"; Assert.AreEqual(1, derived[0]); Assert.AreEqual(4, derived[1]); Assert.AreEqual(3, derived[2]); }
public void DeriveWithSelectorModifyTwo() { var list = new RxList<string>("1", "2", "3"); var derived = list.Derive(x => int.Parse(x)); list.ModifyRange(new[] { new RxListItem<string>(0, "4"), new RxListItem<string>(2, "5") }); Assert.AreEqual(4, derived[0]); Assert.AreEqual(2, derived[1]); Assert.AreEqual(5, derived[2]); }
public MainWindowModel(Func<SelectFileType, string, string, string> selectFile) { this.selectFile = selectFile; var canAddChild = this.ObserveProperty(x => x.SelectedItem).Select(x => x is ApiCollectionModel); AddApi = RxFunction.CreateAsync(async () => await OnAddApi(null)); AddApiCollection = RxFunction.CreateAsync(async () => await OnAddApiCollection(null)); AddChildApi = RxFunction.CreateAsync(async () => await OnAddApi((ApiCollectionModel)SelectedItem), canAddChild); AddChildApiCollection = RxFunction.CreateAsync(async () => await OnAddApiCollection((ApiCollectionModel)SelectedItem), canAddChild); Export = RxCommand.Create(OnExport); Import = RxCommand.CreateAsync(OnImport); Title = "Restless"; Items = new RxList<ApiItemModel>(); Methods = httpMethods.ToList(); OutputTypes = outputTypes.ToList(); SplitterPosition = Settings.Default.MainWindowSplitterPosition; ApiSplitterPosition = Settings.Default.ApiPanelSplitterPosition; this.ObservePropertyChange(x => x.SplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x => { Settings.Default.MainWindowSplitterPosition = x; Settings.Default.Save(); }); this.ObservePropertyChange(x => x.ApiSplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x => { Settings.Default.ApiPanelSplitterPosition = x; Settings.Default.Save(); }); ApiItemModel selectedItem = null; this.ObservePropertyChange(x => x.SelectedItem).Subscribe(x => { if (selectedItem != null) selectedItem.IsSelected = false; selectedItem = x; if (selectedItem != null) selectedItem.IsSelected = true; }); Repository = new DbRepository(new RestlessDb()); Task.Run(async () => { await Repository.Initialize(); await Repository.Load(); foreach (var apiItem in Repository.Items) { if (apiItem is Api) Items.Add(new ApiModel(this, null, (Api)apiItem)); else Items.Add(new ApiCollectionModel(this, null, (ApiCollection)apiItem)); } }); DeleteSelectedItem = RxCommand.CreateAsync(OnDeleteSelectedItem); }
public void ItemsRemoved() { var list = new RxList<string>("1", "2", "3", "4"); string[] items = null; list.ItemsRemoved.Subscribe(x => items = x.ToArray()); list.RemoveRange(new[] { "2", "4" }); Assert.AreEqual("2", items[0]); Assert.AreEqual("4", items[1]); }
public void ItemsAdded() { var list = new RxList<string>(); string[] items = null; list.ItemsAdded.Subscribe(x => items = x.ToArray()); list.AddRange(new[] { "1", "2" }); Assert.AreEqual("1", items[0]); Assert.AreEqual("1", list[0]); Assert.AreEqual("2", items[1]); Assert.AreEqual("2", list[1]); }
public static ISubscription bind <A, Control>( this RxList <A> list, int max, string maxName, Fn <int, Control> getControl, Act <Control, A> onChange ) where Control : dfControl { return(list.bind(max, maxName, (i, observable) => { var control = getControl(i); return observable.subscribe(opt => { control.SetIsActive(opt.isDefined); opt.each(v => onChange(control, v)); }); })); }
public void ItemAdded() { var list = new RxList<string>(); string item = null; list.ItemAdded.Subscribe(x => item = x); list.Add("1"); Assert.AreEqual("1", item); Assert.AreEqual("1", list[0]); list.Add("2"); Assert.AreEqual("2", item); Assert.AreEqual("2", list[1]); }
public void Added() { var list = new RxList<string>(); var item = new RxListItem<string>(); list.Added.Subscribe(x => item = x); list.Add("1"); Assert.AreEqual(0, item.Index); Assert.AreEqual("1", item.Value); Assert.AreEqual("1", list[0]); list.Add("2"); Assert.AreEqual(1, item.Index); Assert.AreEqual("2", item.Value); Assert.AreEqual("2", list[1]); }
protected ApiItemModel(MainWindowModel mainWindow, ApiCollectionModel parent, ApiItem item) { MainWindow = mainWindow; Parent = parent; ItemModel = item; Items = new RxList<ApiItemModel>(); this.ObservePropertyChange(x => x.IsSelected).Subscribe(x => { if (x) { var current = Parent; while (current != null) { current.IsExpanded = true; current = current.Parent; } MainWindow.SelectedItem = this; } }); }
public void ItemRemoved() { var list = new RxList<string>("1", "2"); string item = null; list.ItemRemoved.Subscribe(x => item = x); list.Remove("1"); Assert.AreEqual("1", item); list.Remove("2"); Assert.AreEqual("2", item); list = new RxList<string>("1", "2"); list.ItemRemoved.Subscribe(x => item = x); list.Remove("2"); Assert.AreEqual("2", item); list.Remove("1"); Assert.AreEqual("1", item); }
protected ApiItemModel(MainWindowModel mainWindow, ApiCollectionModel parent, ApiItem item) { MainWindow = mainWindow; Parent = parent; ItemModel = item; Items = new RxList <ApiItemModel>(); this.ObservePropertyChange(x => x.IsSelected).Subscribe(x => { if (x) { var current = Parent; while (current != null) { current.IsExpanded = true; current = current.Parent; } MainWindow.SelectedItem = this; } }); }
public static void SetUpSync <TViewModel, TModel>( this RxList <TViewModel> list, DbRepository repository, RxList <TModel> modelList, Func <TViewModel, TModel> newModelObject ) where TViewModel : IIdObject, IRxObject where TModel : IdObject { Action <TViewModel, TModel> bind = (viewModel, model) => { viewModel.Changed.Where(y => y.Property.Name != nameof(IdObject.Id)).Subscribe(y => { model.GetType().GetProperty(y.Property.Name)?.SetValue(model, y.NewValue); }); }; var modelsById = modelList.ToDictionary(x => x.Id); foreach (var item in list) { bind(item, modelsById[item.Id]); } list.ItemAdded.Subscribe(async viewModel => { viewModel.ObservePropertyChange(y => y.Id).SubscribeOnce(y => viewModel.Id = y); var newModel = newModelObject(viewModel); bind(viewModel, newModel); modelList.Add(newModel); await repository.WaitForIdle(); }); list.ItemRemoved.Subscribe(viewModel => { var model = modelList.Single(x => x.Id == viewModel.Id); modelList.Remove(model); }); }
public void MoveDifferentItem() { var list = new RxList<int>(1, 2, 3); list.Move(1, 2); Assert.AreEqual(2, list[2]); }
public void MovedItem() { var list = new RxList<string>("1a", "2a"); var item = new RxListMovedItem<string>(); list.Moved.Subscribe(x => item = x); list.Move(1, "1a"); Assert.AreEqual(0, item.FromIndex); Assert.AreEqual(1, item.ToIndex); Assert.AreEqual("1a", item.Value); Assert.AreEqual("2a", list[0]); Assert.AreEqual("1a", list[1]); }
public void MoveSameItem() { var list = new RxList<int>(1, 2, 3); list.Move(2, 2); Assert.AreEqual(3, list[2]); }
static RxGroupListForm() { RxGroupListForm.data = new RxList(); }
public void RangeRemoved() { var list = new RxList<string>("1", "2", "3", "4"); RxListItem<string>[] items = null; list.RangeRemoved.Subscribe(x => items = x.ToArray()); list.RemoveRange(new[] { "2", "4" }); Assert.AreEqual(1, items[0].Index); Assert.AreEqual("2", items[0].Value); Assert.AreEqual(3, items[1].Index); Assert.AreEqual("4", items[1].Value); Assert.AreEqual("1", list[0]); Assert.AreEqual("3", list[1]); }
public void Modified() { var list = new RxList<string>("1a", "2a"); var item = new RxListModifiedItem<string>(); list.Modified.Subscribe(x => item = x); list[1] = "2b"; Assert.AreEqual(1, item.Index); Assert.AreEqual("2a", item.OldValue); Assert.AreEqual("2b", item.NewValue); }
public void Removed() { var list = new RxList<string>("1", "2"); var item = new RxListItem<string>(); list.Removed.Subscribe(x => item = x); list.Remove("1"); Assert.AreEqual(0, item.Index); Assert.AreEqual("1", item.Value); list.Remove("2"); Assert.AreEqual(0, item.Index); Assert.AreEqual("2", item.Value); list = new RxList<string>("1", "2"); list.Removed.Subscribe(x => item = x); list.Remove("2"); Assert.AreEqual(1, item.Index); Assert.AreEqual("2", item.Value); list.Remove("1"); Assert.AreEqual(0, item.Index); Assert.AreEqual("1", item.Value); }
public void DeriveRemovesOnRemoved() { var list = new RxList<string>("1", "2", "3"); int removed = -1; list.Derive(x => int.Parse(x), x => removed = x); list.Remove("2"); Assert.AreEqual(2, removed); }
public MainWindowModel(Func <SelectFileType, string, string, string> selectFile) { this.selectFile = selectFile; var canAddChild = this.ObserveProperty(x => x.SelectedItem).Select(x => x is ApiCollectionModel); AddApi = RxFunction.CreateAsync(async() => await OnAddApi(null)); AddApiCollection = RxFunction.CreateAsync(async() => await OnAddApiCollection(null)); AddChildApi = RxFunction.CreateAsync(async() => await OnAddApi((ApiCollectionModel)SelectedItem), canAddChild); AddChildApiCollection = RxFunction.CreateAsync(async() => await OnAddApiCollection((ApiCollectionModel)SelectedItem), canAddChild); Export = RxCommand.Create(OnExport); Import = RxCommand.CreateAsync(OnImport); Title = "Restless"; Items = new RxList <ApiItemModel>(); Methods = httpMethods.ToList(); OutputTypes = outputTypes.ToList(); SplitterPosition = Settings.Default.MainWindowSplitterPosition; ApiSplitterPosition = Settings.Default.ApiPanelSplitterPosition; this.ObservePropertyChange(x => x.SplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x => { Settings.Default.MainWindowSplitterPosition = x; Settings.Default.Save(); }); this.ObservePropertyChange(x => x.ApiSplitterPosition).Throttle(TimeSpan.FromSeconds(1)).Subscribe(x => { Settings.Default.ApiPanelSplitterPosition = x; Settings.Default.Save(); }); ApiItemModel selectedItem = null; this.ObservePropertyChange(x => x.SelectedItem).Subscribe(x => { if (selectedItem != null) { selectedItem.IsSelected = false; } selectedItem = x; if (selectedItem != null) { selectedItem.IsSelected = true; } }); Repository = new DbRepository(new RestlessDb()); Task.Run(async() => { await Repository.Initialize(); await Repository.Load(); foreach (var apiItem in Repository.Items) { if (apiItem is Api) { Items.Add(new ApiModel(this, null, (Api)apiItem)); } else { Items.Add(new ApiCollectionModel(this, null, (ApiCollection)apiItem)); } } }); DeleteSelectedItem = RxCommand.CreateAsync(OnDeleteSelectedItem); }
public void ObserveElement() { var one = new TestModel { StringProperty = "1" }; var two = new TestModel { StringProperty = "2" }; var list = new RxList<TestModel>(one, two); string s = null; list.ObserveElementProperty(x => x.StringProperty).Subscribe(x => s = x.Value); list[0].StringProperty = "foo"; Assert.AreEqual("foo", s); list.Remove(one); one.StringProperty = "bar"; Assert.AreEqual("foo", s); list[0] = new TestModel { StringProperty = "3" }; Assert.AreEqual("3", s); }
public ApiModel(MainWindowModel mainWindow, ApiCollectionModel parent, Api api) : base(mainWindow, parent, api) { Inputs = new RxList <ApiInputModel>(); Outputs = new RxList <ApiOutputModel>(); Headers = new RxList <ApiHeaderModel>(); SubscribeForInputs(this.ObservePropertyChange(x => x.Model.Url), () => Model.Url, ApiInputType.Url); SubscribeForInputs(this.ObservePropertyChange(x => x.Model.Body).Where(x => ContentTypes.IsText(ContentType)), () => Model.Body, ApiInputType.Body); SubscribeForInputs(this.ObservePropertyChange(x => x.Headers).SelectMany(x => x.ObserveElementProperty(y => y.Name)).Merge(this.ObservePropertyChange(x => x.Headers).SelectMany(x => x.ObserveElementProperty(y => y.Value))), () => string.Join("\n", Headers.Select(x => x.Name + "=" + x.Value)), ApiInputType.Header); Model = api; if (api.Inputs != null) { Inputs.AddRange(api.Inputs.Select(x => new ApiInputModel { Id = x.Id, Name = x.Name, DefaultValue = x.DefaultValue, InputType = x.InputType })); } if (api.Outputs != null) { Outputs.AddRange(api.Outputs.Select(x => new ApiOutputModel { Id = x.Id, Name = x.Name, Expression = x.Expression, Type = x.Type })); } if (api.Headers != null) { Headers.AddRange(api.Headers.Select(x => new ApiHeaderModel { Id = x.Id, Name = x.Name, Value = x.Value })); } Send = RxCommand.CreateAsync(OnSend); Reset = RxCommand.Create(OnReset); Inputs.SetUpSync( MainWindow.Repository, Model.Inputs, x => new ApiInput { Name = x.Name, DefaultValue = "", InputType = x.InputType }); Outputs.SetUpSync( MainWindow.Repository, Model.Outputs, x => new ApiOutput { Name = x.Name, Expression = "" }); Headers.SetUpSync( MainWindow.Repository, Model.Headers, _ => new ApiHeader { Name = "", Value = "" }); }
private void Awake() { notifications = new RxList <Notification>(); }