private void ItemIndexChanged(PaletteEditorTreeViewItem <T> item, int index) { var oldIndex = _palette.GetEntryOrder(item.EntryId); _editService.Edit($"Change {typeof(T).Name} Entry Index {item.EntryId}", () => _palette.SetEntryOrder(item.EntryId, index), () => { _palette.SetEntryOrder(item.EntryId, oldIndex); _view.TreeView.SetItemIndex(item, oldIndex, false); _view.TreeView.Reload(); }, markAsIdOrNameDirty: true); }
private void OnItemAdded(PaletteEditorTreeViewItem <T> item) { var disposables = new CompositeDisposable(); disposables.DisposeWith(_disposables); // Observe item name. var entry = _palette.Entries[item.EntryId]; item.Name.Skip(1).Subscribe(x => { var oldValue = entry.Name.Value; _editService.Edit($"Set {typeof(T).Name} Entry Name {entry.Id}", () => entry.Name.Value = x, () => entry.Name.Value = oldValue, markAsIdOrNameDirty: true); }).DisposeWith(disposables); // Observe item values. void ObserveItemValue(KeyValuePair <string, ObservableProperty <T> > value) { var themeId = value.Key; value.Value.Skip(1).Subscribe(x => { var oldValue = entry.Values[themeId].Value; _editService.Edit($"Set {typeof(T).Name} Entry Value {entry.Id}", () => { entry.Values[themeId].Value = x; }, () => { entry.Values[themeId].Value = oldValue; }); }).DisposeWith(disposables); } foreach (var value in item.Values) { ObserveItemValue(value); } item.Values.ObservableAdd .Subscribe(value => { ObserveItemValue(new KeyValuePair <string, ObservableProperty <T> >(value.Key, value.Value)); }).DisposeWith(disposables); // Observe apply button clicks. item.ApplyButtonClickedAsObservable.Subscribe(_ => { OpenRegisterEntryIdMenu(item.EntryId); }) .DisposeWith(disposables); _perItemDisposables.Add(item.id, disposables); }