/// <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 NewOrOpenSessionTemplateCollectionViewModel(IViewModelServiceProvider serviceProvider, IModalDialog dialog) : base(serviceProvider) { this.dialog = dialog; rootGroup = new TemplateDescriptionGroupViewModel(serviceProvider, "New project"); // Add a default General group var defaultGroup = new TemplateDescriptionGroupViewModel(rootGroup, "General"); foreach (TemplateDescription template in TemplateManager.FindTemplates(TemplateScope.Session)) { var viewModel = new PackageTemplateViewModel(serviceProvider, template); var group = ProcessGroup(rootGroup, template.Group) ?? defaultGroup; group.Templates.Add(viewModel); } recentGroup = new TemplateDescriptionGroupViewModel(serviceProvider, "Recent projects"); var mru = EditorViewModel.Instance.MRU; foreach (var file in mru.MostRecentlyUsedFiles) { var viewModel = new ExistingProjectViewModel(ServiceProvider, file.FilePath); recentGroup.Templates.Add(viewModel); } Location = InternalSettings.TemplatesWindowDialogLastNewSessionTemplateDirectory.GetValue(); if (string.IsNullOrWhiteSpace(Location)) { Location = UPath.Combine <UDirectory>(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Xenko Projects"); } BrowseForExistingProjectCommand = new AnonymousTaskCommand(serviceProvider, BrowseForExistingProject); SelectedGroup = rootGroup; }
/// <summary> /// Initializes a new instance of the <see cref="EntityHierarchyEditorViewModel"/> class. /// </summary> /// <param name="asset">The asset related to this editor.</param> /// <param name="controllerFactory">A factory to create the associated <see cref="IEditorGameController"/>.</param> protected EntityHierarchyEditorViewModel([NotNull] EntityHierarchyViewModel asset, [NotNull] Func <GameEditorViewModel, IEditorGameController> controllerFactory) : base(asset, controllerFactory) { Controller.Loader.AssetLoading += (s, e) => asset.Dispatcher.InvokeAsync(() => CompilingAssets = e.ContentLoadingCount > 0); Controller.Loader.AssetLoaded += (s, e) => asset.Dispatcher.InvokeAsync(() => CompilingAssets = e.ContentLoadingCount > 0); Camera = new EditorCameraViewModel(ServiceProvider, Controller); Transform = new EntityTransformationViewModel(ServiceProvider, Controller); Grid = new EditorGridViewModel(ServiceProvider, Controller); Navigation = new EditorNavigationViewModel(ServiceProvider, Controller, this); Lighting = new EditorLightingViewModel(ServiceProvider, Controller, this); Rendering = new EditorRenderingViewModel(ServiceProvider, Controller); EntityGizmos = new EntityGizmosViewModel(ServiceProvider, Controller); CreateEntityCommand = new AnonymousTaskCommand <IEntityFactory>(ServiceProvider, x => CreateEntity(true, x, ActiveRoot ?? HierarchyRoot)); CreateEntityInRootCommand = new AnonymousTaskCommand <IEntityFactory>(ServiceProvider, x => CreateEntity(false, x, ActiveRoot ?? HierarchyRoot)); CreateFolderInRootCommand = new AnonymousCommand <IEntityFactory>(ServiceProvider, x => CreateFolder(HierarchyRoot.Asset, ActiveRoot ?? HierarchyRoot, true)); CreateEntityInSelectionCommand = new AnonymousTaskCommand <IEntityFactory>(ServiceProvider, x => CreateEntity(false, x, (EntityHierarchyItemViewModel)SelectedContent.FirstOrDefault() ?? ActiveRoot ?? HierarchyRoot)); CreateFolderInSelectionCommand = new AnonymousCommand <IEntityFactory>(ServiceProvider, x => { var element = (EntityHierarchyItemViewModel)SelectedContent.FirstOrDefault() ?? ActiveRoot ?? HierarchyRoot; CreateFolder(element.Asset, element, true); }); OpenPrefabEditorCommand = new AnonymousCommand(ServiceProvider, OpenPrefabEditor); SelectPrefabCommand = new AnonymousCommand(ServiceProvider, SelectPrefab); SetActiveRootCommand = new AnonymousCommand(ServiceProvider, SetActiveRoot); BreakLinkToPrefabCommand = new AnonymousCommand(ServiceProvider, BreakLinkToPrefab); CreatePrefabFromSelectionCommand = new AnonymousCommand(ServiceProvider, CreatePrefabFromSelection); UpdateCommands(); debugPage = new DebugEntityHierarchyEditorUserControl(this); EditorDebugTools.RegisterDebugPage(debugPage); }
public AssetSourcesViewModel(AssetViewModel asset) : base(asset.SafeArgument(nameof(asset)).ServiceProvider) { this.asset = asset; UpdateFromSourceCommand = new AnonymousTaskCommand(ServiceProvider, UpdateAssetFromSource); updatedHashes = SourceHashesHelper.GetAllHashes(asset.Asset); currentSourceFiles.AddRange(updatedHashes.Keys); }
protected EditorViewModel(IViewModelServiceProvider serviceProvider, MostRecentlyUsedFileCollection mru, string editorName) : base(serviceProvider) { AssetsPlugin.RegisterPlugin(typeof(AssetsEditorPlugin)); serviceProvider.Get <IEditorDialogService>(); ClearMRUCommand = new AnonymousCommand(serviceProvider, () => MRU.Clear()); OpenSettingsWindowCommand = new AnonymousCommand(serviceProvider, OpenSettingsWindow); OpenWebPageCommand = new AnonymousTaskCommand <string>(serviceProvider, OpenWebPage); #if DEBUG DebugCommand = new AnonymousCommand(serviceProvider, DebugFunction); #endif MRU = mru; MRU.MostRecentlyUsedFiles.CollectionChanged += MostRecentlyUsedFiles_CollectionChanged; UpdateRecentFiles(); serviceProvider.Get <IEditorDialogService>().RegisterDefaultTemplateProviders(); EditorName = editorName; if (Instance != null) { throw new InvalidOperationException("The EditorViewModel class can be instanced only once."); } Status = new StatusViewModel(ServiceProvider); Status.PushStatus("Ready"); Instance = this; }
public SpriteFontViewModel(AssetViewModelConstructionParameters parameters) : base(parameters) { GeneratePrecompiledFontCommand = new AnonymousTaskCommand(ServiceProvider, GeneratePrecompiledFont); assetCommands.Add(new MenuCommandInfo(ServiceProvider, GeneratePrecompiledFontCommand) { DisplayName = "Generate precompiled font", Tooltip = "Generate precompiled font" }); }
public PackageTemplateViewModel(IViewModelServiceProvider serviceProvider, TemplateDescription template, SessionViewModel session = null) : base(serviceProvider, template) { this.session = session; UpdatePackageCommand = new AnonymousTaskCommand(ServiceProvider, UpdatePackage) { IsEnabled = session != null }; }
protected ReferenceReplacementViewModel(FixReferencesViewModel <T> fixReferences, T objectToFix, T referencer, object referencedMember) : base(fixReferences.SafeArgument(nameof(fixReferences)).ServiceProvider) { this.fixReferences = fixReferences; this.referencedMember = referencedMember; Referencer = referencer; ObjectToFix = objectToFix; PickupReplacementObjectCommand = new AnonymousTaskCommand(fixReferences.ServiceProvider, PickupReplacementObject); }
protected EntityHierarchyElementViewModel([NotNull] EntityHierarchyEditorViewModel editor, [NotNull] EntityHierarchyViewModel asset, [NotNull] IEnumerable <EntityDesign> childEntities, object assetSideInstance) : base(editor, asset, childEntities) { this.assetSideInstance = assetSideInstance; LoadCommand = new AnonymousTaskCommand <bool>(ServiceProvider, recursive => RequestLoading(!IsLoaded, recursive)); LockCommand = new AnonymousTaskCommand <bool>(ServiceProvider, recursive => RequestLocking(!IsLocked, recursive)); DependentProperties.Add(nameof(IsLoaded), new[] { nameof(IsSelectable) }); DependentProperties.Add(nameof(IsLocked), new[] { nameof(IsSelectable) }); }
internal VsixVersionViewModel(LauncherViewModel launcher, NugetStore store, string packageId) : base(launcher, store, null) { this.packageId = packageId; status = FormatStatus(Strings.ReportChecking); ExecuteActionCommand = new AnonymousTaskCommand(ServiceProvider, ExecuteAction) { IsEnabled = false }; }
/// <summary> /// Initializes a new instance of the <see cref="FixReferencesViewModel{T}"/> class. /// </summary> /// <param name="serviceProvider">The service provider for this view model.</param> /// <param name="dialog">The dialog shown to fix references. Can be null for unattended usage.</param> protected FixReferencesViewModel(IViewModelServiceProvider serviceProvider, IFixReferencesDialog dialog) : base(serviceProvider) { this.dialog = dialog; CurrentReplacements = new ObservableList <ReferenceReplacementViewModel <T> >(); PickupSingleReplacementObjectCommand = new AnonymousTaskCommand(serviceProvider, PickupSingleReplacementObject); FixReferencesCommand = new AnonymousCommand(serviceProvider, () => FixReferences()); ClearReferencesCommand = new AnonymousCommand(serviceProvider, () => ClearReferences()); ClearAllReferencesCommand = new AnonymousCommand(serviceProvider, ClearAllReferences); }
/// <summary> /// Initializes a new instance of the <see cref="AssetCompositeHierarchyEditorViewModel{TAssetPartDesign,TAssetPart,TItemViewModel}"/> class. /// </summary> /// <param name="asset">The asset related to this editor.</param> /// <param name="controllerFactory">A factory to create the associated <see cref="IEditorGameController"/>.</param> protected AssetCompositeHierarchyEditorViewModel([NotNull] AssetCompositeHierarchyViewModel <TAssetPartDesign, TAssetPart> asset, [NotNull] Func <GameEditorViewModel, IEditorGameController> controllerFactory) : base(asset, controllerFactory) { CopyCommand = new AnonymousCommand(ServiceProvider, Copy, CanCopy); CutCommand = new AnonymousCommand(ServiceProvider, Cut, CanCut); DeleteCommand = new AnonymousTaskCommand(ServiceProvider, Delete, CanDelete); DuplicateSelectionCommand = new AnonymousCommand(ServiceProvider, () => DuplicateSelection()); PasteCommand = new AnonymousTaskCommand <bool>(ServiceProvider, Paste, CanPaste); SelectedContent.CollectionChanged += SelectedContentCollectionChanged; SelectedItems.CollectionChanged += SelectedItemsCollectionChanged; }
/// <summary> /// Initializes a new instance of the <see cref="SettingsViewModel"/> class. /// </summary> /// <param name="serviceProvider">A service provider that can provide a <see cref="IDispatcherService"/> and an <see cref="IDialogService"/> to use for this view model.</param> /// <param name="profile">The profile associated </param> public SettingsViewModel([NotNull] IViewModelServiceProvider serviceProvider, SettingsProfile profile) : base(serviceProvider, new AssetNodeContainer()) { var viewModelService = ServiceProvider.Get <GraphViewModelService>(); RegisterNodePresenterUpdater(new SettingsPropertyNodeUpdater()); ServiceProvider = new ViewModelServiceProvider(serviceProvider, viewModelService.Yield()); ValidateChangesCommand = new AnonymousTaskCommand(serviceProvider, ValidateChanges); DiscardChangesCommand = new AnonymousCommand(serviceProvider, DiscardChanges); Profile = profile; Initialize(); }
public AssetSourceTrackerViewModel(IViewModelServiceProvider serviceProvider, PackageSession packageSession, SessionViewModel session) : base(serviceProvider) { this.session = packageSession; sessionViewModel = session; UpdateSelectedAssetsFromSourceCommand = new AnonymousTaskCommand(ServiceProvider, UpdateSelectedAssetsFromSource); UpdateAllAssetsWithModifiedSourceCommand = new AnonymousTaskCommand(ServiceProvider, UpdateAllAssetsWithModifiedSource) { IsEnabled = false }; // This task will listen to the AssetSourceTracker for source file change notifications and collect them Dispatcher.InvokeTask(PullSourceFileChanges); }
public GameStudioViewModel([NotNull] IViewModelServiceProvider serviceProvider, MostRecentlyUsedFileCollection mru) : base(serviceProvider, mru, StrideGameStudio.EditorName, StrideGameStudio.EditorVersionMajor) { Panels = new EditionPanelViewModel(ServiceProvider); availableIDEs = new List <IDEInfo> { VisualStudioVersions.DefaultIDE }; availableIDEs.AddRange(VisualStudioVersions.AvailableVisualStudioInstances); NewSessionCommand = new AnonymousCommand(serviceProvider, RestartAndCreateNewSession); OpenAboutPageCommand = new AnonymousCommand(serviceProvider, OpenAboutPage); OpenSessionCommand = new AnonymousTaskCommand <UFile>(serviceProvider, RestartAndOpenSession); ReloadSessionCommand = new AnonymousTaskCommand(serviceProvider, () => RestartAndOpenSession(Session.SessionFilePath)); }
internal RecentProjectViewModel(LauncherViewModel launcher, UFile path) : base(launcher.SafeArgument(nameof(launcher)).ServiceProvider) { Name = path.GetFileNameWithoutExtension(); Launcher = launcher; fullPath = path; XenkoVersionName = Strings.ReportDiscovering; OpenCommand = new AnonymousTaskCommand(ServiceProvider, () => OpenWith(null)) { IsEnabled = false }; OpenWithCommand = new AnonymousTaskCommand <XenkoVersionViewModel>(ServiceProvider, OpenWith); ExploreCommand = new AnonymousCommand(ServiceProvider, Explore); CompatibleVersions = new ObservableList <XenkoVersionViewModel>(); DiscoverXenkoVersion(); }
/// <summary> /// Initializes a new instance of the <see cref="EditorNavigationViewModel"/> class. /// </summary> /// <param name="serviceProvider">The service provider for this view model.</param> /// <param name="controller">The controller object for the related editor game.</param> public EditorLightingViewModel([NotNull] IViewModelServiceProvider serviceProvider, [NotNull] IEditorGameController controller, [NotNull] EntityHierarchyEditorViewModel editor) : base(serviceProvider) { if (controller == null) { throw new ArgumentNullException(nameof(controller)); } if (editor == null) { throw new ArgumentNullException(nameof(editor)); } this.controller = controller; this.editor = editor; RequestLightProbesComputeCommand = new AnonymousTaskCommand(ServiceProvider, () => RebuildLightProbes(LightProbeBounces)); RequestLightProbesResetCommand = new AnonymousTaskCommand(ServiceProvider, () => RebuildLightProbes(0)); CaptureCubemapCommand = new AnonymousTaskCommand(ServiceProvider, CaptureCubemap); }
public DebuggingViewModel(GameStudioViewModel editor, IDebugService debugService) : base(editor.SafeArgument(nameof(editor)).ServiceProvider) { this.editor = editor; this.debugService = debugService; outputTitle = outputTitleBase; BuildLog = new BuildLogViewModel(ServiceProvider); LiveScriptingLog = new LoggerViewModel(ServiceProvider); LiveScriptingLog.AddLogger(assemblyReloadLogger); BuildProjectCommand = new AnonymousTaskCommand(ServiceProvider, () => BuildProject(false)); StartProjectCommand = new AnonymousTaskCommand(ServiceProvider, () => BuildProject(true)); CancelBuildCommand = new AnonymousCommand(ServiceProvider, () => { currentBuild?.Cancel(); }); LivePlayProjectCommand = new AnonymousTaskCommand(ServiceProvider, LivePlayProject); ReloadAssembliesCommand = new AnonymousTaskCommand(ServiceProvider, ReloadAssemblies) { IsEnabled = false }; ResetOutputTitleCommand = new AnonymousCommand(ServiceProvider, () => OutputTitle = outputTitleBase); modifiedAssemblies = new Dictionary <PackageLoadedAssembly, ModifiedAssembly>(); trackAssemblyChanges = true; assemblyTrackingCancellation = new CancellationTokenSource(); // Create script resolver scriptsSorter = new ScriptSourceCodeResolver(); ServiceProvider.RegisterService(scriptsSorter); assemblyReloadLogger.MessageLogged += (sender, e) => Dispatcher.InvokeAsync(() => OutputTitle = outputTitleBase + '*'); editor.Session.PropertyChanged += SessionPropertyChanged; UpdateCommands(); Task.Run(async() => { var watcher = await editor.StrideAssets.Code.ProjectWatcher; await scriptsSorter.Initialize(editor.Session, watcher, assemblyTrackingCancellation.Token); PullAssemblyChanges(watcher); }); }
internal LauncherViewModel(IViewModelServiceProvider serviceProvider, NugetStore store) : base(serviceProvider) { if (store == null) { throw new ArgumentNullException(nameof(store)); } DependentProperties.Add("ActiveVersion", new[] { "ActiveDocumentationPages" }); this.store = store; store.Logger = this; DisplayReleaseAnnouncement(); VsixPackage = new VsixVersionViewModel(this, store); // Commands InstallLatestVersionCommand = new AnonymousTaskCommand(ServiceProvider, InstallLatestVersion) { IsEnabled = false }; OpenUrlCommand = new AnonymousTaskCommand <string>(ServiceProvider, OpenUrl); ReconnectCommand = new AnonymousTaskCommand(ServiceProvider, async() => { // We are back online (or so we think) IsOffline = false; await FetchOnlineData(); }); StartStudioCommand = new AnonymousTaskCommand(ServiceProvider, StartStudio) { IsEnabled = false }; foreach (var devVersion in LauncherSettings.DeveloperVersions) { var version = new XenkoDevVersionViewModel(this, store, null, devVersion, false); xenkoVersions.Add(version); } FetchOnlineData().Forget(); LoadRecentProjects(); uninstallHelper = new UninstallHelper(serviceProvider, store); GameStudioSettings.RecentProjectsUpdated += (sender, e) => Dispatcher.InvokeAsync(LoadRecentProjects).Forget(); }
/// <summary> /// Initializes a new instance of the <see cref="PackageVersionViewModel"/> class. /// </summary> /// <param name="launcher">The parent <see cref="LauncherViewModel"/> instance.</param> /// <param name="store">The related <see cref="NugetStore"/> instance.</param> /// <param name="localPackage">The local package of this version, if a local package exists.</param> internal PackageVersionViewModel(LauncherViewModel launcher, NugetStore store, NugetLocalPackage localPackage) : base(launcher.SafeArgument("launcher").ServiceProvider) { if (launcher == null) { throw new ArgumentNullException(nameof(launcher)); } if (store == null) { throw new ArgumentNullException(nameof(store)); } Launcher = launcher; Store = store; LocalPackage = localPackage; DownloadCommand = new AnonymousCommand(ServiceProvider, () => Download(true)); DeleteCommand = new AnonymousTaskCommand(ServiceProvider, () => Delete(true, true)) { IsEnabled = CanDelete }; UpdateStatusInternal(); }
protected ProjectTemplateCollectionViewModel(IViewModelServiceProvider serviceProvider) : base(serviceProvider) { BrowseDirectoryCommand = new AnonymousTaskCommand <string>(serviceProvider, BrowseDirectory); }
public DocumentationPageViewModel(IViewModelServiceProvider serviceProvider, string version) : base(serviceProvider) { Version = version; OpenUrlCommand = new AnonymousTaskCommand(ServiceProvider, OpenUrl); }
public NewsPageViewModel(IViewModelServiceProvider serviceProvider) : base(serviceProvider) { OpenUrlCommand = new AnonymousTaskCommand(ServiceProvider, OpenUrl); }