/// <summary> /// Inserts the data object into the context</summary> /// <param name="insertingObject">Data to insert; e.g., System.Windows.Forms.IDataObject</param> public void Insert(object insertingObject) { IDataObject dataObject = (IDataObject)insertingObject; object[] items = dataObject.GetData(typeof(object[])) as object[]; if (items == null) { return; } object[] itemCopies = DomNode.Copy(items.AsIEnumerable <DomNode>()); // create a new prototype DomNode node = new DomNode(Schema.prototypeType.Type); Prototype prototype = node.As <Prototype>(); prototype.Name = "Prototype".Localize("Statechart prototype"); foreach (StateBase state in itemCopies.AsIEnumerable <StateBase>()) { prototype.States.Add(state); } foreach (Transition transition in itemCopies.AsIEnumerable <Transition>()) { prototype.Transitions.Add(transition); } PrototypeFolder folder = m_activeItem.As <PrototypeFolder>(); if (folder == null) { folder = PrototypeFolder; } folder.Prototypes.Add(prototype); }
/// <summary> /// Obtains enumeration of the children of the given parent object</summary> /// <param name="parent">Parent object</param> /// <returns>Enumeration of children of the parent object</returns> IEnumerable <object> ITreeView.GetChildren(object parent) { PrototypeFolder folder = parent.As <PrototypeFolder>(); if (folder != null) { foreach (PrototypeFolder childFolder in folder.Folders) { yield return(childFolder); } foreach (Prototype prototype in folder.Prototypes) { yield return(prototype); } } }
/// <summary> /// Sets the item's name</summary> /// <param name="item">Item to name</param> /// <param name="name">New item name</param> void INamingContext.SetName(object item, string name) { Prototype prototype = item.As <Prototype>(); if (prototype != null) { prototype.Name = name; } else { PrototypeFolder folder = item.As <PrototypeFolder>(); if (folder != null) { folder.Name = name; } } }
/// <summary> /// Gets the item's name in the context, or null if none</summary> /// <param name="item">Item</param> /// <returns>Item's name in the context, or null if none</returns> string INamingContext.GetName(object item) { Prototype prototype = item.As <Prototype>(); if (prototype != null) { return(prototype.Name); } PrototypeFolder folder = item.As <PrototypeFolder>(); if (folder != null) { return(folder.Name); } return(null); }
/// <summary> /// Fills in or modifies the given display info for the item</summary> /// <param name="item">Item</param> /// <param name="info">Display info to update</param> public void GetInfo(object item, ItemInfo info) { PrototypeFolder category = item.As <PrototypeFolder>(); if (category != null) { info.Label = category.Name; } else { Prototype prototype = item.As <Prototype>(); if (prototype != null) { info.Label = prototype.Name; info.ImageIndex = info.GetImageList().Images.IndexOfKey(Resources.StatechartDocImage); info.IsLeaf = true; } } }
/// <summary> /// Gets the IDataObject for the items being dragged from a prototype lister, for /// use in a drag-and-drop operation</summary> /// <param name="items">Objects being dragged</param> /// <returns>IDataObject representing the dragged items</returns> public IDataObject GetInstances(IEnumerable <object> items) { List <object> instances = new List <object>(); foreach (object item in items) { Prototype prototype = item.As <Prototype>(); if (prototype != null) { instances.AddRange(prototype.States.AsIEnumerable <object>()); instances.AddRange(prototype.Transitions.AsIEnumerable <object>()); continue; } PrototypeFolder folder = item.As <PrototypeFolder>(); if (folder != null) { instances.Add(folder); } } return(new DataObject(instances.ToArray())); }