222 lines
11 KiB
C#
222 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace FPJ0000.Project
|
|
{
|
|
public partial class ctlLayout : Control
|
|
{
|
|
public ctlLayout()
|
|
{
|
|
InitializeComponent();
|
|
|
|
items = new List<itemdata>();
|
|
|
|
this.SetStyle(ControlStyles.UserPaint, true);
|
|
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
|
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
|
|
|
// Redraw when resized
|
|
this.SetStyle(ControlStyles.ResizeRedraw, true);
|
|
this.Resize += arLabel_Resize;
|
|
if (fontNo == null) fontNo = new Font("맑은 고딕", 12, FontStyle.Bold);
|
|
if (fontName == null) fontName = new Font("맑은 고딕", 10, FontStyle.Bold);
|
|
if (fontDue == null) fontDue = new Font("Consolas", 10, FontStyle.Bold);
|
|
}
|
|
|
|
|
|
public class itemdata
|
|
{
|
|
public string duedate { get; set; }
|
|
public string champion { get; set; }
|
|
public string body { get; set; }
|
|
public int no { get; set; }
|
|
public Color bodyColor { get; set; } = Color.Transparent;
|
|
public int project { get; set; }
|
|
public RectangleF rect { get; set; }
|
|
public string reserve { get; set; }
|
|
|
|
}
|
|
|
|
public List<itemdata> items;
|
|
public Font fontNo { get; set; }
|
|
public Font fontName { get; set; }
|
|
public Font fontDue { get; set; }
|
|
|
|
public delegate void itemclickhandler(itemdata item, MouseEventArgs e);
|
|
public event itemclickhandler itemclick;
|
|
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
|
{
|
|
base.OnMouseDown(e);
|
|
var item = items.Where(t => t.rect.Contains(e.Location)).FirstOrDefault();
|
|
if (item != null)
|
|
{
|
|
if (itemclick != null)
|
|
itemclick(item, e);
|
|
}
|
|
}
|
|
protected override void OnMouseClick(MouseEventArgs e)
|
|
{
|
|
base.OnMouseClick(e);
|
|
|
|
|
|
}
|
|
|
|
Boolean brect = true;
|
|
protected override void OnPaint(PaintEventArgs pe)
|
|
{
|
|
if (items == null || items.Count != 12)
|
|
{
|
|
for (int i = 1; i <= 12; i++)
|
|
{
|
|
items.Add(new itemdata()
|
|
{
|
|
no = i,
|
|
body = string.Empty,
|
|
champion = "담당자",
|
|
duedate = "만료일자",
|
|
rect = Rectangle.Empty
|
|
});
|
|
|
|
}
|
|
}
|
|
base.OnPaint(pe);
|
|
|
|
//우측에 문
|
|
//좌측에 사용자
|
|
//중앙에 가로로 작업영역 10개
|
|
var rectL = new RectangleF(DisplayRectangle.Left + Padding.Left,
|
|
DisplayRectangle.Top + Padding.Top,
|
|
DisplayRectangle.Width * 0.1f - (Padding.Left + Padding.Right),
|
|
DisplayRectangle.Height - (Padding.Top + Padding.Bottom));
|
|
|
|
var rectR = new RectangleF(DisplayRectangle.Left + (DisplayRectangle.Width * 0.9f) + Padding.Left,
|
|
DisplayRectangle.Top + Padding.Top,
|
|
DisplayRectangle.Width * 0.1f - (Padding.Left + Padding.Right),
|
|
DisplayRectangle.Height - (Padding.Top + Padding.Bottom));
|
|
|
|
var lw = DisplayRectangle.Width * 0.1f;
|
|
var rect = new RectangleF(DisplayRectangle.Left + Padding.Left + lw + Padding.Left,
|
|
DisplayRectangle.Top + Padding.Top,
|
|
DisplayRectangle.Width - (Padding.Left + Padding.Right) * 2 - lw * 2,
|
|
rectR.Height);
|
|
|
|
pe.Graphics.DrawRectangle(Pens.White, rectL.Left, rectL.Top, rectL.Width, rectL.Height);
|
|
pe.Graphics.DrawRectangle(Pens.Gold, rectR.Left, rectR.Top, rectR.Width, rectR.Height);
|
|
//pe.Graphics.DrawRectangle(new Pen(Color.Pink,5), rect.Left, rect.Top, rect.Width, rect.Height);
|
|
|
|
pe.Graphics.DrawString("DESK", this.Font, Brushes.White, rectL, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); ;
|
|
pe.Graphics.DrawString("DOOR", this.Font, Brushes.White, rectR, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); ;
|
|
|
|
//var fNo = new Font("Consolas", 20, FontStyle.Bold);
|
|
//내부그리드 그리기 2*5 배열이나.. 1칸이 총 2x2 칸으로 구성되니 2배로 한다.
|
|
var cnt = 1;
|
|
var itemp = 12;
|
|
var colcount = 4;
|
|
var rowcount = 3;
|
|
var itemw = (rect.Width / colcount) - (itemp * (colcount - 1));
|
|
var itemh = (rect.Height / rowcount) - (itemp * (rowcount - 1));
|
|
for (int i = 0; i < colcount; i++)
|
|
{
|
|
for (int j = 0; j < rowcount; j++)
|
|
{
|
|
var r = new RectangleF(
|
|
rect.Left + (i * itemw) + ((i + 1) * itemp),
|
|
rect.Top + (j * itemh) + ((j + 1) * itemp),
|
|
itemw,
|
|
itemh);
|
|
var data = items[cnt - 1];
|
|
|
|
var no = j * colcount + i + 1;
|
|
if (cnt == 12) continue;
|
|
|
|
pe.Graphics.DrawRectangle(Pens.White, r.Left, r.Top, r.Width, r.Height);
|
|
|
|
var rno = new RectangleF(r.Left, r.Top, 50f, 50f);
|
|
var rnm = new RectangleF(rno.Right + 5, r.Top, r.Width - rno.Width - 5, rno.Height);
|
|
|
|
if (string.IsNullOrEmpty(data.reserve))
|
|
{
|
|
var rdu = new RectangleF(r.Left, r.Bottom - 50f, r.Width, 50f);
|
|
var rbd = new RectangleF(r.Left + 5, rno.Bottom + 5, r.Width - 5 * 2, r.Height - rno.Height - 10 - rdu.Height);
|
|
|
|
pe.Graphics.FillRectangle(Brushes.White, rno);
|
|
pe.Graphics.DrawRectangle(Pens.White, rno.Left, rno.Top, rno.Width, rno.Height);
|
|
pe.Graphics.DrawString(no.ToString(), fontNo, Brushes.Black, rno, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
pe.Graphics.DrawRectangle(Pens.White, rnm.Left, rnm.Top, rnm.Width, rnm.Height);
|
|
pe.Graphics.DrawString(data.champion, fontName, Brushes.White, rnm, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
//pe.Graphics.DrawRectangle(Pens.White, rbd.Left, rbd.Top, rbd.Width, rbd.Height);
|
|
|
|
data.rect = r;
|
|
|
|
pe.Graphics.FillRectangle(new SolidBrush(data.bodyColor), rdu);
|
|
if (string.IsNullOrEmpty(data.duedate))
|
|
pe.Graphics.DrawString("만료일없음", fontDue, Brushes.White, rdu, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
else
|
|
pe.Graphics.DrawString(data.duedate, fontDue, Brushes.White, rdu, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
pe.Graphics.DrawRectangle(Pens.White, rdu.Left, rdu.Top, rdu.Width, rdu.Height);
|
|
|
|
|
|
|
|
pe.Graphics.DrawString(data.body, this.Font, new SolidBrush(this.ForeColor), rbd, new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Near });
|
|
|
|
}
|
|
else
|
|
{
|
|
var rdu = new RectangleF(r.Left, r.Bottom - 105f, r.Width, 50f);
|
|
var rbd = new RectangleF(r.Left + 5, rno.Bottom + 5, r.Width - 5 * 2, r.Height - rno.Height - 10 - rdu.Height - 50);
|
|
var rrv = new RectangleF(r.Left + 5, rdu.Bottom + 5, rdu.Width - 10, 50f - 5);
|
|
|
|
pe.Graphics.FillRectangle(Brushes.White, rno);
|
|
pe.Graphics.DrawRectangle(Pens.White, rno.Left, rno.Top, rno.Width, rno.Height);
|
|
pe.Graphics.DrawString(no.ToString(), fontNo, Brushes.Black, rno, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
pe.Graphics.DrawRectangle(Pens.White, rnm.Left, rnm.Top, rnm.Width, rnm.Height);
|
|
pe.Graphics.DrawString(data.champion, fontName, Brushes.White, rnm, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
//pe.Graphics.DrawRectangle(Pens.White, rbd.Left, rbd.Top, rbd.Width, rbd.Height);
|
|
|
|
data.rect = r;
|
|
|
|
pe.Graphics.FillRectangle(new SolidBrush(data.bodyColor), rdu);
|
|
if (string.IsNullOrEmpty( data.duedate ))
|
|
pe.Graphics.DrawString("만료일없음", fontDue, Brushes.White, rdu, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
else
|
|
pe.Graphics.DrawString(data.duedate, fontDue, Brushes.White, rdu, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
pe.Graphics.DrawRectangle(Pens.White, rdu.Left, rdu.Top, rdu.Width, rdu.Height);
|
|
pe.Graphics.DrawString(data.body, this.Font, new SolidBrush(this.ForeColor), rbd, new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Near });
|
|
|
|
pe.Graphics.FillRectangle(Brushes.SkyBlue, rrv);
|
|
pe.Graphics.DrawString("다음예약 => " + data.reserve, fontNo, Brushes.Black, rrv, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
|
|
pe.Graphics.DrawRectangle(Pens.DimGray, rrv.Left, rrv.Top, rrv.Width, rrv.Height);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cnt += 1;
|
|
|
|
}
|
|
}
|
|
// fNo.Dispose();
|
|
if (brect) brect = false;
|
|
}
|
|
|
|
|
|
|
|
void arLabel_Resize(object sender, EventArgs e)
|
|
{
|
|
brect = true;
|
|
Invalidate();
|
|
}
|
|
}
|
|
}
|