internal void Add(BaseComponent component)
 {
     component.Accept(new ObjectModifyVisitor(this.Model));
     component.Accept(new ViewDirectorVisitor(ViewFactory, this.view.Font));
     component.Init();
     this.Model.Items.Add(component);
     this.Model.Items = this.Model.Items.OrderBy(x => x.SortOrder).ToList();
     this.view.Invalidate();
     component.Changed     += new Action <BaseComponent>(Component_Change);
     this.SelectedComponent = component;
     CommitChange();
 }
 private void LoadInstance()
 {
     try
     {
         FlowChartComponent fc = Util.ConvertFromJSON <FlowChartComponent>(System.Windows.Forms.Clipboard.GetText());
         BaseComponent      c  = (BaseComponent)Activator.CreateInstance(Type.GetType(fc.Type));
         c.SetComponent(fc);
         c.ID = Util.GetUniqueID();
         c.Accept(new ObjectCreateVisitor(Model, fc));
         this.OnAdd(c);
     }
     catch
     {
     }
 }
        internal void Load(FlowChartContainer container)
        {
            this.isReseting        = true;
            this.SelectedComponent = null;
            this.Model.Items.Clear();

            container.Items.ForEach(x => {
                BaseComponent c = (BaseComponent)Activator.CreateInstance(Type.GetType(x.Type));
                c.SetComponent(x);
                this.Add(c);
            });

            container.Items.ForEach(x =>
            {
                BaseComponent c = this.Model.Items.Find(y => y.ID == x.ID);
                c.Accept(new ObjectCreateVisitor(Model, x));
            });

            this.view.Invalidate();
            this.isReseting = false;
        }