예제 #1
0
 /// <summary>
 /// Конструктор
 /// </summary>
 public SchemeView()
     : base()
 {
     maxComponentID = 0;
     SchemeDoc      = new SchemeDocument();
     Components     = new SortedList <int, BaseComponent>();
 }
예제 #2
0
 /// <summary>
 /// Конструктор
 /// </summary>
 public History(Log log)
 {
     this.log       = log;
     points         = new List <Point>();
     headIndex      = 0;
     currentPoint   = null;
     addingEnabled  = true;
     schemeDocCopy  = new SchemeDocument();
     componentsCopy = new SortedList <int, BaseComponent>();
 }
예제 #3
0
 /// <summary>
 /// Очистить историю
 /// </summary>
 public void Clear()
 {
     points.Clear();
     headIndex     = 0;
     currentPoint  = null;
     addingEnabled = true;
     schemeDocCopy = new SchemeDocument();
     componentsCopy.Clear();
     OnHistoryChanged();
 }
예제 #4
0
        /// <summary>
        /// Конструктор.
        /// </summary>
        public SchemeView()
            : base()
        {
            maxComponentID = 0;
            templateArgs   = new TemplateArgs();

            SchemeDoc  = new SchemeDocument();
            Components = new SortedList <int, BaseComponent>();
            LoadErrors = new List <string>();
        }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the class.
        /// </summary>
        public SchemeView(View viewEntity)
            : base(viewEntity)
        {
            maxComponentID   = 0;
            templateArgs     = new TemplateArgs(Args);
            templateBindings = null;

            SchemeDoc = new SchemeDocument {
                SchemeView = this
            };
            Components = new SortedList <int, ComponentBase>();
            LoadErrors = new List <string>();
        }
예제 #6
0
        /// <summary>
        /// Добавить изменение в историю
        /// </summary>
        public void Add(SchemeChangeTypes changeType, object changedObject, object oldKey = null)
        {
            try
            {
                lock (this)
                {
                    Change change = new Change(changeType, changedObject, oldKey);

                    switch (changeType)
                    {
                    case SchemeChangeTypes.SchemeDocChanged:
                        change.OldObject = schemeDocCopy;
                        schemeDocCopy    = (SchemeDocument)change.ChangedObject;
                        break;

                    case SchemeChangeTypes.ComponentAdded:
                        componentsCopy[change.ComponentID] = (BaseComponent)change.ChangedObject;
                        break;

                    case SchemeChangeTypes.ComponentChanged:
                        change.OldObject = componentsCopy[change.ComponentID];
                        componentsCopy[change.ComponentID] = (BaseComponent)change.ChangedObject;
                        break;

                    case SchemeChangeTypes.ComponentDeleted:
                        componentsCopy.Remove(change.ComponentID);
                        break;
                    }

                    if (addingEnabled)
                    {
                        if (currentPoint == null)
                        {
                            Point point = new Point();
                            point.Changes.Add(change);
                            AddPoint(point);
                        }
                        else
                        {
                            currentPoint.Changes.Add(change);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при добавлении изменения в историю" :
                                   "Error adding a change to the history");
            }
        }
예제 #7
0
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            IWindowsFormsEditorService editorSvc = provider == null ? null :
                                                   (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

            if (context != null && context.Instance is SchemeDocument && editorSvc != null)
            {
                List <int>     cnlFilter = (List <int>)value;
                SchemeDocument schemeDoc = (SchemeDocument)context.Instance;
                editorSvc.ShowDialog(new FrmCnlFilterDialog(cnlFilter, schemeDoc));
            }

            return(value);
        }
예제 #8
0
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            IWindowsFormsEditorService editorSvc = provider == null ? null :
                                                   (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

            if (context != null && context.Instance != null && editorSvc != null)
            {
                SchemeDocument schemeDoc = GetSchemeDoc(context.Instance);

                if (schemeDoc != null)
                {
                    Type propType = context.PropertyDescriptor.PropertyType;

                    if (propType == typeof(Dictionary <string, Image>))
                    {
                        // редактирование словаря изображений
                        Dictionary <string, Image> images         = (Dictionary <string, Image>)value;
                        FrmImageDialog             frmImageDialog = new FrmImageDialog(images, schemeDoc)
                        {
                            ImageDir = ImageDir
                        };
                        editorSvc.ShowDialog(frmImageDialog);
                        ImageDir = frmImageDialog.ImageDir;
                    }
                    else if (propType == typeof(string))
                    {
                        // выбор изображения
                        string         imageName      = (value ?? "").ToString();
                        FrmImageDialog frmImageDialog =
                            new FrmImageDialog(imageName, schemeDoc.Images, schemeDoc)
                        {
                            ImageDir = ImageDir
                        };

                        if (editorSvc.ShowDialog(frmImageDialog) == DialogResult.OK)
                        {
                            value    = frmImageDialog.SelectedImageName;
                            ImageDir = frmImageDialog.ImageDir;
                        }
                    }
                }
            }

            return(value);
        }
예제 #9
0
        private SchemeDocument GetSchemeDoc(object instance)
        {
            SchemeDocument schemeDoc = null;

            if (instance is ISchemeDocAvailable)
            {
                schemeDoc = ((ISchemeDocAvailable)instance).SchemeDoc;
            }
            else if (instance is ICollection)
            {
                foreach (object obj in (ICollection)instance)
                {
                    schemeDoc = GetSchemeDoc(obj);
                    if (schemeDoc == null)
                    {
                        break;
                    }
                }
            }

            return(schemeDoc);
        }
예제 #10
0
        /// <summary>
        /// Применить заданные изменения схемы
        /// </summary>
        private void ApplyChanges(List <Change> changeList)
        {
            lock (SchemeView.SyncRoot)
            {
                lock (selComponents)
                {
                    SchemeDocument schemeDoc = SchemeView.SchemeDoc;
                    History.DisableAdding();
                    selComponents.Clear();

                    foreach (Change change in changeList)
                    {
                        switch (change.ChangeType)
                        {
                        case SchemeChangeTypes.SchemeDocChanged:
                            // копирование изменений свойств документа схемы
                            ((SchemeDocument)change.ChangedObject).CopyTo(SchemeView.SchemeDoc);
                            schemeDoc.OnItemChanged(SchemeChangeTypes.SchemeDocChanged, schemeDoc);
                            break;

                        case SchemeChangeTypes.ComponentAdded:
                            // создание копии компонента
                            BaseComponent addedComponent = ((BaseComponent)change.ChangedObject).Clone();

                            // добавление компонента на схему
                            SchemeView.Components[addedComponent.ID] = addedComponent;
                            schemeDoc.OnItemChanged(SchemeChangeTypes.ComponentAdded, addedComponent);

                            // выбор добавленного компонента
                            selComponents.Add(addedComponent);
                            break;

                        case SchemeChangeTypes.ComponentChanged:
                            // создание копии компонента
                            BaseComponent changedComponent = ((BaseComponent)change.ChangedObject).Clone();

                            // замена компонента на схеме
                            SchemeView.Components[changedComponent.ID] = changedComponent;
                            changedComponent.OnItemChanged(SchemeChangeTypes.ComponentChanged, changedComponent);

                            // выбор изменённого компонента
                            selComponents.Add(changedComponent);
                            break;

                        case SchemeChangeTypes.ComponentDeleted:
                            // удаление компонента
                            BaseComponent deletedComponent = (BaseComponent)change.ChangedObject;
                            SchemeView.Components.Remove(deletedComponent.ID);
                            schemeDoc.OnItemChanged(SchemeChangeTypes.ComponentDeleted, deletedComponent);
                            break;

                        case SchemeChangeTypes.ImageAdded:
                            // добавление изображения
                            Image addedImage = ((Image)change.ChangedObject).Copy();
                            schemeDoc.Images[addedImage.Name] = addedImage;
                            schemeDoc.OnItemChanged(SchemeChangeTypes.ImageAdded, addedImage);
                            break;

                        case SchemeChangeTypes.ImageRenamed:
                            // переименование изображения
                            Image renamedImage = ((Image)change.ChangedObject).Copy();
                            schemeDoc.Images.Remove(change.OldImageName);
                            schemeDoc.Images[renamedImage.Name] = renamedImage;
                            schemeDoc.OnItemChanged(
                                SchemeChangeTypes.ImageRenamed, renamedImage, change.OldImageName);
                            break;

                        case SchemeChangeTypes.ImageDeleted:
                            // удаление изображения
                            Image deletedImage = (Image)change.ChangedObject;
                            schemeDoc.Images.Remove(deletedImage.Name);
                            schemeDoc.OnItemChanged(SchemeChangeTypes.ImageDeleted, deletedImage);
                            break;
                        }
                    }

                    History.EnableAdding();
                }
            }

            OnSelectionChanged();
            PointerMode = PointerMode.Select;
        }
예제 #11
0
 /// <summary>
 /// Create this instance.
 /// </summary>
 public void Create()
 {
     CurrentScheme = new SchemeDocument();
 }