void Main.IParentOfINameOwnerChildNodes.EhChild_ParentChanged(Main.INameOwner childNode, Main.IDocumentNode oldParent)
 {
     if (object.ReferenceEquals(this, oldParent) && _itemsByName.ContainsKey(childNode.Name))
     {
         throw new InvalidProgramException(string.Format("Unauthorized change of the {0}'s parent", typeof(TItem).Name));
     }
 }
        void Main.IParentOfINameOwnerChildNodes.EhChild_HasBeenRenamed(Main.INameOwner item, string oldName)
        {
            if (_itemsByName.ContainsKey(item.Name))
            {
                if (object.ReferenceEquals(_itemsByName[item.Name], item))
                {
                    return; // Item alredy renamed
                }
                else
                {
                    throw new ApplicationException(string.Format("{0} with name " + item.Name + " already exists!", typeof(TItem).Name));
                }
            }

            if (_itemsByName.ContainsKey(oldName))
            {
                if (!object.ReferenceEquals(_itemsByName[oldName], item))
                {
                    throw new ApplicationException(string.Format("Names between parent collection and {0} not in sync", typeof(TItem).Name));
                }

                _itemsByName.Remove(oldName);
                _itemsByName.Add(item.Name, (TItem)item);

                EhSelfChanged(Main.NamedObjectCollectionChangedEventArgs.FromItemRenamed(item, oldName));
            }
            else
            {
                throw new ApplicationException(string.Format("Error renaming {0} " + oldName + " : this {0} name was not found in the collection!", typeof(TItem).Name));
            }
        }
 bool Main.IParentOfINameOwnerChildNodes.EhChild_CanBeRenamed(Main.INameOwner childNode, string newName)
 {
     if (_itemsByName.ContainsKey(newName) && !object.ReferenceEquals(_itemsByName[newName], childNode))
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Example #4
0
        /// <summary>
        /// Gets the project folder property documents down the project folder hierarchie.
        /// </summary>
        /// <param name="namedOwner">The named owner. Can be any project item.</param>
        /// <returns>All project folder property documents, starting from the deepest folder level, and ending with the property document in the root folder (if there is any).</returns>
        public static IEnumerable <ProjectFolderPropertyDocument> GetProjectFolderPropertyDocuments(this Main.INameOwner namedOwner)
        {
            var proj = Current.Project;

            ProjectFolderPropertyDocument bag;

            if (null != namedOwner)
            {
                var folder = Main.ProjectFolder.GetFolderPart(namedOwner.Name);
                while (!string.IsNullOrEmpty(folder))
                {
                    if (proj.ProjectFolderProperties.TryGetValue(folder, out bag))
                    {
                        yield return(bag);
                    }
                    folder = Main.ProjectFolder.GetFoldersParentFolder(folder);
                }

                if (proj.ProjectFolderProperties.TryGetValue(Main.ProjectFolder.RootFolderName, out bag))
                {
                    yield return(bag);
                }
            }
        }