private void CheckItem(FolderItemControl item, bool check)
 {
     item.IsChecked = check;
     foreach (FolderItemControl subItem in item.Items)
     {
         CheckItem(subItem, check);
     }
 }
 private void UpdateWidth(FolderItemControl item, int maxVisibleLevel)
 {
     item.SetWidth(maxVisibleLevel);
     if (item.Items.Count > 0)
     {
         foreach (FolderItemControl subItem in item.Items)
         {
             UpdateWidth(subItem, maxVisibleLevel);
         }
     }
 }
 private int GetMaxVisibleLevel(FolderItemControl item, int maxLevel)
 {
     if (item.IsVisible)
     {
         int level = Math.Max(maxLevel, item.Level);
         if (item.IsExpanded && item.Items.Count > 0)
         {
             foreach (FolderItemControl subItem in item.Items)
             {
                 level = GetMaxVisibleLevel(subItem, level);
             }
         }
         return(level);
     }
     return(maxLevel);
 }
        private int SetAltIndex(FolderItemControl item, int index)
        {
            const int altCount = 2;

            if (index >= altCount)
            {
                index = 0;
            }

            item.AltIndex = index++;
            item.Update();
            if (item.IsExpanded && item.Items.Count > 0)
            {
                foreach (FolderItemControl subItem in item.Items)
                {
                    index = SetAltIndex(subItem, index);
                }
            }

            return(index);
        }
        private int GetPhotosCount(FolderItemControl item)
        {
            int count = 0;

            foreach (FolderItemControl subItem in item.Items)
            {
                count += subItem.PhotosCount;
            }

            var dir = new DirectoryInfo(item.FullName);

            foreach (FileInfo file in dir.GetFiles())
            {
                if (IsImageExtension(file))
                {
                    count++;
                }
            }

            return(count);
        }
        private void AddFolder(DirectoryInfo dir, ItemsControl item, int level)
        {
            try
            {
                if (item != null && dir.Exists)
                {
                    string name;
                    int    photosCount;

                    // Root folder. Display volume label and drive type
                    if (dir.Parent == null)
                    {
                        var drive = new DriveInfo(dir.Name);
                        if (drive.VolumeLabel != "")
                        {
                            name = drive.VolumeLabel;
                        }
                        else
                        {
                            name = DriveTypeToString(drive.DriveType);
                        }
                    }
                    // Display folder name
                    else if ((dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        name = dir.Name;
                    }
                    // Skip hidden folders
                    else
                    {
                        return;
                    }

                    var newItem = new FolderItemControl();
                    newItem.FullName = dir.FullName;
                    item.Items.Add(newItem);

                    foreach (DirectoryInfo subDir in dir.GetDirectories())
                    {
                        AddFolder(subDir, newItem, level + 1);
                    }

                    photosCount = GetPhotosCount(newItem);
                    if (photosCount > 0)
                    {
                        newItem.ShortName   = name;
                        newItem.Date        = dir.LastWriteTime;
                        newItem.PhotosCount = photosCount;
                        newItem.Level       = level;
                        newItem.Update();
                        newItem.Checked           += new RoutedEventHandler(CheckedHandler);
                        newItem.ExpandedCollapsed += new RoutedEventHandler(ExpandedCollapsedHandler);
                        newItem.VisibilityChanged += new DependencyPropertyChangedEventHandler(VisibilityChangedHandler);
                    }
                    else
                    {
                        item.Items.Remove(newItem);
                        newItem = null;
                    }
                }
            }
            catch (Exception e)
            {
                ExecutionEngine.EventLogger.WriteExceptionInfo(e);
            }
        }