private void OnItemAdded(ThemeEditorTreeViewItem item) { var disposables = new CompositeDisposable(); // Observe item name. var theme = _palette.Themes[item.ThemeId]; item.Name.Skip(1).Subscribe(x => { var oldValue = theme.Name.Value; _editService.Edit($"Set {typeof(T).Name} Theme Name {theme.Id}", () => theme.Name.Value = x, () => theme.Name.Value = oldValue, markAsIdOrNameDirty: true); }).DisposeWith(disposables); // Observe IsActive property. item.IsActive.Skip(1).Subscribe(x => { if (!x) { return; } var oldActiveTheme = _palette.ActiveTheme.Value; _editService.Edit($"Set {typeof(T).Name} Active Theme {item.ThemeId}", () => _palette.SetActiveTheme(item.ThemeId), () => _palette.SetActiveTheme(oldActiveTheme.Id)); }).DisposeWith(disposables); _perItemDisposables.Add(item.id, disposables); }
private void ItemIndexChanged(ThemeEditorTreeViewItem item, int index) { var oldIndex = _palette.GetThemeOrder(item.ThemeId); _editService.Edit($"Change {typeof(T).Name} Theme Index {item.ThemeId}", () => _palette.SetThemeOrder(item.ThemeId, index), () => { _palette.SetThemeOrder(item.ThemeId, oldIndex); _view.TreeView.SetItemIndex(item, oldIndex, false); _view.TreeView.Reload(); }, markAsIdOrNameDirty: true); }