public static ObjectTreeNode OpenFormat(ImageList imageList, IFileFormat fileFormat)
        {
            ObjectTreeNode hiearchyNode = null;

            if (fileFormat is IArchiveFile)
            {
                hiearchyNode = LoadArchiveFormat((IArchiveFile)fileFormat);
                if (fileFormat is ObjectTreeNode)
                {
                    hiearchyNode.OnBeforeExpand();
                    foreach (var child in ((ObjectTreeNode)fileFormat).Children)
                    {
                        hiearchyNode.AddChild(child);
                    }
                }
            }
            else if (fileFormat is ObjectTreeNode)
            {
                hiearchyNode = (ObjectTreeNode)fileFormat;
            }
            else if (fileFormat is ITextureContainer)
            {
                hiearchyNode = LoadTextureContainerFormat(imageList, (ITextureContainer)fileFormat);
            }
            else if (fileFormat is STGenericTexture)
            {
                hiearchyNode = LoadTextureFormat((STGenericTexture)fileFormat);
            }
            else if (fileFormat is IModelFormat)
            {
                hiearchyNode = LoadModelFormat((IModelFormat)fileFormat);
            }
            else if (fileFormat is IModelSceneFormat)
            {
                hiearchyNode = LoadModelFormat((IModelSceneFormat)fileFormat);
            }
            else
            {
                hiearchyNode = new ObjectTreeNode(fileFormat.FileInfo.FileName)
                {
                    Tag = fileFormat,
                }
            };

            hiearchyNode.OnBeforeExpand();

            if (fileFormat is IArchiveFile && fileFormat is ITextureContainer)
            {
                hiearchyNode.Children.AddRange(LoadTextureContainerFormat(imageList, (ITextureContainer)fileFormat).Children);
            }

            return(hiearchyNode);
        }