using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Outlook2013TodoAddIn.Forms
{
///
/// New form to display new email notifications
///
public partial class NewMailAlert : Form
{
#region "Variables"
///
/// To control how long the form displays
///
private Timer timer;
///
/// Don't close the for if the mouse is over it
///
private bool mouseIsOver = false;
///
/// Topmost value
///
private const int WS_EX_TOPMOST = 0x00000008;
#endregion "Variables"
#region "Properties"
///
/// Attached email message to open or flag
///
public Microsoft.Office.Interop.Outlook.MailItem Email { get; set; }
///
/// Whether to show without the form activation
///
protected override bool ShowWithoutActivation
{
get { return true; }
}
///
/// This is used so we can show without activation and be the TopMost form
/// The TopMost property of the form MUST be set to false for this to work
/// https://connect.microsoft.com/VisualStudio/feedback/details/401311/showwithoutactivation-is-not-supported-with-topmost
///
protected override CreateParams CreateParams
{
get
{
CreateParams value = base.CreateParams;
value.ExStyle |= WS_EX_TOPMOST;
return value;
}
}
#endregion "Properties"
#region "Methods"
///
/// Default constructor
///
/// Mail item
/// Time in ms to keep the alert on
public NewMailAlert(Microsoft.Office.Interop.Outlook.MailItem newMail, int interval)
{
InitializeComponent();
this.Email = newMail; // Assign it to open or flag later
this.lnkSender.Text = newMail.Sender.Name;
this.lnkSubject.Text = newMail.Subject;
this.txtBody.Text = newMail.Body;
this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width - 10;
this.Top = Screen.PrimaryScreen.WorkingArea.Height - this.Height - 10;
this.timer = new Timer();
timer.Interval = interval;
timer.Tick += timer_Tick;
timer.Start();
}
///
/// Button delete clicked
///
/// Sender
/// EventArgs
private void btnDelete_Click(object sender, EventArgs e)
{
this.Email.Delete();
this.Close();
}
///
/// Button flag clicked
///
/// Sender
/// EventArgs
private void btnFlag_Click(object sender, EventArgs e)
{
//Microsoft.Office.Interop.Outlook.OlFlagIcon.olYellowFlagIcon
this.Email.FlagRequest = Constants.FollowUp;
this.Email.Save();
this.Close();
}
///
/// Button envelope clicked
///
/// Sender
/// EventArgs
private void btnEnvelope_Click(object sender, EventArgs e)
{
this.ShowEmail();
}
///
/// Button close clicked
///
/// Sender
/// EventArgs
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
///
/// Sender hyperlink clicked
///
/// Sender
/// LinkLabelLinkClickedEventArgs
private void lnkSender_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.ShowEmail();
}
///
/// Subject hyperlink clicked
///
/// Sender
/// LinkLabelLinkClickedEventArgs
private void lnkSubject_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.ShowEmail();
}
///
/// Body textbox clicked
///
/// Sender
/// EventArgs
private void txtBody_Click(object sender, EventArgs e)
{
this.ShowEmail();
}
///
/// Show the email and close the form
///
private void ShowEmail()
{
this.Email.Display();
this.Close();
}
///
/// Process timer ticks
///
/// Sender
/// EventArgs
private void timer_Tick(object sender, EventArgs e)
{
if (!mouseIsOver)
{
timer.Stop();
this.Close();
}
}
///
/// Processed when the mouse enters the form
///
/// EventArgs
protected override void OnMouseEnter(EventArgs ea)
{
base.OnMouseEnter(ea);
Point mousePos = PointToClient(Cursor.Position);
mouseIsOver = ClientRectangle.Contains(mousePos);
}
///
/// Processed when the mouse exits the form
///
/// EventArgs
protected override void OnMouseLeave(EventArgs ea)
{
base.OnMouseLeave(ea);
Point mousePos = PointToClient(Cursor.Position);
mouseIsOver = ClientRectangle.Contains(mousePos);
}
#endregion "Methods"
}
}