/// <summary> /// Util function to Add Folders icons and information to list /// </summary> /// <param name="iconSize">The icon size, support multi size flags</param> public void AddFolder(IconReader.IconSize iconSize) { IconProperties iconPropOpen = new IconProperties(); IconProperties iconPropClosed = new IconProperties(); if ((iconSize & IconReader.IconSize.Small) == IconReader.IconSize.Small) { Add(FolderOpen, IconReader.IconSize.Small, iconPropOpen, IconReader.FolderType.Open); Add(FolderClosed, IconReader.IconSize.Small, iconPropClosed, IconReader.FolderType.Closed); } if ((iconSize & IconReader.IconSize.Large) == IconReader.IconSize.Large) { Add(FolderOpen, IconReader.IconSize.Large, iconPropOpen, IconReader.FolderType.Open); Add(FolderClosed, IconReader.IconSize.Large, iconPropClosed, IconReader.FolderType.Closed); } if ((iconSize & IconReader.IconSize.ExtraLarge) == IconReader.IconSize.ExtraLarge) { Add(FolderOpen, IconReader.IconSize.ExtraLarge, iconPropOpen, IconReader.FolderType.Open); Add(FolderClosed, IconReader.IconSize.ExtraLarge, iconPropClosed, IconReader.FolderType.Closed); } if ((iconSize & IconReader.IconSize.Jumbo) == IconReader.IconSize.Jumbo) { Add(FolderOpen, IconReader.IconSize.Jumbo, iconPropOpen, IconReader.FolderType.Open); Add(FolderClosed, IconReader.IconSize.Jumbo, iconPropClosed, IconReader.FolderType.Closed); } IconList.Add(FolderOpen, iconPropOpen); IconList.Add(FolderClosed, iconPropClosed); }
// Computation of the absolute x and z coordinates for each node private void SecondWalk(GenericOperator nodeN, float x, float z, float l, float t) { IconProperties np = nodeN.GetIcon().GetComponent <IconProperties>(); Vector3 pos = new Vector3(x, 2, z); l = np.depth / (np.depth + 1); nodeN.GetIcon().transform.position = pos; float dd = l * np.d; float p = t + Mathf.PI; float freeSpace = (nodeN.Children.Count == 0 ? 0 : np.f / (nodeN.Children.Count + 1)); float previous = 0; foreach (var child in nodeN.Children) { IconProperties cp = child.GetIcon().GetComponent <IconProperties>(); float aa = np.c * cp.a; float rr = np.d * Mathf.Tan(aa) / (1 - Mathf.Tan(aa)); p += previous + aa + freeSpace; float xx = (l * rr + dd) * Mathf.Cos(p); float zz = (l * rr + dd) * Mathf.Sin(p); previous = aa; SecondWalk(child, x + xx, z + zz, l * np.c, p); } }
// Adjusting the radii of the halfsectors of the children private void AdjustChildren(IconProperties np, float s) { if (s > Mathf.PI) { np.c = Mathf.PI / s; np.f = 0; } else { np.c = 1; np.f = Mathf.PI - s; } }
/// <summary> /// Internal add a icon to class /// FOLDERS ONLY!!!!!! /// </summary> /// <param name="path">Icon Path on filesystem, or extension</param> /// <param name="iconSize">Icon Size</param> /// <param name="iconProp">Icon Properties to assign to list</param> /// <param name="folder">Folder type (open or closed)</param> private void Add(string path, IconReader.IconSize iconSize, IconProperties iconProp, IconReader.FolderType folder) { iconProp.IconsIndex[iconSize] = -1; iconProp.IconsInfo[iconSize] = new Shell32.SHFILEINFO(); Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); iconProp.Icons[iconSize] = IconReader.GetFolderIcon(iconSize, folder, ref shfi); iconProp.IconsInfo[iconSize] = shfi; if (IImageList[iconSize] != null) { iconProp.IconsIndex[iconSize] = IImageList[iconSize].Images.Count; IImageList[iconSize].Images.Add(path, iconProp.Icons[iconSize]); } }
/* Bottom up proceeding, computing value for distances * possibly computing scaling factor for children and * computing radius of circles */ private void FirstWalk(GenericOperator node) { IconProperties np = node.GetIcon().GetComponent <IconProperties>(); np.d = 0; float s = 0; foreach (var child in node.Children) { FirstWalk(child); IconProperties cp = child.GetIcon().GetComponent <IconProperties>(); np.d = Mathf.Max(np.d, cp.r); cp.a = Mathf.Atan(cp.r / (np.d + cp.r)); s += cp.a; } AdjustChildren(np, s); SetRadius(np); }
/// <summary> /// Add an extension to List /// </summary> /// <param name="path">The extension, /// such as ex: ".mp3" or full path "C:\\mymusic.mp3".</param> /// <param name="iconSize">The icon size, support multi size flags</param> /// <returns>Returns Icon and thier information.</returns> public IconProperties AddEx(string path, IconReader.IconSize iconSize) { IconProperties iconProp = IsValidEx(path); if ((iconSize & IconReader.IconSize.Small) == IconReader.IconSize.Small) { if (!iconProp.IsValidEx(IconReader.IconSize.Small)) { Add(path, IconReader.IconSize.Small, iconProp); } } if ((iconSize & IconReader.IconSize.Large) == IconReader.IconSize.Large) { if (!iconProp.IsValidEx(IconReader.IconSize.Large)) { Add(path, IconReader.IconSize.Large, iconProp); } } if ((iconSize & IconReader.IconSize.ExtraLarge) == IconReader.IconSize.ExtraLarge) { if (!iconProp.IsValidEx(IconReader.IconSize.ExtraLarge)) { Add(path, IconReader.IconSize.ExtraLarge, iconProp); } } if ((iconSize & IconReader.IconSize.Jumbo) == IconReader.IconSize.Jumbo) { if (!iconProp.IsValidEx(IconReader.IconSize.Jumbo)) { Add(path, IconReader.IconSize.Jumbo, iconProp); } } if (!IsValid(path)) { IconList.Add(path, iconProp); } return(iconProp); }
//Setting the radius of a node private void SetRadius(IconProperties np) { np.r = Mathf.Max(np.d, _minRadius) + 2 * np.d; }
/// <summary> /// Internal add a icon to class /// FOLDERS ONLY!!!!!! /// </summary> /// <param name="path">Icon Path on filesystem, or extension</param> /// <param name="iconSize">Icon Size</param> /// <param name="iconProp">Icon Properties to assign to list</param> /// <param name="folder">Folder type (open or closed)</param> private void Add(string path, IconReader.IconSize iconSize, IconProperties iconProp, IconReader.FolderType folder) { iconProp.IconsIndex[iconSize] = -1; iconProp.IconsInfo[iconSize] = new Shell32.SHFILEINFO(); Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); iconProp.Icons[iconSize] = IconReader.GetFolderIcon(iconSize, folder, ref shfi); iconProp.IconsInfo[iconSize] = shfi; if(IImageList[iconSize] != null) { iconProp.IconsIndex[iconSize] = IImageList[iconSize].Images.Count; IImageList[iconSize].Images.Add(path, iconProp.Icons[iconSize]); } }