Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }