diff --git a/Configurator/Configurator.Net/ArducopterConfigurator.csproj b/Configurator/Configurator.Net/ArducopterConfigurator.csproj index 48df78bf21..87e4c42f28 100644 --- a/Configurator/Configurator.Net/ArducopterConfigurator.csproj +++ b/Configurator/Configurator.Net/ArducopterConfigurator.csproj @@ -54,6 +54,12 @@ + + UserControl + + + CircularIndicatorControl.cs + Component @@ -204,6 +210,9 @@ + + CircularIndicatorControl.cs + PropControl.cs diff --git a/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs b/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs index f0db712a98..aa3816b143 100644 --- a/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs +++ b/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs @@ -30,7 +30,6 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FlightDataView)); - this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); @@ -55,7 +54,6 @@ this.indicatorRollAccel = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl1 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl2 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); - this.linearIndicatorControl3 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl4 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl5 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl6 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); @@ -72,20 +70,12 @@ this.label13 = new System.Windows.Forms.Label(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.cirularIndicatorControl1 = new ArducopterConfigurator.Views.controls.CirularIndicatorControl(); ((System.ComponentModel.ISupportInitialize)(this.FlightDataVmBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); this.SuspendLayout(); // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(107, 135); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(25, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Left"; - // // label2 // this.label2.AutoSize = true; @@ -118,7 +108,7 @@ this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlightDataVmBindingSource, "MotorLeft", true)); this.textBox1.Enabled = false; - this.textBox1.Location = new System.Drawing.Point(122, 155); + this.textBox1.Location = new System.Drawing.Point(120, 161); this.textBox1.Name = "textBox1"; this.textBox1.ReadOnly = true; this.textBox1.Size = new System.Drawing.Size(38, 13); @@ -372,28 +362,6 @@ this.linearIndicatorControl2.Value = 100; this.linearIndicatorControl2.WatermarkLineColor = System.Drawing.Color.Red; // - // linearIndicatorControl3 - // - this.linearIndicatorControl3.BarBackgroundDark = System.Drawing.Color.FromArgb(((int)(((byte)(199)))), ((int)(((byte)(200)))), ((int)(((byte)(201))))); - this.linearIndicatorControl3.BarBackgroundLight = System.Drawing.Color.WhiteSmoke; - this.linearIndicatorControl3.BarBorderColor = System.Drawing.Color.Maroon; - this.linearIndicatorControl3.BarDark = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(68)))), ((int)(((byte)(202))))); - this.linearIndicatorControl3.BarDividersCount = 20; - this.linearIndicatorControl3.BarLight = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(144)))), ((int)(((byte)(252))))); - this.linearIndicatorControl3.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.FlightDataVmBindingSource, "MotorLeft", true)); - this.linearIndicatorControl3.IsVertical = true; - this.linearIndicatorControl3.Location = new System.Drawing.Point(134, 121); - this.linearIndicatorControl3.Max = 2000; - this.linearIndicatorControl3.MaxWaterMark = 0; - this.linearIndicatorControl3.Min = 1000; - this.linearIndicatorControl3.MinWatermark = 0; - this.linearIndicatorControl3.Name = "linearIndicatorControl3"; - this.linearIndicatorControl3.Offset = 0; - this.linearIndicatorControl3.Size = new System.Drawing.Size(13, 34); - this.linearIndicatorControl3.TabIndex = 36; - this.linearIndicatorControl3.Value = 100; - this.linearIndicatorControl3.WatermarkLineColor = System.Drawing.Color.DarkGray; - // // linearIndicatorControl4 // this.linearIndicatorControl4.BarBackgroundDark = System.Drawing.Color.FromArgb(((int)(((byte)(199)))), ((int)(((byte)(200)))), ((int)(((byte)(201))))); @@ -612,10 +580,28 @@ this.pictureBox2.TabIndex = 52; this.pictureBox2.TabStop = false; // + // cirularIndicatorControl1 + // + this.cirularIndicatorControl1.BarBackgroundDark = System.Drawing.Color.FromArgb(((int)(((byte)(199)))), ((int)(((byte)(200)))), ((int)(((byte)(201))))); + this.cirularIndicatorControl1.BarBackgroundLight = System.Drawing.Color.WhiteSmoke; + this.cirularIndicatorControl1.BarBorderColor = System.Drawing.Color.DarkGray; + this.cirularIndicatorControl1.BarDark = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(68)))), ((int)(((byte)(202))))); + this.cirularIndicatorControl1.BarLight = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(144)))), ((int)(((byte)(252))))); + this.cirularIndicatorControl1.IsVertical = false; + this.cirularIndicatorControl1.Location = new System.Drawing.Point(120, 115); + this.cirularIndicatorControl1.Max = 100; + this.cirularIndicatorControl1.Min = 0; + this.cirularIndicatorControl1.Name = "cirularIndicatorControl1"; + this.cirularIndicatorControl1.Offset = 0; + this.cirularIndicatorControl1.Size = new System.Drawing.Size(40, 40); + this.cirularIndicatorControl1.TabIndex = 53; + this.cirularIndicatorControl1.Value = 50; + // // FlightDataView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.cirularIndicatorControl1); this.Controls.Add(this.label13); this.Controls.Add(this.label12); this.Controls.Add(this.label11); @@ -630,7 +616,6 @@ this.Controls.Add(this.linearIndicatorControl6); this.Controls.Add(this.linearIndicatorControl5); this.Controls.Add(this.linearIndicatorControl4); - this.Controls.Add(this.linearIndicatorControl3); this.Controls.Add(this.linearIndicatorControl2); this.Controls.Add(this.linearIndicatorControl1); this.Controls.Add(this.indicatorRollAccel); @@ -654,7 +639,6 @@ this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); - this.Controls.Add(this.label1); this.Controls.Add(this.pictureBox1); this.Controls.Add(this.pictureBox2); this.DoubleBuffered = true; @@ -671,10 +655,6 @@ #endregion private System.Windows.Forms.BindingSource FlightDataVmBindingSource; - - - - private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; @@ -698,7 +678,6 @@ private ArducopterConfigurator.Views.controls.LinearIndicatorControl indicatorRollAccel; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl1; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl2; - private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl3; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl4; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl5; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl6; @@ -715,5 +694,6 @@ private System.Windows.Forms.Label label13; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.PictureBox pictureBox2; + private ArducopterConfigurator.Views.controls.CirularIndicatorControl cirularIndicatorControl1; } } diff --git a/Configurator/Configurator.Net/Views/FlightDataView.resx b/Configurator/Configurator.Net/Views/FlightDataView.resx index 538672bb6c..073545b4e9 100644 --- a/Configurator/Configurator.Net/Views/FlightDataView.resx +++ b/Configurator/Configurator.Net/Views/FlightDataView.resx @@ -124,92 +124,49 @@ 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 - c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA + CwsBbQSEtwAAA25JREFUOE8tk21QVHUUxv9LmtOXZupL35ucFJbCSWMofNmQeFOJl8omi6mmgo1SCbVM + EGdxdxALKkEmbYKitT44ZZgoDorQUIBgy7JgQwgq+753X6JdF5bl13+X7tz/nXPOfZ7zPOfcuapTP0/z + 28iwmE94WDz96Coxr3pQrFipEqowQqxSiYSlqICoiKruFysSHhChUFgMz/jEQ/etFM+uf0SIV6t70LY6 + 2Ns+RZj/r4V7MB+LoyzIp8xYknFEAiIy3tM+zu7WSV76+CfEtv2/UH7WTrnRSojFOGVpmSuJEVmJs2Uk + 2bLG0gLaM7fQGmcpPngJUXSgg7fbJij91hMXve38l65RD5dNYS7cDHDe7OeKRdbGfMzYiDcskW7Lztwh + p+I8oqD8EmVf2Sg7PSkVglIhHLe5PEIsl5TIfCyKOyEa5q2v/+ad5lvsONCJyP/gCiXNNkpaJlmUFv9y + RDh3M8hFc4CL4146xoL8alboHXEwbQuzKPu9/s1t3miYIufDswhN6Y8UnDSz88So7B6N3ctqUonFf+KW + Y2aWT2wnEQpODPFu4wwZ2u8RGSU/sL1xmsKGUc5ZFAkLxRcVX5iMQ3J58WmYIyhn67Tc45X6UQoNZp57 + U36FzNe+43n9CHm1k2w3mMiruU6RfJl71EymwULeMRP5unGyawcpqLeQqR8k6/gE2+qus2lXOyK9+DRb + dX+QpRtCI0EZkqg5PI6mysyWIyZya3rIrR4gWzdAzuHfyay+QXrVDbJrBtn4chsirbiN9E+GyKn8U5L6 + 6ZmYYk7xEfE4cXjvMOtVUJS72F0Bhs1u1mw+Sl7VGJqPhkh9oRWRnNtC2n4Tz+wzs6GiF5vfR8qLRlJ2 + GHG5ffg8QRSXlaDHitPuQa2pZUNlH6kHB3gq1iCt8AtStX2sq+gnubIfr9/K6mIjiTuNODyTKF4/im8W + p+LF7vHzuKaeJ/ZeJWVfL+qsZsSRTztIzP6M9e91o37/Gl6nnzVFbSTln8LvDDDnDmF1+HApNlwuB+qN + Dazb0yOxEp/xJfJPQ9Q0XiNpcxNqrWzgsmP1e6R9GwGpanU6cAfu4vbY8cl8bdrnJErcY6WXSdoqHcQa + xM6h49KWZjf6k70Ymq+ib+7iWEs3hqYu6pq6qWvppLapj+RNOtam1/HkFj2H6i/wHyZ1+UcXoDkfAAAA + AElFTkSuQmCC - R0lGODlhFgAVAIMAADJ/x+/3/5rA40qOzrPP6v///1mX0sHY7lGT0PT4/LfS68bb70qUzgAAAAAAAAAA - ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQABwD/ACwAAAAAFgAVAAAIdAALCBxIsACAgggTDjyosOFChxAZ - QlQocSLCihYLJBCAAAACAQkyJjBg4ACABQgMhJwowIDAgyMFWBxw4KVABQguAtjJs6fPnwlp2iyA02LL - kDAHyJw4EoECAARSrmTK0SPIjAQxYjW4taBWrF8zhrU4tkBAADs= + R0lGODlhFgAVAPMAADJ/x+/3/5rA40qOzrPP6v///1mX0sHY7lGT0PT4/LfS68bb70qUzgAAAAAAAAAA + ACwAAAAAFgAVAAAEU7DISQuoOM+r+/YgB2riiJVmkQgIgAhJmhjGASyIEY+CIV0zgWlw+EkUiBNgyWw6 + nxmisYA09WLAgXA0QygAhNyOy3LBUhQU2rKuqNHvVNw0L0QAADs= \ No newline at end of file diff --git a/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.Designer.cs b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.Designer.cs new file mode 100644 index 0000000000..01d2ad0ee3 --- /dev/null +++ b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.Designer.cs @@ -0,0 +1,45 @@ +namespace ArducopterConfigurator.Views.controls +{ + partial class CirularIndicatorControl + { + /// + /// 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(); + // + // CirularIndicatorControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "CirularIndicatorControl"; + this.Size = new System.Drawing.Size(50, 50); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.cs b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.cs new file mode 100644 index 0000000000..9851adb339 --- /dev/null +++ b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.cs @@ -0,0 +1,320 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace ArducopterConfigurator.Views.controls +{ + /// + /// + [ToolboxBitmap(typeof(System.Windows.Forms.ProgressBar))] + public partial class CirularIndicatorControl : UserControl + { + public static readonly Color PreBarBaseDark = Color.FromArgb(199, 200, 201); + public static readonly Color PreBarBaseLight = Color.WhiteSmoke; + public static readonly Color PreBarLight = Color.FromArgb(102, 144, 252); + public static readonly Color PreBarDark = Color.FromArgb(40, 68, 202); + public static readonly Color PreBorderColor = Color.DarkGray; + + private Color _barBgLightColour = PreBarBaseLight; + private Color _barBgDarkColor = PreBarBaseDark; + private Color _barLightColour = PreBarLight; + private Color _barDarkColour = PreBarDark; + private Color _borderColor = PreBorderColor; + + private float _borderWidth = 1.0F; + + private int _min = 0; + private int _max = 100; + private int _val = 50; + private int _offset = 0; + + private bool _isVertical = false; + private bool _isReveresed; + + public CirularIndicatorControl() + { + SetStyle(ControlStyles.OptimizedDoubleBuffer | + ControlStyles.AllPaintingInWmPaint | + ControlStyles.UserPaint | + ControlStyles.ResizeRedraw, true); + + InitializeComponent(); + Width = 50; + Height = 50; + } + + + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnPaint(PaintEventArgs e) + { + var g = e.Graphics; + g.SmoothingMode = SmoothingMode.AntiAlias; + g.Clear(BackColor); + + var bmp = GenerateBitmap(Width, Height, BackColor); + g.DrawImage(bmp, 0, 0); + } + + + // Generate the bar image on graphics g + // g is the graphics of the whole control + private void GenerateCircle(Graphics g, float x, float y, float width, float height, bool isVertical, float fraction) + { + var outerRect = new RectangleF(x, y, width, height); + + // Fill the background of the whole control + using (var bg = new SolidBrush(Color.Transparent)) + g.FillRectangle(bg,outerRect); + + // Fill the background of the circle + var circleRect = outerRect; + circleRect.Inflate((_borderWidth/-2),(_borderWidth/-2)); + using (var white = new LinearGradientBrush(outerRect, _barBgLightColour, _barBgDarkColor, isVertical ? 0 : 90.0F, false)) + g.FillEllipse(white, circleRect); + + + // We need to figure out how big the bar should be, where it starts and ends + // This is so we can set the clip properly + // note that what we clip is actually what is NOT the bar + var clipSize = isVertical + ? circleRect.Height - circleRect.Height * fraction + : circleRect.Width - circleRect.Width * fraction; + + // The location of this clip rectangle is normally on the right for a left - to - right bar + // and on the top for a bottom - to - top bar. However if the _isReversed is set, then we need to + // adjust the location to the 'other side' + var clipBegin = isVertical + ? _isReveresed // vertical + ? circleRect.Top + circleRect.Height - clipSize + : circleRect.Top + : _isReveresed // horizontal + ? circleRect.Left + : circleRect.Left + circleRect.Width - clipSize; + + var clipRectangle = new RectangleF( + isVertical ? circleRect.Left : clipBegin, + isVertical ? clipBegin : circleRect.Top, + isVertical ? circleRect.Width : clipSize, + isVertical ? clipSize : circleRect.Height); + + // We also need to work out the angle for the gradient brush, so that the griadient goes in the + // right 'direction' + + var angle = !isVertical + ? _isReveresed ? 0F : 180F + : _isReveresed ? 270F : 90.0F; + + using (var bg = new LinearGradientBrush(circleRect, _barLightColour, _barDarkColour, angle, false)) + { + // g.FillPie(bg, circleRect.Left, circleRect.Top, circleRect.Width, circleRect.Height, 270, fraction*360) + g.SetClip(clipRectangle, CombineMode.Exclude); + g.FillEllipse(bg, circleRect.Left, circleRect.Top, circleRect.Width, circleRect.Height); + g.ResetClip(); + } + + using (var borderPen = new Pen(_borderColor, _borderWidth)) + { + g.DrawEllipse(borderPen, circleRect); + } + + + + + + // Now do the progress bar that represents the value +// var barSize = (float)Math.Abs(_val - _offset) / (_max - _min) * (isVertical ? height : width); +// var barStart = (float)(Math.Min(_offset, _val) - _min) / (_max - _min) * (isVertical ? height : width); +// +// +// if (barSize > 0.10F) +// { +// rect = isVertical +// ? new RectangleF(x, y + height - ( barStart + barSize), width, barSize) +// : new RectangleF(x + barStart, y, barSize, height); +// +// using (var bg = new LinearGradientBrush(rect, _barLightColour, _barDarkColour, isVertical ? 0 : 90.0F, false)) +// g.FillRectangle(bg, rect); +// +// using (Pen p = new Pen(_borderColor, _borderWidth)) +// { +// p.Alignment = PenAlignment.Inset; +// p.LineJoin = LineJoin.Round; +// g.DrawLine(p, width, y, width, height); +// } +// } +// +// +// // Now the line that represents the Offset/Origin +// DrawLine(width, height, isVertical, g, _offset,_borderColor); +// +// // Border around the whole thing +// using (Pen p = new Pen(_borderColor, _borderWidth * 2)) +// { +// p.Alignment = PenAlignment.Outset; +// p.LineJoin = LineJoin.Round; +// g.DrawRectangle(p, x, y, width, height); +// } + + } + + + + private Bitmap GenerateBitmap(int width, int height,Color bgColor) + { + var theImage = new Bitmap(width, height); + + using (var g = Graphics.FromImage(theImage)) + { + g.SmoothingMode = SmoothingMode.AntiAlias; + g.Clear(bgColor); + + using (var bmp = new Bitmap(width, height)) + { + using (var g1 = Graphics.FromImage(bmp)) + GenerateCircle(g1, 0.0F, 0.0F, width, height, _isVertical,0.85F); + + g.DrawImage(bmp, 0, 0); + } + } + return theImage; + } + + /// + /// Gets or sets the width of the border. + /// + /// The width of the border. + [System.ComponentModel.Description("Gets or sets the with of the borders")] + [System.ComponentModel.DefaultValue(1.0f)] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public float BarBorderWidth + { + get { return _borderWidth; } + set { _borderWidth = value; Refresh(); } + } + + /// + /// Gets or sets the bar background light. + /// + /// The bar background light. + [System.ComponentModel.Description("Gets or sets the lighter background color")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public Color BarBackgroundLight + { + get { return _barBgLightColour; } + set { _barBgLightColour = value; Refresh(); } + } + + /// + /// Gets or sets the bar background dark. + /// + /// The bar background dark. + [System.ComponentModel.Description("Gets or sets the darker background color")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public Color BarBackgroundDark + { + get { return _barBgDarkColor; } + set { _barBgDarkColor = value; Refresh(); } + } + + /// + /// Gets or sets the bar light. + /// + /// The bar light. + [System.ComponentModel.Description("Gets or sets the light bar color")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public Color BarLight + { + get { return _barLightColour; } + set { _barLightColour = value; Refresh(); } + } + + /// + /// Gets or sets the bar dark. + /// + /// The bar dark. + [System.ComponentModel.Description("Gets or sets the dark bar color")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public Color BarDark + { + get { return _barDarkColour; } + set { _barDarkColour = value; Refresh(); } + } + + /// + /// Gets or sets the color of the border. + /// + /// The color of the border. + [System.ComponentModel.Description("The border color")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public Color BarBorderColor + { + get { return _borderColor; } + set { _borderColor = value; Refresh(); } + } + + + + [System.ComponentModel.Description("Gets or sets the Minimum Value")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public int Min + { + get { return _min; } + set { _min = value; Refresh(); } + } + + [System.ComponentModel.Description("Gets or sets the Minimum Value")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public int Max + { + get { return _max; } + set { _max = value; Refresh(); } + } + + [System.ComponentModel.Description("Gets or sets the Offset Value")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public int Offset + { + get { return _offset; } + set { _offset = value; Refresh(); } + } + + + [System.ComponentModel.Description("Gets or sets the Value")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public int Value + { + get { return _val; } + set + { + if (_val != value) + { + _val = value; + Refresh(); + } + + } + } + + + [System.ComponentModel.Description("Whether the indicator is vertical or horizontal")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public bool IsVertical + { + get { return _isVertical; } + set { _isVertical = value; Refresh(); } + } + + [System.ComponentModel.Description("If true, then for example control goes right to left when horizontal")] + [System.ComponentModel.RefreshProperties(System.ComponentModel.RefreshProperties.Repaint)] + public bool IsReveresed + { + get { return _isReveresed; } + set { _isReveresed = value; Refresh(); } + } + + } +} diff --git a/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.resx b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.resx new file mode 100644 index 0000000000..ff31a6db56 --- /dev/null +++ b/Configurator/Configurator.Net/Views/controls/CircularIndicatorControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Configurator/Configurator.Net/Views/controls/QuadPlanControl.Designer.cs b/Configurator/Configurator.Net/Views/controls/QuadPlanControl.Designer.cs index 341c15c765..0b0df5a290 100644 --- a/Configurator/Configurator.Net/Views/controls/QuadPlanControl.Designer.cs +++ b/Configurator/Configurator.Net/Views/controls/QuadPlanControl.Designer.cs @@ -28,21 +28,56 @@ /// private void InitializeComponent() { - this.propControl1 = new ArducopterConfigurator.Views.controls.PropControl(); + this.cirularIndicatorControl1 = new ArducopterConfigurator.Views.controls.CirularIndicatorControl(); + this.linearIndicatorControl1 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.SuspendLayout(); // - // propControl1 + // cirularIndicatorControl1 // - this.propControl1.Location = new System.Drawing.Point(49, 3); - this.propControl1.Name = "propControl1"; - this.propControl1.Size = new System.Drawing.Size(50, 50); - this.propControl1.TabIndex = 0; + this.cirularIndicatorControl1.BackColor = System.Drawing.SystemColors.Control; + this.cirularIndicatorControl1.BarBackgroundDark = System.Drawing.Color.Transparent; + this.cirularIndicatorControl1.BarBackgroundLight = System.Drawing.Color.Transparent; + this.cirularIndicatorControl1.BarBorderColor = System.Drawing.Color.Black; + this.cirularIndicatorControl1.BarBorderWidth = 3F; + this.cirularIndicatorControl1.BarDark = System.Drawing.Color.Maroon; + this.cirularIndicatorControl1.BarLight = System.Drawing.Color.Moccasin; + this.cirularIndicatorControl1.IsReveresed = false; + this.cirularIndicatorControl1.IsVertical = true; + this.cirularIndicatorControl1.Location = new System.Drawing.Point(18, 71); + this.cirularIndicatorControl1.Max = 100; + this.cirularIndicatorControl1.Min = 0; + this.cirularIndicatorControl1.Name = "cirularIndicatorControl1"; + this.cirularIndicatorControl1.Offset = 0; + this.cirularIndicatorControl1.Size = new System.Drawing.Size(50, 50); + this.cirularIndicatorControl1.TabIndex = 1; + this.cirularIndicatorControl1.Value = 56; + // + // linearIndicatorControl1 + // + this.linearIndicatorControl1.BarBackgroundDark = System.Drawing.Color.FromArgb(((int)(((byte)(199)))), ((int)(((byte)(200)))), ((int)(((byte)(201))))); + this.linearIndicatorControl1.BarBackgroundLight = System.Drawing.Color.WhiteSmoke; + this.linearIndicatorControl1.BarBorderColor = System.Drawing.Color.DarkGray; + this.linearIndicatorControl1.BarDark = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(68)))), ((int)(((byte)(202))))); + this.linearIndicatorControl1.BarLight = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(144)))), ((int)(((byte)(252))))); + this.linearIndicatorControl1.IsVertical = false; + this.linearIndicatorControl1.Location = new System.Drawing.Point(18, 26); + this.linearIndicatorControl1.Max = 100; + this.linearIndicatorControl1.MaxWaterMark = 0; + this.linearIndicatorControl1.Min = 0; + this.linearIndicatorControl1.MinWatermark = 0; + this.linearIndicatorControl1.Name = "linearIndicatorControl1"; + this.linearIndicatorControl1.Offset = 0; + this.linearIndicatorControl1.Size = new System.Drawing.Size(81, 24); + this.linearIndicatorControl1.TabIndex = 2; + this.linearIndicatorControl1.Value = 50; + this.linearIndicatorControl1.WatermarkLineColor = System.Drawing.Color.DarkGray; // // QuadPlanControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.propControl1); + this.Controls.Add(this.cirularIndicatorControl1); + this.Controls.Add(this.linearIndicatorControl1); this.Name = "QuadPlanControl"; this.ResumeLayout(false); @@ -50,6 +85,7 @@ #endregion - private PropControl propControl1; + private CirularIndicatorControl cirularIndicatorControl1; + private LinearIndicatorControl linearIndicatorControl1; } }