Skip to content

Commit faef3b8

Browse files
committed
WIP review asset/directory/package view models management
1 parent 44adeb0 commit faef3b8

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

sources/editor/Stride.Core.Assets.Editor/ViewModels/AssetCollectionViewModel.CopyPaste.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ public static List<AssetViewModel> PasteAssetsIntoPackage(PackageViewModel packa
344344
var assetDirectory = project == null ?
345345
package.GetOrCreateAssetDirectory(location) :
346346
project.GetOrCreateProjectDirectory(location);
347-
var assetViewModel = package.CreateAsset(asset, assetDirectory);
347+
var assetViewModel = package.CreateAsset(asset, assetDirectory, true);
348348
viewModels.Add(assetViewModel);
349349
}
350350

sources/editor/Stride.Core.Assets.Presentation/ViewModels/AssetViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ protected AssetViewModel(ConstructorParameters parameters)
5757
PropertyGraph.Changed += AssetPropertyChanged;
5858
PropertyGraph.ItemChanged += AssetPropertyChanged;
5959
}
60+
// Add to directory after asset node has been created, so that listener to directory changes can retrieve it
61+
directory.AddAsset(this, parameters.CanUndoRedoCreation);
6062
Initializing = false;
6163
}
6264

sources/editor/Stride.Core.Assets.Presentation/ViewModels/DirectoryBaseViewModel.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,19 @@ public DirectoryBaseViewModel GetOrCreateDirectory(string path)
8787
return result;
8888
}
8989

90-
internal void AddAsset(AssetViewModel asset)
90+
internal void AddAsset(AssetViewModel asset, bool canUndoRedo)
9191
{
92-
assets.Add(asset);
92+
if (canUndoRedo)
93+
{
94+
assets.Add(asset);
95+
}
96+
else
97+
{
98+
using (SuspendNotificationForCollectionChange(nameof(Assets)))
99+
{
100+
assets.Add(asset);
101+
}
102+
}
93103
}
94104

95105
internal void RemoveAsset(AssetViewModel asset)

sources/editor/Stride.Core.Assets.Presentation/ViewModels/PackageViewModel.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,7 @@ public void LoadPackageInformation(IProgressViewModel? progressVM, ref double pr
136136
{
137137
directory = GetOrCreateAssetDirectory(url.GetFullDirectory());
138138
}
139-
var assetViewModel = CreateAsset(asset, directory);
140-
directory.AddAsset(assetViewModel);
141-
139+
CreateAsset(asset, directory, false);
142140
progress++;
143141
}
144142

@@ -197,7 +195,7 @@ private static int ComparePackageContent(ViewModelBase x, ViewModelBase y)
197195
}
198196

199197
// FIXME xplat-editor: most method here should be moved to an utility in the editor project (asset project should have minimum capability)
200-
public AssetViewModel CreateAsset(AssetItem assetItem, DirectoryBaseViewModel directory, ILogger? logger = null)
198+
public AssetViewModel CreateAsset(AssetItem assetItem, DirectoryBaseViewModel directory, bool canUndoRedoCreation, ILogger? logger = null)
201199
{
202200
AssetCollectionItemIdHelper.GenerateMissingItemIds(assetItem.Asset);
203201
Session.GraphContainer.InitializeAsset(assetItem, logger);
@@ -206,7 +204,7 @@ public AssetViewModel CreateAsset(AssetItem assetItem, DirectoryBaseViewModel di
206204
{
207205
assetViewModelType = assetViewModelType.MakeGenericType(assetItem.Asset.GetType());
208206
}
209-
return (AssetViewModel)Activator.CreateInstance(assetViewModelType, new ConstructorParameters(assetItem, directory, false))!;
207+
return (AssetViewModel)Activator.CreateInstance(assetViewModelType, new ConstructorParameters(assetItem, directory, canUndoRedoCreation))!;
210208
}
211209

212210
private void FillRootAssetCollection()

0 commit comments

Comments
 (0)