void DrawLayer(Graphics gr, ScannerItemInfo scd, float r1, float r2, float parentStartAng, float parentEndAng) { float crntAng = parentStartAng; foreach (var item in scd.Items) { float perc = item.Size / (float)scd.Size; var deltaAng = parentEndAng - parentStartAng; var ang = deltaAng * perc; if (ang >= 1) { item.EndAng = crntAng + ang; item.R1 = r1; item.R2 = r2; item.StartAng = crntAng; var gp = GetSector(crntAng, crntAng + ang, r1, r2); //if (item is ScannerDirInfo) { var d1 = item as ScannerDirInfo; //if (d1.Dir.FullName.Contains("apache2")) { if (hovered == item) { gr.FillPath(Brushes.LightGreen, gp); } else { if (item is ScannerFileInfo) { gr.FillPath(Brushes.LightYellow, gp); } else { gr.FillPath(Brushes.LightBlue, gp); } } gr.DrawPath(Pens.Black, gp); } } DrawLayer(gr, item, r1 + radInc, r2 + radInc, crntAng, crntAng + ang); crntAng += ang; } } }
internal void Init(IDirectoryInfo d) { if (th != null) { return; } GC.Collect(); toolStripProgressBar1.Visible = true; toolStripProgressBar1.Value = 0; timer2.Enabled = false; ready = false; Items.Clear(); Root = null; //files.Clear(); th = new Thread(() => { var dirs = Stuff.GetAllDirs(d); Queue <ScannerItemInfo> q = new Queue <ScannerItemInfo>(); int cnt = 0; Root = new ScannerDirInfo(null, d); q.Enqueue(Root); Items.Add(Root); while (q.Any()) { ReportProgress(cnt, dirs.Count); var _dd = q.Dequeue(); if (_dd is ScannerFileInfo) { continue; } var dd = _dd as ScannerDirInfo; /* var sz = Stuff.GetDirectorySize(dd.Dir); * if (sz < 1024 * 1024) * { * dd.HiddenItemsSize = sz; * continue; * }*/ cnt++; try { foreach (var item in dd.Dir.GetFiles()) { if (item.Length > 10 * 1024 * 1024) { // dd.HiddenItemsSize += item.Length; //continue; } dd.Items.Add(new ScannerFileInfo(dd, item)); Items.Add(dd.Items.Last()); // files.Add(item); } } catch (Exception ex) { } try { foreach (var item in dd.Dir.GetDirectories()) { var t = new ScannerDirInfo(dd, item); Items.Add(t); dd.Items.Add(t); q.Enqueue(t); } } catch (Exception ex) { } if (dd.Parent != null) { dd.Dir = null; } } ReportProgress(cnt, cnt); Root.CalcSize(); ready = true; statusStrip1.Invoke((Action)(() => { timer2.Enabled = true; timer2.Interval = 2000; })); th = null; }); th.IsBackground = true; th.Start(); }
private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e) { temp = hovered; }
private void Timer1_Tick(object sender, EventArgs e) { gr.SmoothingMode = SmoothingMode.AntiAlias; var pos = pictureBox1.PointToClient(Cursor.Position); gr.Clear(Color.White); gr.ResetTransform(); //var gp=GetSector(45, 135, 100, 150); // gr.DrawPath(Pens.Black, gp); if (ready /* && false*/) { hovered = null; var dist = Math.Sqrt(Math.Pow(pos.X - pictureBox1.Width / 2, 2) + Math.Pow(pos.Y - pictureBox1.Height / 2, 2)); if (dist < radb) { hovered = Root; } var ang = Math.Atan2(pos.Y - pictureBox1.Height / 2, pos.X - pictureBox1.Width / 2) * 180f / Math.PI; if (ang < 0) { ang += 360f; } foreach (var item in Items) { if (dist >= item.R1 && dist <= item.R2 && ang >= item.StartAng && ang <= item.EndAng) { hovered = item; } } gr.DrawString((Root as ScannerDirInfo).GetDirFullName(), new Font("Arial", 12), Brushes.Black, 5, 5); if (hovered != null) { gr.DrawString(hovered.Name, new Font("Arial", 12), Brushes.Black, 5, 25); gr.DrawString(Stuff.GetUserFriendlyFileSize(hovered.Size), new Font("Arial", 12), Brushes.Black, 5, 45); } gr.TranslateTransform(bmp.Width / 2, bmp.Height / 2); if (Root == hovered) { gr.FillEllipse(Brushes.Green, -radb, -radb, 2 * radb, 2 * radb); } else { gr.FillEllipse(Brushes.Violet, -radb, -radb, 2 * radb, 2 * radb); } gr.DrawEllipse(Pens.Black, -radb, -radb, 2 * radb, 2 * radb); var sz = Stuff.GetUserFriendlyFileSize(Root.Size); var ff = new Font("Arial", 12); var ms = gr.MeasureString(sz, ff); gr.DrawString(sz, ff, Brushes.White, -ms.Width / 2, 0); sz = Root.Name; ms = gr.MeasureString(sz, ff); gr.DrawString(sz, ff, Brushes.White, -ms.Width / 2, -ms.Height); DrawLayer(gr, Root, radb, radb + radInc, 0, 360); } pictureBox1.Image = bmp; }