Example #1
0
        private IEnumerable <object> GetCompatibleData(IDataObject dataObject)
        {
            // try the local format first
            IEnumerable <object> items = dataObject.GetData(typeof(object[])) as object[];

            if (items != null && (AreCircuitItems(items) || AreTemplateItems(items)))
            {
                return(items);
            }

            // try serialized format
            byte[] data = dataObject.GetData(CircuitFormat) as byte[];
            if (data != null)
            {
                try
                {
                    DomNodeSerializer     serializer   = new DomNodeSerializer();
                    IEnumerable <DomNode> deserialized = serializer.Deserialize(data, m_schemaLoader.GetNodeType);
                    items = Adapters.AsIEnumerable <object>(deserialized);
                    if (AreCircuitItems(items))
                    {
                        return(items);
                    }
                }
                catch /*(Exception ex)*/
                {
                    // the app cannot recover when using output servce
                    //Outputs.WriteLine(OutputMessageType.Warning, ex.Message);
                }
            }

            return(null);
        }
Example #2
0
        /// <summary>
        /// Copies selected items from the circuit</summary>
        /// <returns>DataObject containing an enumeration of selected items</returns>
        public object Copy()
        {
            // copy selected text in the selected annotation?
            var annotationAdapter = m_viewingContext.Cast <AdaptableControl>().As <D2dAnnotationAdapter>();

            if (annotationAdapter != null)
            {
                foreach (Annotation annotation in Selection.AsIEnumerable <Annotation>())
                {
                    if (annotationAdapter.CanCopyText(annotation))
                    {
                        DataObject dataObjectText = new DataObject();
                        dataObjectText.SetText(annotationAdapter.TextSelected(annotation));
                        Clipboard.SetText(annotationAdapter.TextSelected(annotation));
                        return(dataObjectText);
                    }
                }
            }



            if (m_instancingContext != null)
            {
                return(m_instancingContext.Copy());
            }

            // get the selected modules
            HashSet <Element> modules     = new HashSet <Element>(Selection.AsIEnumerable <Element>());
            HashSet <object>  itemsToCopy = new HashSet <object>(Adapters.AsIEnumerable <object>(modules));

            // get selected connections between selected modules
            foreach (Wire connection in Selection.AsIEnumerable <Wire>())
            {
                if (IsConnectionCopyable(connection, modules))
                {
                    itemsToCopy.Add(connection);
                }
            }

            // if no connections were added, look for copyable connections between the selected elements
            if (itemsToCopy.Count == modules.Count)
            {
                foreach (Wire connection in m_circuitContainer.Wires)
                {
                    if (IsConnectionCopyable(connection, modules))
                    {
                        itemsToCopy.Add(connection);
                    }
                }
            }

            // add annotations
            foreach (Annotation annotation in Selection.AsIEnumerable <Annotation>())
            {
                itemsToCopy.Add(Adapters.As <DomNode>(annotation));
            }

            // create format for local use
            DataObject dataObject = new DataObject(Enumerable.ToArray(itemsToCopy));

            // add a serializable format for the system clipboard
            DomNodeSerializer serializer = new DomNodeSerializer();

            byte[] data = serializer.Serialize(Adapters.AsIEnumerable <DomNode>(itemsToCopy));
            dataObject.SetData(CircuitFormat, data);



            return(dataObject);
        }