public void DrawKanbanItemFrameNonBlockedTest() { GraphicService service = new GraphicService(); KanbanItem item = new KanbanItem("C1","US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); var rec = service.GetKanbanItemSize(new Point(0, 0), 400, 20, 20, item); Image image = new Bitmap(rec.Width, rec.Height); using (var g = Graphics.FromImage(image)) { service.DrawOneKanbanItem(g, new Point(0, 0), 400, 20, 20, item); image.Save(@"c:\temp\pngTempNonBlocked.png", ImageFormat.Png); } }
public void DrawOneKanbanColumnTest() { GraphicService service = new GraphicService(); KanbanItem item0 = new KanbanItem("C1","US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); KanbanItem item1 = new KanbanItem("C1","US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas","BLOCKED BLOCKED BLOCKED BBBBBBBB"); //KanbanItem item2 = new KanbanItem("US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); //KanbanItem item3 = new KanbanItem("US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); //KanbanItem item4 = new KanbanItem("US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); //KanbanItem item5 = new KanbanItem("US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); //KanbanItem item6 = new KanbanItem("US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); List<KanbanItem> items =new List<KanbanItem>(){item0,item1}; var rec = service.GetOneKanbanColumnSize(new Point(0, 0), 400, 20, 50, 20,100, items); Image image=new Bitmap(rec.Width,rec.Height); using (var g = Graphics.FromImage(image)) { service.DrawOneKanbanColumn(g, new Point(0, 0), 400, 20, 50, 20,"Development",100, items); image.Save(@"c:\temp\pngTempOneColumn.png",ImageFormat.Png); } }
public void DrawWholeKanbanTest() { GraphicService service = new GraphicService(); KanbanItem item0 = new KanbanItem("C1", "US1234", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); KanbanItem item1 = new KanbanItem("C1", "DE4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas", "BLOCKED BLOCKED BLOCKED BBBBBBBB"); KanbanItem item2 = new KanbanItem("C2", "US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxddsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); KanbanItem item3 = new KanbanItem("C2", "US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxefadsfasefaefasdfsdfsafas"); KanbanItem item4 = new KanbanItem("C3", "US22221", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxdsdfgsdfgsfgsdsssseeqqzxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); KanbanItem item5 = new KanbanItem("C4", "US4321", "Cheng Huang", "aabbccddxxxxxxxxxxxxxxxxxxxxxxxxxbbbbdeevsdfaefefadsfasefaefasdfsdfsafas"); KanbanItem item6 = new KanbanItem("C4", "US4321", "Cheng Huang", "aabbccfaefasdfsdfsafas", "abeedde"); List<KanbanItem> itemg1 = new List<KanbanItem>(){item0,item1}; List<KanbanItem> itemg2 = new List<KanbanItem>(){item2, item3, item0, item5}; List<KanbanItem> itemg3 = new List<KanbanItem>(){item4}; List<KanbanItem> itemg4 = new List<KanbanItem>(){item5, item6}; Dictionary<string, List<KanbanItem>> dict =new Dictionary<string, List<KanbanItem>>(); dict.Add("C1", itemg1); dict.Add("C2", itemg2); dict.Add("C3", itemg3); dict.Add("C4", itemg4); Image img = service.DrawWholeKanban(400, 20, 50, 20, 100, dict); img.Save(@"c:\temp\pngTempWholeKanban.png",ImageFormat.Png); }
public Rectangle DrawOneKanbanItem(Graphics g, Point startPoint, int recWidth, int headerHeight, int textMargin, KanbanItem item) { float currentHeight = 0; var halfMargin = textMargin/2; //Header, solid rectangle Brush headerBrush=new SolidBrush(Color.DarkOrange); Rectangle headerRec = new Rectangle(new Point(startPoint.X, startPoint.Y), new Size(recWidth+1, headerHeight)); Font font = new Font("Segoe UI", 20, FontStyle.Regular); Debug.WriteLine("Draw:currentHeight0:"+currentHeight); currentHeight = headerRec.Bottom + halfMargin; Debug.WriteLine("Draw:currentHeight1:" + currentHeight); //FormattedId Brush formattedIdBrush = new SolidBrush(Color.DeepSkyBlue); var formattedIdSize = g.MeasureString(item.FormattedId, font); g.DrawString(item.FormattedId, font, formattedIdBrush, headerRec.Left + textMargin, currentHeight ); currentHeight += formattedIdSize.Height + textMargin; Debug.WriteLine("Draw:currentHeight2:" + currentHeight); //AssignedToId Brush assignedToBrush = new SolidBrush(Color.Black); var assignedToSize = g.MeasureString(item.AssignedTo, font); g.DrawString(item.AssignedTo, font, assignedToBrush, headerRec.Left + textMargin, currentHeight); currentHeight += assignedToSize.Height + textMargin; Debug.WriteLine("Draw:currentHeight3:" + currentHeight); //Description Brush descriptionBrush = new SolidBrush(Color.Black); var descriptionSize = g.MeasureString(item.StoryDescription, font, headerRec.Width - 2*textMargin); RectangleF recDescription = new RectangleF(new PointF(headerRec.Left + textMargin, currentHeight), descriptionSize); g.DrawString(item.StoryDescription, font, descriptionBrush, recDescription); currentHeight += recDescription.Height + textMargin; Debug.WriteLine("Draw:currentHeight4:" + currentHeight); if (item.IsBlocked) { Image blockedIcon = Resources.blocked; var blockedReasonSize = g.MeasureString(item.BlockedReason, font, headerRec.Width - 2 * textMargin - blockedIcon.Width - halfMargin); SizeF blockedReasonBackgroundSize = new SizeF(headerRec.Width -2 * textMargin,blockedReasonSize.Height); Brush blockedReasonBackgroundBrush = new SolidBrush(Color.LightGray); g.FillRectangle(blockedReasonBackgroundBrush, new RectangleF(new PointF(headerRec.Left + textMargin, currentHeight), blockedReasonBackgroundSize)); Brush blockedReasonBrush = new SolidBrush(Color.Black); RectangleF recBlockedReason = new RectangleF(new PointF(headerRec.Left + blockedIcon.Width + textMargin + halfMargin, currentHeight), blockedReasonSize); g.DrawString(item.BlockedReason,font,blockedReasonBrush,recBlockedReason ); RectangleF recBlockedIconSmall = new RectangleF(headerRec.Left + textMargin + halfMargin, currentHeight + recBlockedReason.Height / 2 - blockedIcon.Height / 2, blockedIcon.Width, blockedIcon.Height); g.DrawImage(blockedIcon, recBlockedIconSmall); currentHeight += blockedReasonBackgroundSize.Height + textMargin; } currentHeight += halfMargin; //Frame, wire frame rectangle Pen framePen = item.IsBlocked ? new Pen(Color.DarkRed, 2) : new Pen(Color.Gray, 2); //g.Clear(Color.White); Rectangle recFrame = new Rectangle(startPoint,new Size(recWidth,(int)currentHeight -startPoint.Y)); g.DrawRectangle(framePen, recFrame); g.FillRectangle(headerBrush, headerRec); return recFrame; }
public Rectangle GetKanbanItemSize(Point startPoint, int recWidth, int headerHeight, int textMargin, KanbanItem item) { Image img =new Bitmap(1,1); using (var g = Graphics.FromImage(img)) { float currentHeight = 0; var halfMargin = textMargin / 2; Rectangle headerRec = new Rectangle(new Point(startPoint.X, startPoint.Y), new Size(recWidth + 1, headerHeight)); Font font = new Font("Segoe UI", 20, FontStyle.Regular); currentHeight += headerRec.Bottom + halfMargin; var formattedIdSize = g.MeasureString(item.FormattedId, font); var assignedToSize = g.MeasureString(item.AssignedTo, font); var descriptionSize = g.MeasureString(item.StoryDescription, font, headerRec.Width - 2 * textMargin); RectangleF recDescription = new RectangleF(new PointF(headerRec.Left + textMargin, currentHeight + textMargin), descriptionSize); currentHeight += formattedIdSize.Height + textMargin; currentHeight += assignedToSize.Height + textMargin; currentHeight += recDescription.Height + textMargin; if (item.IsBlocked) { Image blockedIcon = Resources.blocked; var blockedReasonSize = g.MeasureString(item.BlockedReason, font, headerRec.Width - 2 * textMargin - blockedIcon.Width - halfMargin); SizeF blockedReasonBackgroundSize = new SizeF(headerRec.Width - 2 * textMargin, blockedReasonSize.Height); currentHeight += blockedReasonBackgroundSize.Height +textMargin; } currentHeight += halfMargin; //currentBottom += halfMargin; //Frame, wire frame rectangle Rectangle recFrame = new Rectangle(startPoint, new Size(recWidth, (int)currentHeight)); return recFrame; } }