コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
 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);
 }
コード例 #5
0
ファイル: EditorViewModel.cs プロジェクト: sibeansa/xenko
        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;
        }
コード例 #6
0
 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"
     });
 }
コード例 #7
0
 public PackageTemplateViewModel(IViewModelServiceProvider serviceProvider, TemplateDescription template, SessionViewModel session = null)
     : base(serviceProvider, template)
 {
     this.session         = session;
     UpdatePackageCommand = new AnonymousTaskCommand(ServiceProvider, UpdatePackage)
     {
         IsEnabled = session != null
     };
 }
コード例 #8
0
 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);
 }
コード例 #9
0
        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) });
        }
コード例 #10
0
 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
     };
 }
コード例 #11
0
 /// <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);
 }
コード例 #12
0
        /// <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;
        }
コード例 #13
0
ファイル: SettingsViewModel.cs プロジェクト: Aggror/Stride
        /// <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();
        }
コード例 #14
0
 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);
 }
コード例 #15
0
 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));
 }
コード例 #16
0
 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();
 }
コード例 #17
0
        /// <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);
        }
コード例 #18
0
        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);
            });
        }
コード例 #19
0
ファイル: LauncherViewModel.cs プロジェクト: sibeansa/xenko
        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();
        }
コード例 #20
0
 /// <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();
 }
コード例 #21
0
 protected ProjectTemplateCollectionViewModel(IViewModelServiceProvider serviceProvider)
     : base(serviceProvider)
 {
     BrowseDirectoryCommand = new AnonymousTaskCommand <string>(serviceProvider, BrowseDirectory);
 }
コード例 #22
0
 public DocumentationPageViewModel(IViewModelServiceProvider serviceProvider, string version)
     : base(serviceProvider)
 {
     Version        = version;
     OpenUrlCommand = new AnonymousTaskCommand(ServiceProvider, OpenUrl);
 }
コード例 #23
0
 public NewsPageViewModel(IViewModelServiceProvider serviceProvider)
     : base(serviceProvider)
 {
     OpenUrlCommand = new AnonymousTaskCommand(ServiceProvider, OpenUrl);
 }