private void OnWorldUpdated(IWorldTreeUpdatedEvent evnt) { if (disabled) { return; } var message = evnt.AmMessage; if (message.Obj <WorldHolder>().ValueChanged(x => x.World, out _) || message.Obj <IWorld>().ItemAddedOrRemoved(x => x.Scenes, out _) || message.Obj <IScene>().ValueChanged(x => x.Root, out _)) { //var cArgs = (AmValueChangedEventMessage<WorldModel, IWorld>)message; RebuildFromRoot(); treeView.RefreshItem(rootItem); } else if (message.Obj <ISceneNode>().ItemAdded(x => x.ChildNodes, out var childAddedMsg)) { var item = TryCreateNodeItem(childAddedMsg.Item); if (item == null) { return; } var parentItem = itemIndex[childAddedMsg.Item.ParentNode]; parentItem.Children.Insert(childAddedMsg.Object.ChildNodes.IndexOf(childAddedMsg.Item), item); treeView.RefreshItem(parentItem); } else if (message.Obj <ISceneNode>().ItemRemoved(x => x.ChildNodes, out var childRemovedMsg)) { if (!itemIndex.TryGetValue(childRemovedMsg.Item, out var item)) { return; } foreach (var node in childRemovedMsg.Item.EnumerateSceneNodesDeep()) { itemIndex.Remove(node); } var parentItem = (TreeItem)item.Parent; parentItem.Children.Remove(item); treeView.RefreshItem(parentItem); } else if (message.Obj <ISceneNode>().ValueChanged(x => x.Name, out var nameChangedMsg)) { var item = itemIndex[nameChangedMsg.Object]; item.Text = nameChangedMsg.Object.Name; treeView.RefreshItem(item); } }
private void OnWorldUpdated(IWorldTreeUpdatedEvent evnt) { if (InsideTransaction) { return; } var message = evnt.AmMessage; if (message.Obj <WorldHolder>().ValueChanged(x => x.World, out _) || message.Obj <IWorld>().ItemAddedOrRemoved(x => x.Scenes, out _) || message.Obj <IScene>().ValueChanged(x => x.Root, out _)) { if (worldTreeService.MainRoot != null) { OnWorldRootChanged(worldTreeService.MainRoot); } } else if (message.Obj <ISceneNode>().ItemAdded(x => x.ChildNodes, out var subtreeAddedMessage)) { if (subtreeAddedMessage.Item.HasComponent <IStoryComponent>()) { OnStoryNodeAdded(subtreeAddedMessage.Object, subtreeAddedMessage.Item); } } else if (message.Obj <ISceneNode>().ItemRemoved(x => x.ChildNodes, out var subtreeRemovedMessage)) { if (subtreeRemovedMessage.Item.HasComponent <IStoryComponent>()) { OnStoryNodeRemoved(subtreeRemovedMessage.Object, subtreeRemovedMessage.Item); } } // todo: to StoryAspect.IsLayoutTypeChangedEvent(message) else if (message.Obj <StoryComponent>().ValueChanged(x => x.StartLayoutType, out var layoutTypeChangedMessage)) { OnLayoutTypeChanged(layoutTypeChangedMessage.Object.Node, layoutTypeChangedMessage.NewValue); } }
private void OnWorldTreeUpdated(IWorldTreeUpdatedEvent evnt) => HasUnsavedChanges = true;