private List <CopiedOptionItem> GetItems()
        {
            List <CopiedOptionItem> items = new List <CopiedOptionItem>();
            List <CopiedOptionItem> queue = new List <CopiedOptionItem>();

            queue.Add(mapping[handler]);

            while (queue.Count > 0)
            {
                CopiedOptionItem item = queue[0];
                queue.RemoveAt(0);
                if (item != null)
                {
                    items.Add(item);
                    if (item is IOptionGroup)
                    {
                        foreach (IOptionItem optionItem in ((IOptionGroup)item).Items)
                        {
                            if (optionItem is CopiedOptionItem)
                            {
                                queue.Add((CopiedOptionItem)optionItem);
                            }
                        }
                    }
                }
            }
            return(items);
        }
            private void delegateItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
            {
                CopiedOptionItem item = GetItem(sender);

                if (item != null)
                {
                    item.delegateItem_PropertyChanged(sender, e);
                }
            }
        internal CopiedOptionItem CreateCopy(CopiedOptionGroup newParent, IOptionItem itemToCopy)
        {
            CopiedOptionItem newItem;

            if (itemToCopy is IOptionGroup)
            {
                CopiedOptionGroup copiedGroup = new CopiedOptionGroup(itemToCopy as IOptionGroup, newParent);
                newItem = copiedGroup;
            }
            else
            {
                newItem = new CopiedOptionItem(itemToCopy, newParent);
            }
            newItem.AutoAdopt   = IsAutoAdopt;
            newItem.AutoCommit  = IsAutoCommit;
            mapping[itemToCopy] = newItem;
            return(newItem);
        }
            private CopiedOptionItem GetItem(object source)
            {
                CopiedOptionItem item = Target as CopiedOptionItem;

                if (item == null)
                {
                    Disconnect(source);
                }
                else
                {
                    if (item.delegateItem == null)
                    {
                        // can happen if Disconnect has been triggered in the same event dispatch
                        Disconnect(source);
                        return(null);
                    }
                }
                return(item);
            }
 public WeakListener(CopiedOptionItem item, IOptionItem optionItem)
 {
     this.Target = item;
     optionItem.PropertyChanged += new PropertyChangedEventHandler(delegateItem_PropertyChanged);
 }
 internal void Dispose(IOptionItem optionItem, CopiedOptionItem copiedOptionItem)
 {
     mapping.Remove(optionItem);
 }
 public DelegatingMapper(CopiedOptionItem copiedOptionItem)
 {
     this.copiedOptionItem = copiedOptionItem;
 }