public static List <int> DistributeWidth(List <VisualDiskExtent> extents, int diskWidth)
        {
            long maxExtentSize = 0;

            foreach (VisualDiskExtent extent in extents)
            {
                if (extent.Extent.Size > maxExtentSize)
                {
                    maxExtentSize = extent.Extent.Size;
                }
            }
            List <int> widthEntries = new List <int>();
            int        sumWidth     = 0;

            foreach (VisualDiskExtent extent in extents)
            {
                int rawExtentWidth = (int)VisualDiskHelper.Scale(extent.Extent.Size, maxExtentSize, diskWidth);
                sumWidth += rawExtentWidth;
                widthEntries.Add(rawExtentWidth);
            }
            double factor = (double)diskWidth / sumWidth;

            for (int index = 0; index < widthEntries.Count; index++)
            {
                widthEntries[index] = (int)Math.Round((widthEntries[index] * factor));
            }
            return(widthEntries);
        }
Exemplo n.º 2
0
        public void PopulateView(List <Disk> disks)
        {
            CleanView();
            long largestDiskSize = 0;

            for (int diskIndex = 0; diskIndex < disks.Count; diskIndex++)
            {
                Disk     disk    = disks[diskIndex];
                CheckBox chkDisk = new CheckBox();
                chkDisk.Appearance = Appearance.Button;
                chkDisk.Text       = DiskLabelHelper.GetDiskLabel(disk, diskIndex);
                int locationY = diskIndex * (DiskHeight + 2);
                chkDisk.Location  = new Point(0, locationY);
                chkDisk.Width     = DiskButtonWidth;
                chkDisk.Height    = DiskHeight;
                chkDisk.Padding   = new Padding(0, ExtentBannerHeight + ExtentPaddingTop, 0, 0);
                chkDisk.TextAlign = ContentAlignment.TopLeft;
                chkDisk.Tag       = disk;
                chkDisk.Click    += new EventHandler(Disk_Click);
                chkDisk.MouseUp  += new MouseEventHandler(Disk_MouseUp);
                this.Controls.Add(chkDisk);
                m_diskCheckboxes.Add(chkDisk);

                if (disk.Size > largestDiskSize)
                {
                    largestDiskSize = disk.Size;
                }
            }

            List <VisualDiskExtent> extents = VisualDiskHelper.GetVisualExtents(disks);

            for (int diskIndex = 0; diskIndex < disks.Count; diskIndex++)
            {
                Disk disk      = disks[diskIndex];
                int  diskWidth = (int)VisualDiskHelper.Scale(disk.Size, largestDiskSize, LargestDiskWidth);
                List <VisualDiskExtent> diskExtents = VisualDiskExtentHelper.GetFiltered(extents, diskIndex);
                VisualDiskExtentHelper.SortExtentsByFirstSector(diskExtents);
                List <int> widthEntries = VisualDiskExtentHelper.DistributeWidth(diskExtents, diskWidth);
                int        locationX    = DiskButtonWidth + 2;
                for (int extentIndex = 0; extentIndex < diskExtents.Count; extentIndex++)
                {
                    VisualDiskExtent extent    = diskExtents[extentIndex];
                    CheckBox         chkExtent = new CheckBox();
                    chkExtent.Appearance = Appearance.Button;
                    int extentWidth = widthEntries[extentIndex];
                    if (extentWidth > 20)
                    {
                        chkExtent.Text = DiskLabelHelper.GetExtentLabel(extent.Volume, extent.Extent, extentWidth);
                    }
                    if (extentWidth < 50)
                    {
                        chkExtent.Font = new Font(chkExtent.Font.FontFamily, 6.5f);
                    }
                    int       locationY  = extent.VisualDiskIndex * (DiskHeight + 2);
                    Rectangle extentRect = new Rectangle(locationX, locationY, extentWidth, DiskHeight);
                    locationX += extentWidth;
                    if (extent.Volume == null)
                    {
                        //chkExtent.BackColor = Color.FromArgb(214, 211, 208);
                    }
                    chkExtent.Location  = extentRect.Location;
                    chkExtent.Width     = extentRect.Width;
                    chkExtent.Height    = extentRect.Height;
                    chkExtent.Padding   = new Padding(0, ExtentBannerHeight + ExtentPaddingTop, 0, 0);
                    chkExtent.TextAlign = ContentAlignment.TopLeft;
                    chkExtent.Tag       = extent;
                    chkExtent.Click    += new EventHandler(Extent_Click);
                    chkExtent.MouseUp  += new MouseEventHandler(Extent_MouseUp);
                    chkExtent.Paint    += new PaintEventHandler(Extent_Paint);
                    this.Controls.Add(chkExtent);
                    m_extentCheckboxes.Add(chkExtent);
                }
            }
        }