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); }
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); } } }