public VisualScriptEditorViewModel(IVisualScriptViewModelService visualScriptViewModelService, VisualScriptViewModel visualScript) : base(visualScript) { // Create the service needed to manage observable view models ViewModelService = new GraphViewModelService(Session.AssetNodeContainer); // Update the service provider of this view model to contains the ObservableViewModelService we created. ServiceProvider = new ViewModelServiceProvider(ServiceProvider, ViewModelService.Yield()); VisualScriptViewModelService = visualScriptViewModelService; blockTemplateDescriptionCollection = new Lazy <BlockTemplateDescriptionCollectionViewModel>(() => new BlockTemplateDescriptionCollectionViewModel(this)); AddNewPropertyCommand = new AnonymousCommand(ServiceProvider, AddNewProperty); RemoveSelectedPropertiesCommand = new AnonymousCommand(ServiceProvider, RemoveSelectedProperties); //ShowAddBlockDialogCommand = new AnonymousTaskCommand(ServiceProvider, ShowAddBlockDialog); AddNewMethodCommand = new AnonymousCommand(ServiceProvider, AddNewMethod); RemoveSelectedMethodCommand = new AnonymousCommand(ServiceProvider, RemoveSelectedFunction); var rootNode = Session.AssetNodeContainer.GetNode(visualScript.Asset); baseTypeNodeBinding = new MemberGraphNodeBinding <string>(rootNode[nameof(VisualScriptAsset.BaseType)], nameof(BaseType), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); propertiesNode = rootNode[nameof(VisualScriptAsset.Properties)]; }
public GraphicsCompositorCameraSlotsViewModel([NotNull] GraphicsCompositorEditorViewModel editor, SceneCameraSlot cameraSlot) : base(editor) { CameraSlot = cameraSlot; cameraSlotNode = editor.Session.AssetNodeContainer.GetOrCreateNode(cameraSlot); nameNodeBinding = new MemberGraphNodeBinding <string>(cameraSlotNode[nameof(CameraSlot.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService); }
/// <summary> /// Initializes a new instance of the <see cref="SpriteInfoViewModel"/> class. /// </summary> /// <param name="editor">The <see cref="SpriteSheetEditorViewModel"/> containing this image.</param> /// <param name="sprite">The <see cref="SpriteInfo"/> represented by this view model.</param> public SpriteInfoViewModel(SpriteSheetEditorViewModel editor, SpriteInfo sprite) : base(editor.SafeArgument(nameof(editor)).ServiceProvider) { Editor = editor; Id = new AbsoluteId(editor.Asset.Id, Guid.NewGuid()); this.sprite = sprite; Index = -1; // Retrieve nodes var spriteNode = editor.Asset.Session.AssetNodeContainer.GetOrCreateNode(sprite); var nameNode = spriteNode[nameof(SpriteInfo.Name)]; // TODO: dispose this! var sourceNode = spriteNode[nameof(SpriteInfo.Source)]; sourceNode.ValueChanged += SourceValueChanged; var textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)]; // Create bindings nameNodeBinding = new MemberGraphNodeBinding <string>(nameNode, nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService); sourceNodeBinding = new MemberGraphNodeBinding <UFile>(sourceNode, nameof(Source), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService); UpdateSourceFileWatcher(); // Initialize view models and commands SpriteBorders = new SpriteBordersViewModel(this, spriteNode); SpriteCenter = new SpriteCenterViewModel(this, spriteNode); TextureRegion = new TextureRegionViewModel(this, textureRegionNode); EditImageCommand = new AnonymousTaskCommand(ServiceProvider, EditImage); ExploreCommand = new AnonymousTaskCommand(ServiceProvider, Explore); }
public EntityViewModel([NotNull] EntityHierarchyEditorViewModel editor, [NotNull] EntityHierarchyViewModel asset, [NotNull] EntityDesign entityDesign) : base(editor, asset, GetOrCreateChildPartDesigns((EntityHierarchyAssetBase)asset.Asset, entityDesign), entityDesign.Entity) { if (entityDesign.Entity == null) { throw new ArgumentException(@"entity must contain a non-null asset entity.", nameof(entityDesign)); } EntityDesign = entityDesign; var assetNode = Editor.NodeContainer.GetOrCreateNode(entityDesign.Entity); nameNodeBinding = new MemberGraphNodeBinding <string>(assetNode[nameof(Entity.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService); componentsNodeBinding = new ObjectGraphNodeBinding <EntityComponentCollection>(assetNode[nameof(Entity.Components)].Target, nameof(Components), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService, false); modelComponent = new ModelComponentViewModel(ServiceProvider, this); particleComponent = new ParticleSystemComponentViewModel(ServiceProvider, this); cameraComponent = new CameraComponentViewModel(ServiceProvider, this); transformationNode = Editor.NodeContainer.GetNode(AssetSideEntity.Transform)[nameof(TransformComponent.Children)].Target; transformationNode.ItemChanging += TransformChildrenChanging; transformationNode.ItemChanged += TransformChildrenChanged; RenameCommand = new AnonymousCommand(ServiceProvider, () => IsEditing = true); FocusOnEntityCommand = new AnonymousCommand(ServiceProvider, FocusOnEntity); UpdateSourcePrefab(); var basePrefabNode = Editor.NodeContainer.GetNode(EntityDesign)[nameof(EntityDesign.Base)]; basePrefabNode.ValueChanged += BasePrefabChanged; }
public RenderStageViewModel([NotNull] GraphicsCompositorEditorViewModel editor, RenderStage renderStage) : base(editor) { RenderStage = renderStage; renderStageNode = editor.Session.AssetNodeContainer.GetOrCreateNode(renderStage); nameNodeBinding = new MemberGraphNodeBinding <string>(renderStageNode[nameof(RenderStage.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService); effectSlotNodeBinding = new MemberGraphNodeBinding <string>(renderStageNode[nameof(RenderStage.EffectSlotName)], nameof(EffectSlotName), OnPropertyChanging, OnPropertyChanged, editor.UndoRedoService); }
public UIElementFromLibrary(IViewModelServiceProvider serviceProvider, UILibraryViewModel library, Guid id) : base(serviceProvider) { this.library = library; Id = id; var node = library.Session.AssetNodeContainer.GetNode(library.Asset)[nameof(UILibraryAsset.PublicUIElements)]; nameBinding = new MemberGraphNodeBinding <Dictionary <Guid, string> >(node, nameof(Name), OnPropertyChanging, OnPropertyChanged, library.UndoRedoService); }
public SpriteBordersViewModel(SpriteInfoViewModel sprite, IObjectNode spriteNode) : base(sprite) { textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)]; textureRegionNode.ValueChanged += OnTextureRegionValueChanged; var spriteBordersNode = spriteNode[nameof(SpriteInfo.Borders)]; borderBinding = new MemberGraphNodeBinding <Vector4>(spriteBordersNode, nameof(Borders), OnPropertyChanging, OnPropertyChanged, UndoRedoService); DependentProperties.Add(nameof(Borders), new[] { nameof(ActualBorders) }); DependentProperties.Add(nameof(ScaleFactor), new[] { nameof(ActualBorders) }); }
public VisualScriptMethodViewModel(VisualScriptViewModel visualScript, Method method) : base(visualScript.ServiceProvider) { this.visualScript = visualScript; this.method = method; var methodNode = visualScript.Session.AssetNodeContainer.GetOrCreateNode(method); blocksContent = methodNode[nameof(method.Blocks)].Target; linksContent = methodNode[nameof(method.Links)].Target; parametersContent = methodNode[nameof(method.Parameters)].Target; // Create bindings accessibilityNodeBinding = new MemberGraphNodeBinding <Accessibility>(methodNode[nameof(method.Accessibility)], nameof(Accessibility), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); virtualModifierNodeBinding = new MemberGraphNodeBinding <VirtualModifier>(methodNode[nameof(method.VirtualModifier)], nameof(VirtualModifier), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); isStaticNodeBinding = new MemberGraphNodeBinding <bool>(methodNode[nameof(method.IsStatic)], nameof(IsStatic), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); nameNodeBinding = new MemberGraphNodeBinding <string>(methodNode[nameof(method.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); returnTypeNodeBinding = new MemberGraphNodeBinding <string>(methodNode[nameof(method.ReturnType)], nameof(ReturnType), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); }
public SpriteCenterViewModel(SpriteInfoViewModel sprite, IObjectNode spriteNode) : base(sprite) { var spriteCenterNode = spriteNode[nameof(SpriteInfo.Center)]; spriteCenterNodeBinding = new MemberGraphNodeBinding <Vector2>(spriteCenterNode, nameof(Center), OnPropertyChanging, OnPropertyChanged, UndoRedoService); var centerFromMiddleNode = spriteNode[nameof(SpriteInfo.CenterFromMiddle)]; centerFromMiddleBinding = new MemberGraphNodeBinding <bool>(centerFromMiddleNode, nameof(CenterFromMiddle), OnPropertyChanging, OnPropertyChanged, UndoRedoService); var textureRegionNode = spriteNode[nameof(SpriteInfo.TextureRegion)]; textureRegionBinding = new MemberGraphNodeBinding <Rectangle>(textureRegionNode, nameof(ActualCenter), OnPropertyChanging, OnPropertyChanged, UndoRedoService); DependentProperties.Add(nameof(Center), new[] { nameof(ActualCenter) }); DependentProperties.Add(nameof(CenterFromMiddle), new[] { nameof(ActualCenter) }); DependentProperties.Add(nameof(ScaleFactor), new[] { nameof(ActualCenter) }); }
public SpriteSheetEditorViewModel([NotNull] SpriteSheetViewModel spriteSheet) : base(spriteSheet) { Viewport = new ViewportViewModel(ServiceProvider); // Commands DisplaySpriteSheetPropertiesCommand = new AnonymousCommand(ServiceProvider, DisplaySpriteSheetProperties); RemoveImageCommand = new AnonymousCommand(ServiceProvider, RemoveSelectedImages); SelectNextSpriteCommand = new AnonymousCommand <int>(ServiceProvider, SelectNextSprite); MoveImageCommand = new AnonymousCommand <int>(ServiceProvider, MoveImage); AddNewImageCommand = new AnonymousCommand(ServiceProvider, AddNewImage); UseWholeImageCommand = new AnonymousCommand(ServiceProvider, UseWholeImage); FocusOnRegionCommand = new AnonymousCommand(ServiceProvider, FocusOnRegion); DuplicateSelectedImagesCommand = new AnonymousCommand(ServiceProvider, DuplicateSelectedImages); CopyImageCommand = new AnonymousCommand(ServiceProvider, CopyImages, CanCopyImages); PasteImageCommand = new AnonymousCommand(ServiceProvider, PasteImages, () => pasteMonitor.Get(CanPasteImages)); FindSpriteRegionCommand = new AnonymousCommand <WindowsPoint>(ServiceProvider, FindSpriteRegion); ToggleSelectionHighlightCommand = new AnonymousCommand(ServiceProvider, () => SelectionHighlightEnabled = !SelectionHighlightEnabled); ToggleToolModeCommand = new AnonymousCommand <SpriteSheetEditorToolMode>(ServiceProvider, ToggleToolMode); ToggleUseMagicWandCommand = new AnonymousCommand(ServiceProvider, () => ToggleToolMode(SpriteSheetEditorToolMode.MagicWand)); SelectedSprites = new ObservableList <object>(); SelectedSprites.CollectionChanged += SelectedImagesCollectionChanged; ServiceProvider.Get <SelectionService>().RegisterSelectionScope(id => Sprites.FirstOrDefault(x => x.Id == id), obj => (obj as SpriteInfoViewModel)?.Id, SelectedSprites); sprites = new ObservableList <SpriteInfoViewModel>(Asset.Asset.Sprites.Select((x, i) => new SpriteInfoViewModel(this, x) { Index = i })); Sprites.CollectionChanged += ImageCollectionChanged; DependentProperties.Add(nameof(ToolMode), new[] { nameof(UsingPixelTool) }); magicWandUseTransparency = !Asset.Asset.ColorKeyEnabled; var rootNode = Session.AssetNodeContainer.GetNode(spriteSheet.Asset); spritesNode = rootNode[nameof(SpriteSheetAsset.Sprites)].Target; colorKeyNodeBinding = new MemberGraphNodeBinding <Color>(rootNode[nameof(SpriteSheetAsset.ColorKeyColor)], nameof(ColorKey), OnPropertyChanging, OnPropertyChanged, UndoRedoService); colorKeyEnabledNodeBinding = new MemberGraphNodeBinding <bool>(rootNode[nameof(SpriteSheetAsset.ColorKeyEnabled)], nameof(ColorKeyEnabled), OnPropertyChanging, OnPropertyChanged, UndoRedoService); typeNodeBinding = new MemberGraphNodeBinding <SpriteSheetType>(rootNode[nameof(SpriteSheetAsset.Type)], nameof(Type), OnPropertyChanging, OnPropertyChanged, UndoRedoService); // TODO: dispose this spritesNode.ItemChanged += SpritesContentChanged; }
protected KeyFrameControlPointViewModel([NotNull] CurveViewModelBase curve, [NotNull] IMemberNode keyNode, [NotNull] IMemberNode valueNode, [NotNull] IMemberNode tangentTypeNode) : base(curve) { if (keyNode == null) { throw new ArgumentNullException(nameof(keyNode)); } if (valueNode == null) { throw new ArgumentNullException(nameof(valueNode)); } if (tangentTypeNode == null) { throw new ArgumentNullException(nameof(tangentTypeNode)); } keyBinding = CreateBinding <float>(keyNode, nameof(Key)); ValueBinding = CreateBinding <TValue>(valueNode, nameof(Value)); tangentTypeBinding = CreateBinding <AnimationKeyTangentType>(tangentTypeNode, nameof(TangentType)); }
protected UIElementViewModel([NotNull] UIEditorBaseViewModel editor, [NotNull] UIBaseViewModel asset, [NotNull] UIElementDesign elementDesign, [CanBeNull] IEnumerable <UIElementDesign> children) : base(editor, asset, children) { AssetSideUIElement = elementDesign.UIElement; ElementType = AssetSideUIElement.GetType(); UIElementDesign = elementDesign; var assetNode = editor.NodeContainer.GetOrCreateNode(elementDesign.UIElement); nameNodeBinding = new MemberGraphNodeBinding <string>(assetNode[nameof(UIElement.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService); propagator = new GameEditorChangePropagator <UIElementDesign, UIElement, UIElementViewModel>(Editor, this, elementDesign.UIElement); PanelCommand = new AnonymousCommand <PanelCommandMode>(ServiceProvider, PanelCommandImpl); RenameCommand = new AnonymousCommand(ServiceProvider, () => IsEditing = true); UpdateSourceLibrary(); var basePrefabNode = Editor.NodeContainer.GetNode(UIElementDesign)[nameof(UIElementDesign.Base)]; basePrefabNode.ValueChanged += BaseElementChanged; }
public SceneRootViewModel([NotNull] SceneEditorViewModel editor, [NotNull] SceneViewModel scene, AsyncLock loadMutex) : base(editor, scene, "Scene root") { this.loadMutex = loadMutex; sceneId = Guid.NewGuid(); foreach (var childScene in scene.Children) { var child = new SceneRootViewModel(editor, childScene, loadMutex) { Parent = this }; childScenes.Add(child); } AddItems(ChildScenes); scene.Children.CollectionChanged += SceneChildrenCollectionChanged; var offsetNode = Editor.NodeContainer.GetNode(scene.Asset)[nameof(scene.Asset.Offset)]; offsetNodeBinding = new MemberGraphNodeBinding <Vector3>(offsetNode, nameof(Offset), OnPropertyChanging, OnPropertyChanged, Editor.UndoRedoService); LoadSettings().Forget(); }