mirror of https://github.com/ArduPilot/ardupilot
143 lines
5.0 KiB
C#
143 lines
5.0 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Collections;
|
|
|
|
namespace ArdupilotMega.Controls
|
|
{
|
|
public partial class FlashMessage : Label
|
|
{
|
|
private const int fadeInterval = 20; //time in ms between "frames" of animation
|
|
private const int fadeDuration = 200; //overall animation duration in ms in one direction
|
|
private const int desiredHeight = 20; //desired height to animate to
|
|
private const int inOutDelay = 800 / fadeInterval; //number in ms between in and out
|
|
private const float fadeStepValue = desiredHeight * (float)fadeInterval / (float)fadeDuration;
|
|
private int inOutDelayCounter;
|
|
private int direction;
|
|
private int heightVisible;
|
|
private bool disposeOnComplete;
|
|
private Timer fadeTimer;
|
|
private bool inOut;
|
|
private Queue messages = new Queue();
|
|
|
|
public FlashMessage()
|
|
{
|
|
Visible = false;
|
|
|
|
Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
| System.Windows.Forms.AnchorStyles.Right)));
|
|
Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
|
|
Location = new Point(0, 0);
|
|
TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
|
|
|
fadeTimer = new Timer();
|
|
fadeTimer.Interval = fadeInterval;
|
|
fadeTimer.Tick += new EventHandler(fadeTimer_Tick);
|
|
}
|
|
|
|
public void FadeInOut(string msg, bool success)
|
|
{
|
|
if (Visible)
|
|
{
|
|
messages.Enqueue(new { msg = msg, success = success });
|
|
}
|
|
else
|
|
{
|
|
if (this.Parent != null) Width = this.Parent.ClientSize.Width;
|
|
BringToFront();
|
|
direction = 1;
|
|
inOut = true;
|
|
inOutDelayCounter = inOutDelay;
|
|
heightVisible = Height = 0;
|
|
Text = msg;
|
|
BackColor = success ? Color.YellowGreen : Color.Coral;
|
|
}
|
|
Visible = true;
|
|
fadeTimer.Enabled = true;
|
|
}
|
|
|
|
//public void FadeIn(string msg, bool success)
|
|
//{
|
|
// if (this.Parent != null) Width = this.Parent.ClientSize.Width;
|
|
// BringToFront();
|
|
// direction = 1;
|
|
// inOut = false;
|
|
// heightVisible = Height = 0;
|
|
// if (Visible)
|
|
// {
|
|
// messages.Enqueue(msg);
|
|
// }
|
|
// else
|
|
// {
|
|
// Text = msg;
|
|
// }
|
|
// BackColor = success ? Color.YellowGreen : Color.Coral;
|
|
// Visible = true;
|
|
// fadeTimer.Enabled = true;
|
|
//}
|
|
|
|
private void FadeOut(bool disposeOnComplete = false)
|
|
{
|
|
if (this.Parent != null) Width = this.Parent.ClientSize.Width;
|
|
BringToFront();
|
|
direction = -1;
|
|
inOut = false;
|
|
heightVisible = Height = desiredHeight;
|
|
this.disposeOnComplete = disposeOnComplete;
|
|
fadeTimer.Enabled = true;
|
|
}
|
|
|
|
private void fadeTimer_Tick(object sender, EventArgs e)
|
|
{
|
|
bool done = false;
|
|
heightVisible += (int)Math.Round(direction * fadeStepValue);
|
|
if (heightVisible < 0) { done = true; heightVisible = 0; }
|
|
if (heightVisible > desiredHeight) { done = true; heightVisible = desiredHeight; }
|
|
Height = heightVisible;
|
|
if (done)
|
|
{
|
|
if (inOut)
|
|
{
|
|
if (--inOutDelayCounter == 0)
|
|
{
|
|
FadeOut(disposeOnComplete);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (messages.Count > 0)
|
|
{
|
|
Object o = messages.Dequeue();
|
|
Text = (string)o.GetType().GetProperty("msg").GetValue(o, null);
|
|
bool success = (bool)o.GetType().GetProperty("success").GetValue(o, null);
|
|
BackColor = success ? Color.YellowGreen : Color.Coral;
|
|
|
|
direction = 1;
|
|
inOut = true;
|
|
inOutDelayCounter = inOutDelay;
|
|
heightVisible = Height = 0;
|
|
|
|
//Text = (messages.Dequeue()).msg;
|
|
}
|
|
else
|
|
{
|
|
fadeTimer.Enabled = false;
|
|
Visible = false;
|
|
if (direction == -1) //hide after fadeOut
|
|
{
|
|
if (disposeOnComplete) this.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//this.Height = heightVisible;
|
|
//this.Invalidate();
|
|
}
|
|
}
|
|
}
|
|
}
|