using Standard; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using System.Windows.Input; using System.Windows.Threading; using System.Xml.Linq; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Header; using static VideoConcat.Models.VideoModel; namespace VideoConcat.Models { /// /// 抽帧处理方式 /// public enum ExtractFrameMode { DeleteFrame = 0, // 删除帧 AddTransparentImage = 1 // 添加透明图 } /// /// 处理任务信息(用于表格显示) /// public class ExtractTaskItem : INotifyPropertyChanged { private string _index = ""; private string _fileName = ""; private string _fullFileName = ""; private string _status = ""; private string _originalSize = ""; private string _outputSize = ""; private string _sizeChange = ""; private string _duration = ""; private string _progress = ""; public string Index { get => _index; set { _index = value; OnPropertyChanged(); } } public string FileName { get => _fileName; set { _fileName = value; OnPropertyChanged(); } } /// /// 完整文件名(用于ToolTip显示) /// public string FullFileName { get => _fullFileName; set { _fullFileName = value; OnPropertyChanged(); } } public string Status { get => _status; set { _status = value; OnPropertyChanged(); } } public string OriginalSize { get => _originalSize; set { _originalSize = value; OnPropertyChanged(); } } public string OutputSize { get => _outputSize; set { _outputSize = value; OnPropertyChanged(); } } public string SizeChange { get => _sizeChange; set { _sizeChange = value; OnPropertyChanged(); } } public string Duration { get => _duration; set { _duration = value; OnPropertyChanged(); } } public string Progress { get => _progress; set { _progress = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class ExtractWindowModel : INotifyPropertyChanged { private string _folderPath = ""; private string _helpInfo = ""; private bool _canExtractFrame = false; private bool _canModify = false; private bool _isCanOperate = false; private bool _isStart = false; private string[] _videos = []; private int _extractCount = 1; private Dispatcher _dispatcher; private ExtractFrameMode _extractFrameMode = ExtractFrameMode.DeleteFrame; private ObservableCollection _taskItems = new(); public string[] videos { get => _videos; set { _videos = value; OnPropertyChanged(); } } public bool IsCanOperate { get => _isCanOperate; set { _isCanOperate = value; OnPropertyChanged(); } } public bool IsStart { get => _isStart; set { _isStart = value; OnPropertyChanged(); } } public Dispatcher Dispatcher { get => _dispatcher; set { _dispatcher = value; } } public class VideoStruct { public int Index { set; get; } public string FileName { set; get; } = ""; public string Size { set; get; } = ""; public int Seconds { set; get; } public string Status { set; get; } = ""; public string Progress { set; get; } = ""; } public string FolderPath { get { return _folderPath; } set { _folderPath = value; OnPropertyChanged(nameof(FolderPath)); } } public string HelpInfo { get { return _helpInfo; } set { _helpInfo = value; OnPropertyChanged(); } } public bool CanExtractFrame { get { return _canExtractFrame; } set { _canExtractFrame = value; OnPropertyChanged(nameof(CanExtractFrame)); } } public bool CanModify { get { return _canModify; } set { _canModify = value; OnPropertyChanged(nameof(CanModify)); } } public ICommand? BtnOpenFolderCommand { get; set; } public ICommand? BtnStartVideoConcatCommand { get; set; } public ICommand? BtnStartVideoModifyCommand { get; set; } public ICommand? BtnChooseAuditImageCommand { get; set; } public event PropertyChangedEventHandler? PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public ExtractWindowModel() { _dispatcher = Dispatcher.CurrentDispatcher; } public int ExtractCount { get => _extractCount; set { _extractCount = value; OnPropertyChanged(); SetCanStart(); } } public ExtractFrameMode ExtractFrameMode { get => _extractFrameMode; set { _extractFrameMode = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsDeleteFrameMode)); OnPropertyChanged(nameof(IsAddTransparentImageMode)); } } /// /// 是否选择删除帧模式(用于RadioButton绑定) /// public bool IsDeleteFrameMode { get => _extractFrameMode == ExtractFrameMode.DeleteFrame; set { if (value && _extractFrameMode != ExtractFrameMode.DeleteFrame) { ExtractFrameMode = ExtractFrameMode.DeleteFrame; } } } /// /// 是否选择添加透明图模式(用于RadioButton绑定) /// public bool IsAddTransparentImageMode { get => _extractFrameMode == ExtractFrameMode.AddTransparentImage; set { if (value && _extractFrameMode != ExtractFrameMode.AddTransparentImage) { ExtractFrameMode = ExtractFrameMode.AddTransparentImage; } } } /// /// 抽帧按钮的文本(固定显示"操作") /// public string ExtractButtonText { get { return "操作"; } } /// /// 任务列表(用于表格显示) /// public ObservableCollection TaskItems { get => _taskItems; set { _taskItems = value; OnPropertyChanged(); } } public void SetCanStart() { // 有视频文件且生成个数大于0时,可以抽帧 CanExtractFrame = videos.Length > 0 && _extractCount > 0; // 有视频文件时可以修改 if (videos.Length > 0) { CanModify = true; } else { CanModify = false; } } } }