コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
 private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e)
 {
     temp = hovered;
 }
コード例 #4
0
        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;
        }