/// <summary> /// Sets the virtual container. This overwrite the <see cref="Content" /> list member. /// Content must by VirtualContainer! /// </summary> /// <param name="level">The level.</param> /// <param name="hiIndex">Index of the higher level virtual container (VC-4).</param> /// <param name="lowIndex">Index of the lower level virtual container.</param> /// <param name="content">The content. Virtual Container</param> /// <returns> /// True - success, False - fail /// </returns> public bool SetVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex, IContent content) { if (VirtualContainer.isVirtualContainer(content)) { VirtualContainer contentVC = (VirtualContainer)content; if (level == contentVC.Level && this.CalculateFreeSpace() >= Frame.ContainerSpaceConverter(level)) { if (level == VirtualContainerLevel.VC4) { if (this.Content.Count >= hiIndex + 1) { this.Content[hiIndex] = content; return(true); } else { return(false); } } else { //int higherIndex = GetHigherContainerIndex(level, index); if (this.Content.Count >= hiIndex + 1 && lowIndex != null) { int lowerIndex = (int)lowIndex; IContent tempVirtualContainer = this.Content[hiIndex]; if (VirtualContainer.isVirtualContainer(tempVirtualContainer) && ((VirtualContainer)tempVirtualContainer).TryAddContainer(level, lowerIndex)) { ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content); } else if (tempVirtualContainer == null) //Frame does not have VC4 to keep lower virtual container levels { this.Content[hiIndex] = new VirtualContainer(VirtualContainerLevel.VC4); tempVirtualContainer = this.Content[hiIndex]; ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content); } return(true); } else { return(false); } } } else { return(false); } } return(false); }