using System; using System.Text.Json.Serialization; using Avalonia.Controls; using CommunityToolkit.Mvvm.ComponentModel; using StabilityMatrix.Avalonia.Models; using StabilityMatrix.Avalonia.ViewModels.Base; using StabilityMatrix.Core.Models.FileInterfaces; #pragma warning disable CS0657 // Not a valid attribute location for this declaration namespace StabilityMatrix.Avalonia.ViewModels.Inference; public abstract partial class InferenceTabViewModelBase : LoadableViewModelBase, IDisposable, IPersistentViewProvider { /// /// The title of the tab /// public virtual string TabTitle => ProjectFile?.NameWithoutExtension ?? "New Project"; /// /// Whether there are unsaved changes /// [ObservableProperty] [property: JsonIgnore] private bool hasUnsavedChanges; /// /// The tab's project file /// [ObservableProperty] [NotifyPropertyChangedFor(nameof(TabTitle))] [property: JsonIgnore] private FilePath? projectFile; /// Control? IPersistentViewProvider.AttachedPersistentView { get; set; } protected virtual void Dispose(bool disposing) { if (disposing) { ((IPersistentViewProvider) this).AttachedPersistentView = null; } } /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } }