public BarViewModel() : base(new BarEntryModel[0]) { Types = new EnumModel <Bar.EntryType>(); NewCommand = new RelayCommand(x => { FileName = "untitled.bar"; Items.Clear(); MotionsetType = 0; }, x => true); OpenCommand = new RelayCommand(x => { FileDialog.OnOpen(fileName => { OpenFileName(fileName); FileName = fileName; }, Filters); }, x => true); SaveCommand = new RelayCommand(x => { if (!string.IsNullOrEmpty(FileName)) { SaveToFile(FileName); } else { SaveAsCommand.Execute(x); } }, x => true); SaveAsCommand = new RelayCommand(x => { FileDialog.OnSave(fileName => { SaveToFile(fileName); }, Filters, Path.GetFileName(FileName)); }, x => true); ExitCommand = new RelayCommand(x => { Window.Close(); }, x => true); AboutCommand = new RelayCommand(x => { new AboutDialog(Assembly.GetExecutingAssembly()).ShowDialog(); }, x => true); OpenItemCommand = new RelayCommand(x => { try { var tempFileName = SaveToTempraryFile(); switch (ToolsLoaderService.OpenTool(FileName, tempFileName, SelectedItem.Entry)) { case Common.ToolInvokeDesc.ContentChangeInfo.File: ReloadFromTemporaryFile(tempFileName); break; } } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } OnPropertyChanged(nameof(SelectedItem)); }, x => true); ExportCommand = new RelayCommand(x => { var defaultFileName = GetSuggestedFileName(SelectedItem.Entry); FileDialog.OnSave(fileName => { using var fStream = File.OpenWrite(fileName); SelectedItem.Entry.Stream.Position = 0; SelectedItem.Entry.Stream.CopyTo(fStream); }, Filters, defaultFileName); }, x => IsItemSelected); ExportAllCommand = new RelayCommand(x => { FileDialog.OnFolder(folder => { foreach (var item in Items.Select(item => item.Entry)) { var fileName = GetSuggestedFileName(item); using var fStream = File.OpenWrite(Path.Combine(folder, fileName)); item.Stream.Position = 0; item.Stream.CopyTo(fStream); } }); }, x => true); ImportCommand = new RelayCommand(x => { FileDialog.OnOpen(fileName => { var fStream = File.OpenRead(fileName); var memStream = new MemoryStream((int)fStream.Length); fStream.CopyTo(memStream); SelectedItem.Entry.Stream = memStream; OnPropertyChanged(nameof(SelectedItem)); }, Filters); }, x => IsItemSelected); }
public BarViewModel(IEnumerable <BarEntryModel> list) : base(list) { Types = new EnumModel <Bar.EntryType>(); OpenCommand = new RelayCommand(x => { var fd = FileDialog.Factory(Window, FileDialog.Behavior.Open, FileDialog.Type.Any); if (fd.ShowDialog() == true) { using (var stream = File.Open(fd.FileName, FileMode.Open)) { FileName = fd.FileName; Items.Clear(); foreach (var item in Bar.Read(stream)) { Items.Add(new BarEntryModel(item)); } } } }, x => true); SaveCommand = new RelayCommand(x => { if (!string.IsNullOrEmpty(FileName)) { using (var stream = File.Open(FileName, FileMode.Create)) { Bar.Write(stream, Items.Select(item => item.Entry)); } } else { SaveAsCommand.Execute(x); } }, x => true); SaveAsCommand = new RelayCommand(x => { var fd = FileDialog.Factory(Window, FileDialog.Behavior.Save, FileDialog.Type.Any); if (fd.ShowDialog() == true) { using (var stream = File.Open(fd.FileName, FileMode.Create)) { Bar.Write(stream, Items.Select(item => item.Entry)); } } }, x => true); ExitCommand = new RelayCommand(x => { Window.Close(); }, x => true); AboutCommand = new RelayCommand(x => { new AboutDialog(Assembly.GetExecutingAssembly()).ShowDialog(); }, x => true); OpenItemCommand = new RelayCommand(x => { try { ToolsLoaderService.OpenTool(SelectedItem.Entry.Stream, SelectedItem.Type); } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } OnPropertyChanged(nameof(SelectedItem)); }, x => true); ExportCommand = new RelayCommand(x => { var fd = FileDialog.Factory(Window, FileDialog.Behavior.Save); fd.DefaultFileName = $"{SelectedItem.Entry.Name}.bin"; if (fd.ShowDialog() == true) { using (var fStream = File.OpenWrite(fd.FileName)) { SelectedItem.Entry.Stream.Position = 0; SelectedItem.Entry.Stream.CopyTo(fStream); } } }, x => IsItemSelected); ExportAllCommand = new RelayCommand(x => { var fd = FileDialog.Factory(Window, FileDialog.Behavior.Folder); if (fd.ShowDialog() == true) { var basePath = fd.FileName; foreach (var item in Items.Select(item => item.Entry)) { var fileName = $"{item.Name}.bin"; using (var fStream = File.OpenWrite(Path.Combine(basePath, fileName))) { item.Stream.Position = 0; item.Stream.CopyTo(fStream); } } } }, x => true); ImportCommand = new RelayCommand(x => { var fd = FileDialog.Factory(Window, FileDialog.Behavior.Open); if (fd.ShowDialog() == true) { using (var fStream = File.OpenRead(fd.FileName)) { var memStream = new MemoryStream((int)fStream.Length); fStream.CopyTo(memStream); SelectedItem.Entry.Stream = memStream; } OnPropertyChanged(nameof(SelectedItem.Size)); } }, x => IsItemSelected); SearchCommand = new RelayCommand(x => { }, x => false); }