public void Should_save_query_components()
        {
            Db.Reset();
            ComponentsStorage.Save(new[]
            {
                new CircuitComponent
                {
                    PartName = "DIP8",
                    Data     = File.ReadAllBytes(@"Data\DIP8.sldprt")
                },
                new CircuitComponent
                {
                    PartName = "Diode0_4",
                    Data     = File.ReadAllBytes(@"Data\Diode0_4.sldprt")
                }
            });

            var components = ComponentsStorage.AllComponents();

            components.Should().HaveCount(2);
            var dip8 = components.First(x => x.PartName == "DIP8");

            dip8.Data.Should().NotBeEmpty();
        }
        public ComponentsViewModel()
        {
            Components = new ObservableCollection <CircuitComponent>();
            foreach (var component in ComponentsStorage.AllComponents())
            {
                Components.Add(component);
            }
            AddExistingCommand = new ActionCommand(() =>
            {
                StartProgress();

                var editor = GenericEdit.Create(new CircuitComponent(), component =>
                {
                    Components.Add(component);
                    SaveCorpuses();
                });

                editor.ShowDialog();

                CompleteProgress();
            });

            AddDIPCommand = new ActionCommand(() =>
            {
                StartProgress();

                var editor = GenericEdit.Create(new DipCorpus {
                    PinCount = 8, CorpusWidthMm = 6.0
                }, async corpus =>
                {
                    var component = await Task.Run(() =>
                    {
                        var builder = new DipBuilder(new SwContext());
                        return(builder.BuildComponent(corpus));
                    });
                    Components.Add(component);
                    SaveCorpuses();
                });

                editor.ShowDialog();

                CompleteProgress();
            });

            EditCommand = new ActionCommand <CircuitComponent>(item =>
            {
                StartProgress();

                //var editor = new EditDip(item, () =>
                //{
                //    SaveCorpuses();
                //});
                //editor.ShowDialog();

                CompleteProgress();
            });

            RemoveCommand = new ActionCommand <CircuitComponent>(item =>
            {
                StartProgress();

                Components.Remove(item);
                SaveCorpuses();

                CompleteProgress();
            });

            GenerateCommand = new ActionCommand <CircuitComponent>(item =>
            {
                StartProgress();

                var editor = GenericEdit.Create(new PlaceSpec(), async place =>
                {
                    await Task.Run(() =>
                    {
                        var ctx = EnsureAssemblyContext();
                        if (ctx != null)
                        {
                            ctx.Place(place, item);
                        }
                    });
                });

                editor.ShowDialog();

                CompleteProgress();
            });
        }
 private void SaveCorpuses()
 {
     ComponentsStorage.Save(Components);
 }