Esempio n. 1
0
        private CloneGroup CreateCloneGroup(XElement cloneGroupElement)
        {
            var cg = new CloneGroup();

            cloneGroupElement
            .Descendants("CloneItem")
            .ToList()
            .ForEach(ci =>
            {
                cg.AddItem(ci.Value, ci.Attribute("Size") == null ? 0 : Convert.ToInt64(ci.Attribute("Size").Value));
            });

            return(cg);
        }
        private void UpdateCloneVisualizations()
        {
            foreach (DataGridViewRow row in dataGridView.Rows)
            {
                CloneGroup cloneGroup = (CloneGroup)row.Tag;
                Bitmap     oldBitmap  = (Bitmap)row.Cells[2].Value;
                if (oldBitmap != null)
                {
                    oldBitmap.Dispose();
                }

                row.Cells[2].Value = GetCloneOverviewBitmap(cloneGroup);
            }
        }
        private object GetCloneOverviewBitmap(CloneGroup group)
        {
            Bitmap    bitmap = new Bitmap(dataGridView.Columns[2].Width, 10);
            Rectangle bounds = new Rectangle(0, 0, bitmap.Width - 1, bitmap.Height - 1);

            using (Graphics graphics = Graphics.FromImage(bitmap))
            {
                int linesOfCode = GetLinesOfCode(group.SourceFile);
                int totalWidth  = (int)Math.Floor((double)(bounds.Width - 1) / _maximumLoc * linesOfCode);

                Rectangle backgroundRect = new Rectangle();
                backgroundRect.X      = bounds.X;
                backgroundRect.Y      = bounds.Top;
                backgroundRect.Width  = totalWidth - 1;
                backgroundRect.Height = bounds.Height - 1;
                graphics.FillRectangle(Brushes.LightGray, backgroundRect);

                // TODO: Use same color as marker
                Brush brush = Brushes.Purple;
                foreach (Clone clone in group.Clones)
                {
                    Rectangle cloneRect = new Rectangle();
                    cloneRect.X      = (int)Math.Floor(bounds.X + (double)clone.StartLine / linesOfCode * totalWidth);
                    cloneRect.Width  = (int)Math.Floor((double)clone.LineCount / linesOfCode * totalWidth);
                    cloneRect.Y      = bounds.Top;
                    cloneRect.Height = bounds.Height;

                    if (cloneRect.Right > bounds.X + totalWidth)
                    {
                        cloneRect.Width = bounds.X + totalWidth - cloneRect.X;
                    }

                    graphics.FillRectangle(brush, cloneRect);
                }

                graphics.DrawRectangle(Pens.Black, backgroundRect);
            }
            return(bitmap);
        }
        private void LoadClones()
        {
            _maximumLoc = Int32.MinValue;

            List <CloneGroup> cloneGroups = new List <CloneGroup>();
            Dictionary <SourceFile, CloneGroup> cloneGroupDictionary = new Dictionary <SourceFile, CloneGroup>();

            foreach (Clone clone in _cloneClass.Clones)
            {
                CloneGroup cloneGroup;
                if (!cloneGroupDictionary.TryGetValue(clone.SourceFile, out cloneGroup))
                {
                    _maximumLoc           = Math.Max(_maximumLoc, GetLinesOfCode(clone.SourceFile));
                    cloneGroup            = new CloneGroup();
                    cloneGroup.SourceFile = clone.SourceFile;
                    cloneGroupDictionary.Add(cloneGroup.SourceFile, cloneGroup);
                    cloneGroups.Add(cloneGroup);
                }

                cloneGroup.Clones.Add(clone);
            }

            dataGridView.Rows.Clear();

            foreach (CloneGroup cloneGroup in cloneGroups)
            {
                DataGridViewRow row = new DataGridViewRow();
                row.CreateCells(dataGridView);
                row.Cells[0].Value = Path.GetFileName(cloneGroup.SourceFile.Path);
                row.Cells[1].Value = cloneGroup.Clones.Count;
                row.Cells[2].Value = GetCloneOverviewBitmap(cloneGroup);
                row.Tag            = cloneGroup;
                dataGridView.Rows.Add(row);
            }

            dataGridView.Sort(dataGridView.SortedColumn, GetSortDirectionFromSortOrder(dataGridView.SortOrder));
        }