Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
 private void OnWorldTreeUpdated(IWorldTreeUpdatedEvent evnt) =>
 HasUnsavedChanges = true;