diff --git a/ControlUse/Timeline/ChartConstants.cs b/ControlUse/Timeline/ChartConstants.cs deleted file mode 100644 index 324c2bb..0000000 --- a/ControlUse/Timeline/ChartConstants.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using Timelines.Model; -using System.Windows.Forms; -using System.Drawing; - -namespace Timelines -{ - public static class ChartConstants - { - public const int BarStartRight = 25; - public const int BarStartLeft = 50; - public const int HeaderTimeStartTop = 30; - public const int BarStartTop = 50; - public const int BarHeight = 40; - public const int BarSpace = 8; - public const int ToolTipTitleHeight = 14; - public const int ToolTipfontHeight = 12; - public const int MinimumIntervalInMinutes = 5; - public static Font RowFont = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Point); - public static Font TitleFont = new Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Point); - public static Pen GridColor = Pens.LightBlue; - } -} diff --git a/ControlUse/Timeline/Model/BarModel.cs b/ControlUse/Timeline/Model/BarModel.cs deleted file mode 100644 index 1954bf8..0000000 --- a/ControlUse/Timeline/Model/BarModel.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Drawing; - -namespace Timelines.Model -{ - public class BarModel - { - public DateTime StartValue { get; set; } - public DateTime EndValue { get; set; } - public Color Color { get; set; } - public string Name { get; set; } - public TimeSpan Duration { get; set; } - public int RowIndex { get; set; } - public bool IsClicked { get; set; } - public bool IsMouseOver { get; set; } - public bool Visible { get; set; } - public Rectangle BarRectangle { get; set; } - } - -} diff --git a/ControlUse/Timeline/Model/HeaderModel.cs b/ControlUse/Timeline/Model/HeaderModel.cs deleted file mode 100644 index 0d3faa1..0000000 --- a/ControlUse/Timeline/Model/HeaderModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Timelines.Model -{ - public class HeaderModel - { - public int StartLocation { get; set; } - public DateTime HeaderDateTime { get; set; } - } -} diff --git a/ControlUse/Timeline/Model/ItemModel.cs b/ControlUse/Timeline/Model/ItemModel.cs deleted file mode 100644 index 4b0b2db..0000000 --- a/ControlUse/Timeline/Model/ItemModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Drawing; - -namespace Timelines.Model -{ - public class ItemModel - { - public string ItemName { get; set; } - public DateTime StartDate { get; set; } - public Color ItemColor { get; set; } - public TimeSpan Duration { get; set; } - } -} diff --git a/ControlUse/Timeline/Processor/BarChartProcessor.cs b/ControlUse/Timeline/Processor/BarChartProcessor.cs deleted file mode 100644 index de92ed9..0000000 --- a/ControlUse/Timeline/Processor/BarChartProcessor.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Runtime.Remoting.Messaging; -using Timelines.Model; -using Timelines; -using System.Threading.Tasks; - -namespace Timelines.Processor -{ - public class BarChartProcessor - { - private List ItemNameList { get; set; } - public List GetBarList(List itemList) - { - var barList = new List(); - itemList.ForEach(x => - { - var bar = new BarModel - { - Name = x.ItemName, - StartValue = x.StartDate, - EndValue = x.StartDate + x.Duration, - Duration = x.Duration, - Color = x.ItemColor, - RowIndex = GetRowIndex(x.ItemName) - }; - barList.Add(bar); - }); - return barList; - } - - private int GetRowIndex(string barName) - { - if (ItemNameList == null) - { - ItemNameList = new List(); - } - if (!ItemNameList.Contains(barName)) - { - ItemNameList.Add(barName); - } - return ItemNameList.FindIndex(x => x == barName); - } - - public List GetFullHeaderList(DateTime startDate, DateTime endDate, int availableWidth, Font timeFont) - { - var headerList = new List(); - - var timeInterval = endDate - startDate; - - var headerSpace = System.Windows.Forms.TextRenderer.MeasureText("12-12-12", timeFont); - - var numberOfHeaders = availableWidth / headerSpace.Width; - - var timeIncrement = new TimeSpan(timeInterval.Ticks/numberOfHeaders); - - var index = 0; - - for (var date = startDate; date <= endDate; date = date.Add(timeIncrement), index ++) - { - var header = new HeaderModel - { - HeaderDateTime = date, - StartLocation = ChartConstants.BarStartLeft + (index * headerSpace.Width) - }; - - headerList.Add(header); - } - - return headerList; - } - - public bool MouseInsideBar(Point mousePosition, BarModel bar) - { - return mousePosition.X >= bar.BarRectangle.Left - && mousePosition.X <= bar.BarRectangle.Right - && mousePosition.Y >= bar.BarRectangle.Top - && mousePosition.Y <= bar.BarRectangle.Bottom; - - } - internal List MouseClickHandler(List list, Point localMousePosition) - { - Parallel.ForEach(list, bar => - { - if (MouseInsideBar(localMousePosition, bar) && bar.Visible) - { - bar.IsClicked = true; - } - else - { - bar.IsClicked = false; - } - }); - - return list; - } - internal double GetPixelsPerSecond(List headerList) - { - var timeBetweenHeaders = headerList[1].HeaderDateTime - headerList[0].HeaderDateTime; - var widthBetween = headerList[1].StartLocation - headerList[0].StartLocation; - var pixelsPerSecond = widthBetween / timeBetweenHeaders.TotalSeconds; - return pixelsPerSecond; - } - - internal BarModel GetBar(BarModel bar, DateTime startDate, double pixelsPerSecond, int scrollPosition, int chartWidth) - { - var availableWidth = chartWidth - ChartConstants.BarStartLeft - ChartConstants.BarStartRight; - - bar.Visible = true; - - var startTimeSpan = bar.StartValue - startDate; - var startLocation = (int)(pixelsPerSecond * startTimeSpan.TotalSeconds); - var x = ChartConstants.BarStartLeft + startLocation; - var y = ChartConstants.BarStartTop + (ChartConstants.BarHeight * (bar.RowIndex - scrollPosition)) + - (ChartConstants.BarSpace * (bar.RowIndex - scrollPosition)) + 4; - var width = (int)(pixelsPerSecond * bar.Duration.TotalSeconds); - - //restrict the width if longer than the right size - if (x + width > (chartWidth - ChartConstants.BarStartRight)) - { - width = availableWidth + ChartConstants.BarStartLeft - x; - } - - bar.BarRectangle = new Rectangle(x, y, width, ChartConstants.BarHeight); - - return bar; - } - } -} \ No newline at end of file diff --git a/ControlUse/Timeline/Properties/AssemblyInfo.cs b/ControlUse/Timeline/Properties/AssemblyInfo.cs deleted file mode 100644 index 77bbfad..0000000 --- a/ControlUse/Timeline/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// 有关程序集的一般信息由以下 -// 控制。更改这些特性值可修改 -// 与程序集关联的信息。 -[assembly: AssemblyTitle("Timelines")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Timelines")] -[assembly: AssemblyCopyright("Copyright © 2024")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// 将 ComVisible 设置为 false 会使此程序集中的类型 -//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 -//请将此类型的 ComVisible 特性设置为 true。 -[assembly: ComVisible(false)] - -// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID -[assembly: Guid("fcaa62db-0f2f-449c-8511-c6f0821688a7")] - -// 程序集的版本信息由下列四个值组成: -// -// 主版本 -// 次版本 -// 生成号 -// 修订号 -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ControlUse/Timeline/Timeline.Designer.cs b/ControlUse/Timeline/Timeline.Designer.cs deleted file mode 100644 index 25ba3b8..0000000 --- a/ControlUse/Timeline/Timeline.Designer.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace Timelines -{ - partial class Timeline - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region 组件设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要修改 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - } - - #endregion - } -} diff --git a/ControlUse/Timeline/Timeline.cs b/ControlUse/Timeline/Timeline.cs deleted file mode 100644 index 033a4d9..0000000 --- a/ControlUse/Timeline/Timeline.cs +++ /dev/null @@ -1,314 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using Timelines.Model; -using Timelines.Processor; - -namespace Timelines -{ - public partial class Timeline : UserControl - { - #region public properties - public SolidBrush HoverClickSolidBrush { get; set; } - public Font RowFont { get; set; } - public Font DateFont { get; set; } - public Font TimeFont { get; set; } - #endregion - - #region private properties - private ToolTip ToolTip { get; set; } - private VScrollBar VScrollBar1 { get; set; } - private int AvailableWidth { get; set; } - private Point OldMousePosition { get; set; } - private int ScrollPosition { get; set; } - private List ToolTipTextList { get; set; } - private string ToolTipTextTitle { get; set; } - private List BarList { get; set; } - private DateTime StartDate { get; set; } - private int DistinctItemCount { get; set; } - private DateTime EndDate { get; set; } - #endregion - public Timeline() - { - InitializeComponent(); - } - public void ShowBarChart(DateTime chartStartDate, DateTime chartEndDate, List items) - { - this.StartDate = chartStartDate; - this.EndDate = chartEndDate; - var proc = new BarChartProcessor(); - this.BarList = proc.GetBarList(items); - this.DistinctItemCount = items.Select(i => i.ItemName).Distinct().Count(); - - this.Refresh(); - } - private void ChartMouseMove(Object sender, MouseEventArgs e) - { - var localMousePosition = new Point(e.X, e.Y); - - if (BarList == null || BarList.Count == 0) - { - return; - } - - if (localMousePosition == this.OldMousePosition) - { - return; - } - - var proc = new BarChartProcessor(); - - var mouseOverObject = false; - var tempText = new List(); - var tempTitle = ""; - - Parallel.ForEach(this.BarList, bar => - { - if (proc.MouseInsideBar(localMousePosition, bar) && bar.Visible) - { - bar.IsMouseOver = true; - tempTitle = bar.Name; - tempText.Add("Event Start: " + bar.StartValue.ToUniversalTime()); - tempText.Add("Event End: " + bar.EndValue.ToUniversalTime()); - mouseOverObject = true; - } - else - { - bar.IsMouseOver = false; - } - }); - - this.ToolTipTextList = tempText; - this.ToolTipTextTitle = tempTitle; - this.ToolTip.SetToolTip(this, this.ToolTipTextList.Count > 0 ? this.ToolTipTextList.ToString() : ""); - - if (mouseOverObject) - { - this.Refresh(); - } - - this.OldMousePosition = localMousePosition; - } - private void ChartMouseClick(Object sender, MouseEventArgs e) - { - if (BarList == null || BarList.Count == 0) - { - return; - } - - var localMousePosition = new Point(e.X, e.Y); - - var proc = new BarChartProcessor(); - - this.BarList = proc.MouseClickHandler(this.BarList, localMousePosition); - } - private void ChartMouseWheel(object sender, MouseEventArgs e) - { - this.VScrollBar1.Focus(); - } - private void Timeline_Load(object sender, EventArgs e) - { - //initialize public properties - RowFont = TimeFont = DateFont = new Font("Segoe UI", 10, FontStyle.Regular, GraphicsUnit.Point); - HoverClickSolidBrush = new SolidBrush(Color.LightBlue); - BackColor = Color.White; - - //initialize mouse controls - MouseMove += ChartMouseMove; - MouseWheel += ChartMouseWheel; - MouseClick += ChartMouseClick; - - //initialize Tooltip - this.ToolTip = new ToolTip - { - OwnerDraw = true - }; - this.ToolTip.Draw += ToolTipText_Draw; - this.ToolTip.Popup += ToolTipText_Popup; - - //Flicker free drawing - SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); - - //ScrollBar - this.VScrollBar1 = new VScrollBar - { - Dock = DockStyle.Right, - Visible = false - }; - Controls.Add(this.VScrollBar1); - this.VScrollBar1.Scroll += vScrollBar1_Scroll; - } - private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) - { - this.ScrollPosition = this.VScrollBar1.Value; - this.Refresh(); - } - private void ToolTipText_Draw(Object sender, DrawToolTipEventArgs e) - { - if (this.ToolTipTextList.Count == 0) - { - return; - } - e.Graphics.FillRectangle(Brushes.White, e.Bounds); - e.Graphics.DrawString(this.ToolTipTextTitle, ChartConstants.TitleFont, Brushes.Black, 5, 0); - - // Draws the lines in the text box - foreach (var item in this.ToolTipTextList) - { - var stringY = (ChartConstants.ToolTipTitleHeight - ChartConstants.ToolTipfontHeight - e.Graphics.MeasureString(item, ChartConstants.RowFont).Height) / 2 + - 10 + ((this.ToolTipTextList.IndexOf(item) + 1) * 14); - e.Graphics.DrawString(item, ChartConstants.RowFont, Brushes.Black, 5, stringY); - } - } - private void ToolTipText_Popup(Object sender, PopupEventArgs e) - { - var toolTipHeight = (ChartConstants.ToolTipTitleHeight + 4) + (this.ToolTipTextList.Count * (ChartConstants.ToolTipfontHeight + 3)); - e.ToolTipSize = new Size(230, toolTipHeight); - } - private void PaintChart(Graphics graphics) - { - if (BarList == null || BarList.Count == 0) - { - return; - } - var proc = new BarChartProcessor(); - var headerList = proc.GetFullHeaderList(this.StartDate, this.EndDate, this.Width, this.TimeFont); - if (headerList.Count == 0 || this.DistinctItemCount == 0) - { - return; - } - - var pixelsPerSecond = proc.GetPixelsPerSecond(headerList); - - this.AvailableWidth = Width - ChartConstants.BarStartLeft - ChartConstants.BarStartRight; - - if (this.DistinctItemCount * (ChartConstants.BarHeight + ChartConstants.BarSpace) > Height) - { - this.VScrollBar1.Visible = true; - this.VScrollBar1.Maximum = this.DistinctItemCount - 3; - } - - graphics.Clear(BackColor); - DrawChartHeadersAndNet(graphics, headerList); - - DrawBars(graphics, this.BarList, pixelsPerSecond); - } - protected override void OnPaint(PaintEventArgs pe) - { - PaintChart(pe.Graphics); - } - private void DrawBars(Graphics graphics, IEnumerable barList, double pixelsPerSecond) - { - //list of machineNames to add to the left of each row - var rowTitleList = new List(); - - var proc = new BarChartProcessor(); - - // Draws each bar - foreach (var bar in barList) - { - var numberOfBarsInControl = (Height - ChartConstants.BarStartTop) / (ChartConstants.BarHeight + ChartConstants.BarSpace); - - if ((bar.RowIndex >= this.ScrollPosition && - bar.RowIndex < numberOfBarsInControl + this.ScrollPosition)) - { - var newBar = proc.GetBar(bar, this.StartDate, pixelsPerSecond, ScrollPosition, this.Width); - DrawBarAndRowText(newBar, rowTitleList, graphics); - } - else - { - bar.Visible = false; - } - } - } - private void DrawBarAndRowText(BarModel newBar, ICollection rowTitleList, Graphics graphics) - { - var barBrush = new SolidBrush(newBar.Color); - if (newBar.IsMouseOver || newBar.IsClicked) - { - barBrush = HoverClickSolidBrush; - } - - graphics.FillRectangle(barBrush, newBar.BarRectangle); - graphics.DrawRectangle(Pens.Black, newBar.BarRectangle); - - // Draws the rowtext, only once for each machine - if (!rowTitleList.Contains(newBar.Name)) - { - graphics.DrawString(newBar.Name, - RowFont, - Brushes.Black, - 0, - ChartConstants.BarStartTop + (ChartConstants.BarHeight * (newBar.RowIndex - this.ScrollPosition)) + - (ChartConstants.BarSpace * (newBar.RowIndex - this.ScrollPosition))); - - rowTitleList.Add(newBar.Name); - } - } - private void DrawChartHeadersAndNet(Graphics graphics, IList headerList) - { - var verticalLineLastY = ChartConstants.BarStartTop + (this.DistinctItemCount - this.ScrollPosition) * (ChartConstants.BarHeight + ChartConstants.BarSpace); - - //draw headers - foreach (var header in headerList) - { - //draw the date when there is a change of day - var index = headerList.IndexOf(header); - - if (headerList.IndexOf(header) == 0 - || header.HeaderDateTime.Day != headerList[index - 1].HeaderDateTime.Day) - { - graphics.DrawString( - header.HeaderDateTime.ToShortDateString(), - DateFont, - Brushes.Black, - header.StartLocation, - 0); - } - - graphics.DrawString( - header.HeaderDateTime.ToShortTimeString(), - TimeFont, - Brushes.Black, - header.StartLocation, - ChartConstants.HeaderTimeStartTop); - - //draw vertical line under header - graphics.DrawLine( - ChartConstants.GridColor, - header.StartLocation, - ChartConstants.HeaderTimeStartTop, - header.StartLocation, - verticalLineLastY); - - } - - //draw last vertical line - graphics.DrawLine( - ChartConstants.GridColor, - ChartConstants.BarStartLeft + this.AvailableWidth, - ChartConstants.HeaderTimeStartTop, - ChartConstants.BarStartLeft + this.AvailableWidth, - verticalLineLastY); - - //draw horizontal net - for (var index = 0; index < this.DistinctItemCount; index++) - { - var y = ChartConstants.BarStartTop + index * (ChartConstants.BarHeight + ChartConstants.BarSpace); - graphics.DrawLine( - ChartConstants.GridColor, - ChartConstants.BarStartLeft, - y, - ChartConstants.BarStartLeft + this.AvailableWidth, - y - ); - } - } - } -} diff --git a/ControlUse/Timeline/TimelineChart.Designer.cs b/ControlUse/Timeline/TimelineChart.Designer.cs deleted file mode 100644 index 9e9636b..0000000 --- a/ControlUse/Timeline/TimelineChart.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -namespace Timeline -{ - partial class TimelineChart - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // Timeline - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.MinimumSize = new System.Drawing.Size(100, 100); - this.Name = "Timeline"; - this.Size = new System.Drawing.Size(157, 136); - this.Load += new System.EventHandler(this.Timeline_Load); - this.ResumeLayout(false); - - } - - #endregion - } -} diff --git a/ControlUse/Timeline/TimelineChart.cs b/ControlUse/Timeline/TimelineChart.cs deleted file mode 100644 index 632f9f1..0000000 --- a/ControlUse/Timeline/TimelineChart.cs +++ /dev/null @@ -1,318 +0,0 @@ -/// -/// Adds a timeline or Gantt user control. -/// See Timeline Test for usage. -/// Created by Maxime Jacques - 2014 -/// Parts of code and inspiration from VBGanttChart v0.55 -/// by Adrian "Adagio" Grau http://www.codeproject.com/Articles/20731/Gantt-Chart -/// - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Threading.Tasks; -using System.Windows.Forms; -using Timeline.Model; -using Timeline.Processor; - -namespace Timeline -{ - public partial class TimelineChart : UserControl - { - #region public properties - public SolidBrush HoverClickSolidBrush { get; set; } - public Font RowFont { get; set; } - public Font DateFont { get; set; } - public Font TimeFont { get; set; } - #endregion - - #region private properties - private ToolTip ToolTip { get; set; } - private VScrollBar VScrollBar1 { get; set; } - private int AvailableWidth { get; set; } - private Point OldMousePosition { get; set; } - private int ScrollPosition { get; set; } - private List ToolTipTextList { get; set; } - private string ToolTipTextTitle { get; set; } - private List BarList { get; set; } - private DateTime StartDate { get; set; } - private int DistinctItemCount { get; set; } - private DateTime EndDate { get; set; } - #endregion - public TimelineChart() - { - InitializeComponent(); - } - public void ShowBarChart(DateTime chartStartDate, DateTime chartEndDate, List items) - { - this.StartDate = chartStartDate; - this.EndDate = chartEndDate; - var proc = new BarChartProcessor(); - this.BarList = proc.GetBarList(items); - this.DistinctItemCount = items.Select(i => i.ItemName).Distinct().Count(); - - this.Refresh(); - } - private void ChartMouseMove(Object sender, MouseEventArgs e) - { - var localMousePosition = new Point(e.X, e.Y); - - if (BarList == null || BarList.Count == 0) - { - return; - } - - if (localMousePosition == this.OldMousePosition) - { - return; - } - - var proc = new BarChartProcessor(); - - var mouseOverObject = false; - var tempText = new List(); - var tempTitle = ""; - - Parallel.ForEach(this.BarList, bar => - { - if (proc.MouseInsideBar(localMousePosition, bar) && bar.Visible) - { - bar.IsMouseOver = true; - tempTitle = bar.Name; - tempText.Add("Event Start: " + bar.StartValue.ToUniversalTime()); - tempText.Add("Event End: " + bar.EndValue.ToUniversalTime()); - mouseOverObject = true; - } - else - { - bar.IsMouseOver = false; - } - }); - - this.ToolTipTextList = tempText; - this.ToolTipTextTitle = tempTitle; - this.ToolTip.SetToolTip(this, this.ToolTipTextList.Count > 0 ? this.ToolTipTextList.ToString() : ""); - - if (mouseOverObject) - { - this.Refresh(); - } - - this.OldMousePosition = localMousePosition; - } - private void ChartMouseClick(Object sender, MouseEventArgs e) - { - if (BarList == null || BarList.Count == 0) - { - return; - } - - var localMousePosition = new Point(e.X, e.Y); - - var proc = new BarChartProcessor(); - - this.BarList = proc.MouseClickHandler(this.BarList, localMousePosition); - } - private void ChartMouseWheel(object sender, MouseEventArgs e) - { - this.VScrollBar1.Focus(); - } - private void Timeline_Load(object sender, EventArgs e) - { - //initialize public properties - RowFont = TimeFont = DateFont = new Font("Segoe UI", 10, FontStyle.Regular, GraphicsUnit.Point); - HoverClickSolidBrush = new SolidBrush(Color.LightBlue); - BackColor = Color.White; - - //initialize mouse controls - MouseMove += ChartMouseMove; - MouseWheel += ChartMouseWheel; - MouseClick += ChartMouseClick; - - //initialize Tooltip - this.ToolTip = new ToolTip - { - OwnerDraw = true - }; - this.ToolTip.Draw += ToolTipText_Draw; - this.ToolTip.Popup += ToolTipText_Popup; - - //Flicker free drawing - SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); - - //ScrollBar - this.VScrollBar1 = new VScrollBar - { Dock = DockStyle.Right, - Visible = false - }; - Controls.Add(this.VScrollBar1); - this.VScrollBar1.Scroll += vScrollBar1_Scroll; - } - private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) - { - this.ScrollPosition = this.VScrollBar1.Value; - this.Refresh(); - } - private void ToolTipText_Draw(Object sender, DrawToolTipEventArgs e) - { - if (this.ToolTipTextList.Count == 0) - { - return; - } - e.Graphics.FillRectangle(Brushes.White, e.Bounds); - e.Graphics.DrawString(this.ToolTipTextTitle, ChartConstants.TitleFont, Brushes.Black, 5, 0); - - // Draws the lines in the text box - foreach (var item in this.ToolTipTextList) - { - var stringY = (ChartConstants.ToolTipTitleHeight - ChartConstants.ToolTipfontHeight - e.Graphics.MeasureString(item, ChartConstants.RowFont).Height) / 2 + - 10 + ((this.ToolTipTextList.IndexOf(item) + 1) * 14); - e.Graphics.DrawString(item, ChartConstants.RowFont, Brushes.Black, 5, stringY); - } - } - private void ToolTipText_Popup(Object sender, PopupEventArgs e) - { - var toolTipHeight = (ChartConstants.ToolTipTitleHeight + 4) + (this.ToolTipTextList.Count * (ChartConstants.ToolTipfontHeight + 3)); - e.ToolTipSize = new Size(230, toolTipHeight); - } - private void PaintChart(Graphics graphics) - { - if (BarList == null || BarList.Count == 0) - { - return; - } - var proc = new BarChartProcessor(); - var headerList = proc.GetFullHeaderList(this.StartDate, this.EndDate, this.Width, this.TimeFont); - if (headerList.Count == 0 || this.DistinctItemCount == 0) - { - return; - } - - var pixelsPerSecond = proc.GetPixelsPerSecond(headerList); - - this.AvailableWidth = Width - ChartConstants.BarStartLeft - ChartConstants.BarStartRight; - - if (this.DistinctItemCount * (ChartConstants.BarHeight + ChartConstants.BarSpace) > Height) - { - this.VScrollBar1.Visible = true; - this.VScrollBar1.Maximum = this.DistinctItemCount - 3; - } - - graphics.Clear(BackColor); - DrawChartHeadersAndNet(graphics, headerList); - - DrawBars(graphics, this.BarList, pixelsPerSecond); - } - protected override void OnPaint(PaintEventArgs pe) - { - PaintChart(pe.Graphics); - } - private void DrawBars(Graphics graphics, IEnumerable barList, double pixelsPerSecond) - { - //list of machineNames to add to the left of each row - var rowTitleList = new List(); - - var proc = new BarChartProcessor(); - - // Draws each bar - foreach (var bar in barList) - { - var numberOfBarsInControl = (Height - ChartConstants.BarStartTop)/(ChartConstants.BarHeight + ChartConstants.BarSpace); - - if ((bar.RowIndex >= this.ScrollPosition && - bar.RowIndex < numberOfBarsInControl + this.ScrollPosition)) - { - var newBar = proc.GetBar(bar, this.StartDate, pixelsPerSecond, ScrollPosition, this.Width); - DrawBarAndRowText(newBar, rowTitleList, graphics); - } - else - { - bar.Visible = false; - } - } - } - private void DrawBarAndRowText(BarModel newBar, ICollection rowTitleList, Graphics graphics) - { - var barBrush = new SolidBrush(newBar.Color); - if (newBar.IsMouseOver || newBar.IsClicked) - { - barBrush = HoverClickSolidBrush; - } - - graphics.FillRectangle(barBrush, newBar.BarRectangle); - graphics.DrawRectangle(Pens.Black, newBar.BarRectangle); - - // Draws the rowtext, only once for each machine - if (!rowTitleList.Contains(newBar.Name)) - { - graphics.DrawString(newBar.Name, - RowFont, - Brushes.Black, - 0, - ChartConstants.BarStartTop + (ChartConstants.BarHeight * (newBar.RowIndex - this.ScrollPosition)) + - (ChartConstants.BarSpace * (newBar.RowIndex - this.ScrollPosition))); - - rowTitleList.Add(newBar.Name); - } - } - private void DrawChartHeadersAndNet(Graphics graphics, IList headerList) - { - var verticalLineLastY = ChartConstants.BarStartTop + (this.DistinctItemCount - this.ScrollPosition) * (ChartConstants.BarHeight + ChartConstants.BarSpace); - - //draw headers - foreach (var header in headerList) - { - //draw the date when there is a change of day - var index = headerList.IndexOf(header); - - if (headerList.IndexOf(header) == 0 - || header.HeaderDateTime.Day != headerList[index - 1].HeaderDateTime.Day) - { - graphics.DrawString( - header.HeaderDateTime.ToShortDateString(), - DateFont, - Brushes.Black, - header.StartLocation, - 0); - } - - graphics.DrawString( - header.HeaderDateTime.ToShortTimeString(), - TimeFont, - Brushes.Black, - header.StartLocation, - ChartConstants.HeaderTimeStartTop); - - //draw vertical line under header - graphics.DrawLine( - ChartConstants.GridColor, - header.StartLocation, - ChartConstants.HeaderTimeStartTop, - header.StartLocation, - verticalLineLastY); - - } - - //draw last vertical line - graphics.DrawLine( - ChartConstants.GridColor, - ChartConstants.BarStartLeft + this.AvailableWidth, - ChartConstants.HeaderTimeStartTop, - ChartConstants.BarStartLeft + this.AvailableWidth, - verticalLineLastY); - - //draw horizontal net - for (var index = 0; index < this.DistinctItemCount; index++) - { - var y = ChartConstants.BarStartTop + index * (ChartConstants.BarHeight + ChartConstants.BarSpace); - graphics.DrawLine( - ChartConstants.GridColor, - ChartConstants.BarStartLeft, - y, - ChartConstants.BarStartLeft + this.AvailableWidth, - y - ); - } - } - } -} \ No newline at end of file diff --git a/ControlUse/Timeline/TimelineChart.resx b/ControlUse/Timeline/TimelineChart.resx deleted file mode 100644 index 1af7de1..0000000 --- a/ControlUse/Timeline/TimelineChart.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/ControlUse/Timeline/Timelines.csproj b/ControlUse/Timeline/Timelines.csproj deleted file mode 100644 index a789eec..0000000 --- a/ControlUse/Timeline/Timelines.csproj +++ /dev/null @@ -1,60 +0,0 @@ - - - - - Debug - AnyCPU - {FCAA62DB-0F2F-449C-8511-C6F0821688A7} - Library - Timelines - Timelines - v4.7.2 - 512 - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - UserControl - - - Timeline.cs - - - - - - \ No newline at end of file diff --git a/SunlightCentralizedControlManagement(SCCM).sln b/SunlightCentralizedControlManagement(SCCM).sln index 9588d6c..be44efa 100644 --- a/SunlightCentralizedControlManagement(SCCM).sln +++ b/SunlightCentralizedControlManagement(SCCM).sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.11.35312.102 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunlightCentralizedControlManagement_SCCM_", "SunlightCentralizedControlManagement_SCCM_.csproj", "{2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Timelines", "..\Timelines\Timelines.csproj", "{FCAA62DB-0F2F-449C-8511-C6F0821688A7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nGantt", "..\nGantt\nGantt.csproj", "{CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -17,10 +17,10 @@ Global {2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Debug|Any CPU.Build.0 = Debug|Any CPU {2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Release|Any CPU.ActiveCfg = Release|Any CPU {2CFE8A79-C7DC-47AC-8D0C-2E03010E2458}.Release|Any CPU.Build.0 = Release|Any CPU - {FCAA62DB-0F2F-449C-8511-C6F0821688A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCAA62DB-0F2F-449C-8511-C6F0821688A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCAA62DB-0F2F-449C-8511-C6F0821688A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCAA62DB-0F2F-449C-8511-C6F0821688A7}.Release|Any CPU.Build.0 = Release|Any CPU + {CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCC54F28-5D20-4AB3-A1A8-C62CD2DA3AE7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SunlightCentralizedControlManagement_SCCM_.csproj b/SunlightCentralizedControlManagement_SCCM_.csproj index 65bced1..56bff87 100644 --- a/SunlightCentralizedControlManagement_SCCM_.csproj +++ b/SunlightCentralizedControlManagement_SCCM_.csproj @@ -100,32 +100,6 @@ MSBuild:Compile Designer - - - - - - - - - - - - - - - - UserControl - - - Timeline.cs - - - UserControl - - - TimelineChart.cs - @@ -303,12 +277,6 @@ Settings.settings True - - - - - TimelineChart.cs - PublicResXFileCodeGenerator @@ -317,24 +285,6 @@ - - - - - - - - - - - - - - - - - - @@ -416,29 +366,9 @@ - - - - + - - - - - - - - - - - - - - - - - @@ -477,12 +407,6 @@ false - - - {fcaa62db-0f2f-449c-8511-c6f0821688a7} - Timelines - - diff --git a/View/ProductionPlanningView.xaml b/View/ProductionPlanningView.xaml index 7d6fd68..d2f8b53 100644 --- a/View/ProductionPlanningView.xaml +++ b/View/ProductionPlanningView.xaml @@ -10,7 +10,7 @@ xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF" xmlns:viewmodel="clr-namespace:SunlightCentralizedControlManagement_SCCM_.ViewModel" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" - xmlns:UserTimeline="clr-namespace:Timelines;assembly=Timelines" + xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" d:DataContext="{d:DesignInstance Type=viewmodel:ProductionPlanningModel}" mc:Ignorable="d" Loaded="UserControl_Loaded" @@ -25,8 +25,7 @@ - - + diff --git a/View/ProductionPlanningView.xaml.cs b/View/ProductionPlanningView.xaml.cs index b0be816..64adfde 100644 --- a/View/ProductionPlanningView.xaml.cs +++ b/View/ProductionPlanningView.xaml.cs @@ -33,8 +33,7 @@ using static System.Windows.Forms.VisualStyles.VisualStyleElement; using SunlightCentralizedControlManagement_SCCM_.ViewModel; using LiveChartsCore.SkiaSharpView.WPF; using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; -using Timelines.Model; -using Timelines; + namespace SunlightCentralizedControlManagement_SCCM_.View { @@ -55,38 +54,16 @@ namespace SunlightCentralizedControlManagement_SCCM_.View private void UserControl_Loaded(object sender, RoutedEventArgs e)//打开页面时的操作 { + List qw = MainWindowViewModel.Machines.AsEnumerable().Select(row => row.Field("name")).ToList();//转换列名为机台 + int asd = qw.Count(); - var randomVar = new Random(); - - var testList = new List(); - - var startDate = new DateTime(2024, 12, 30, 10, 9, 0); - var endDate = new DateTime(2024, 12, 30, 22, 29, 0); - - for (var i = 0; i < 10; i++) - { - for (var d = startDate; d < endDate; d = d.AddSeconds(randomVar.Next(13000, 14000))) - { - var item1 = new ItemModel - { - ItemName = "Item" + "" + i, - Duration = TimeSpan.FromSeconds(randomVar.Next(8, 15000)), - StartDate = d, - ItemColor = System.Drawing.Color.PowderBlue - }; - testList.Add(item1); - } - } - - qwe.ShowBarChart(startDate,endDate,testList); - // var dfg = new TimelineChart(); - // qwe.Child = dfg.ShowBarChart(startDate, endDate, testList); - // timeline1.ShowBarChart(startDate, endDate, testList); + } - + private void ListViewItem_Quit(object sender, System.Windows.Input.MouseButtonEventArgs e)//退出事件 { + } private void ListViewItem_edit(object sender, System.Windows.Input.MouseButtonEventArgs e)//编辑事件 diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index a398e38..16cd94c 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -191,7 +191,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel } public static TcpClient[] MachiensTcpClient = new TcpClient[999]; - public DataRow[] machinesdata = new DataRow[999]; + public static DataRow[] machinesdata = new DataRow[999]; public int Machinesdata_Count; public void TcpClientNEW() { diff --git a/ViewModel/ProductionPlanningModel.cs b/ViewModel/ProductionPlanningModel.cs index 59333b8..09bf960 100644 --- a/ViewModel/ProductionPlanningModel.cs +++ b/ViewModel/ProductionPlanningModel.cs @@ -37,8 +37,8 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel { public partial class ProductionPlanningModel : ObservableObject//ViewModelBase { - //x轴时间格式 - /* public Axis[] XAxes { get; set; } = + //x轴时间格式 + public Axis[] XAxes { get; set; } = { new DateTimeAxis(TimeSpan.FromSeconds(5) , date => date.ToString("yyyy-MM-dd HH:mm")) { @@ -46,8 +46,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkSlateBlue, 1), CrosshairPaint = new SolidColorPaint(SKColors.DarkSlateGray, 1), }, - }; - + }; public Axis[] YAxes { get; set; } = { new Axis @@ -55,8 +54,8 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel MinLimit = 0, // TextSize = 20, LabelsDensity = 1, - Labels = MainWindowViewModel.Machines.AsEnumerable().Select(row=> row.Field("name")).ToList(),//转换列名为机台 - + Labels = MainWindowViewModel.Machines.AsEnumerable().Select(row=> row.Field("name")).ToList(),//转换列名为机台 + } }; @@ -91,7 +90,7 @@ namespace SunlightCentralizedControlManagement_SCCM_.ViewModel }; } - public ISeries[] Series { get; set; } */ + public ISeries[] Series { get; set; } } }