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 emai lnotifications /// 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; /// /// Show form /// private const int SW_SHOW = 5; /// /// Fading effect /// private const uint AW_BLEND = 0x00080000; #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; } } #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(); } /// /// Load and bring to fron /// /// EventArgs protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; } this.BringToFront(); } [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] private static extern bool AnimateWindow(IntPtr hWnd, uint dwTime, uint dwFlags); /// /// Method to display the form and make it topmost /// /// True or false public bool ShowPopup() { bool result = ShowWindow(this.Handle, SW_SHOW); //bool result = AnimateWindow(this.Handle, 200, AW_BLEND); return result; } /// /// 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" } }