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" } }