Added double-click enabled calendar control and comments
This commit is contained in:
parent
837924b0bf
commit
4501a61b08
@ -31,7 +31,7 @@
|
|||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
this.numRangeDays = new System.Windows.Forms.NumericUpDown();
|
this.numRangeDays = new System.Windows.Forms.NumericUpDown();
|
||||||
this.lblRangeDays = new System.Windows.Forms.Label();
|
this.lblRangeDays = new System.Windows.Forms.Label();
|
||||||
this.apptCalendar = new System.Windows.Forms.MonthCalendar();
|
this.apptCalendar = new Outlook2013TodoAddIn.DoubleClickMonthCalendar();
|
||||||
this.ctxMenuAppointments = new System.Windows.Forms.ContextMenuStrip(this.components);
|
this.ctxMenuAppointments = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
this.mnuItemReplyAllEmail = new System.Windows.Forms.ToolStripMenuItem();
|
this.mnuItemReplyAllEmail = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.hdrDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
this.hdrDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
@ -86,6 +86,7 @@
|
|||||||
this.apptCalendar.MaxSelectionCount = 1;
|
this.apptCalendar.MaxSelectionCount = 1;
|
||||||
this.apptCalendar.Name = "apptCalendar";
|
this.apptCalendar.Name = "apptCalendar";
|
||||||
this.apptCalendar.TabIndex = 4;
|
this.apptCalendar.TabIndex = 4;
|
||||||
|
this.apptCalendar.DoubleClickEx += new System.EventHandler(this.apptCalendar_DoubleClickEx);
|
||||||
this.apptCalendar.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);
|
this.apptCalendar.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);
|
||||||
//
|
//
|
||||||
// ctxMenuAppointments
|
// ctxMenuAppointments
|
||||||
@ -186,7 +187,7 @@
|
|||||||
|
|
||||||
private System.Windows.Forms.NumericUpDown numRangeDays;
|
private System.Windows.Forms.NumericUpDown numRangeDays;
|
||||||
private System.Windows.Forms.Label lblRangeDays;
|
private System.Windows.Forms.Label lblRangeDays;
|
||||||
private System.Windows.Forms.MonthCalendar apptCalendar;
|
private DoubleClickMonthCalendar apptCalendar;
|
||||||
private System.Windows.Forms.ContextMenuStrip ctxMenuAppointments;
|
private System.Windows.Forms.ContextMenuStrip ctxMenuAppointments;
|
||||||
private System.Windows.Forms.ToolStripMenuItem mnuItemReplyAllEmail;
|
private System.Windows.Forms.ToolStripMenuItem mnuItemReplyAllEmail;
|
||||||
private System.Windows.Forms.ColumnHeader hdrDate;
|
private System.Windows.Forms.ColumnHeader hdrDate;
|
||||||
|
@ -7,22 +7,38 @@ using Outlook = Microsoft.Office.Interop.Outlook;
|
|||||||
|
|
||||||
namespace Outlook2013TodoAddIn
|
namespace Outlook2013TodoAddIn
|
||||||
{
|
{
|
||||||
|
/// User control to hold the calendar, etc...
|
||||||
|
/// </summary>
|
||||||
public partial class AppointmentsControl : UserControl
|
public partial class AppointmentsControl : UserControl
|
||||||
{
|
{
|
||||||
|
#region "Variables"
|
||||||
|
/// <summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to retrieve the email address of a contact
|
||||||
|
/// </summary>
|
||||||
private const string PR_SMTP_ADDRESS = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
|
private const string PR_SMTP_ADDRESS = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
|
||||||
|
|
||||||
|
#endregion "Variables"
|
||||||
|
|
||||||
|
#region "Properties"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Number of days (including today) to retrieve appointments from in the future
|
||||||
|
/// </summary>
|
||||||
public decimal NumDays
|
public decimal NumDays
|
||||||
{
|
{
|
||||||
get
|
get { return this.numRangeDays.Value; }
|
||||||
{
|
set { this.numRangeDays.Value = value; }
|
||||||
return this.numRangeDays.Value;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
this.numRangeDays.Value = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion "Properties"
|
||||||
|
|
||||||
|
#region "Methods"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default constructor
|
||||||
|
/// </summary>
|
||||||
public AppointmentsControl()
|
public AppointmentsControl()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@ -43,22 +59,40 @@ namespace Outlook2013TodoAddIn
|
|||||||
// MessageBox.Show("Test");
|
// MessageBox.Show("Test");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Respond to calendar changes
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">DateRangeEventArgs</param>
|
||||||
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
|
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
|
||||||
{
|
{
|
||||||
this.RetrieveAppointments();
|
this.RetrieveAppointments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Change days to retrieve appointments in the future
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void numRangeDays_ValueChanged(object sender, EventArgs e)
|
private void numRangeDays_ValueChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Properties.Settings.Default.NumDays = this.numRangeDays.Value;
|
Properties.Settings.Default.NumDays = this.numRangeDays.Value;
|
||||||
this.RetrieveAppointments();
|
this.RetrieveAppointments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Manual refresh
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void btnRefresh_Click(object sender, EventArgs e)
|
private void btnRefresh_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
this.RetrieveAppointments();
|
this.RetrieveAppointments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieve all appointments for the current configurations
|
||||||
|
/// </summary>
|
||||||
public void RetrieveAppointments()
|
public void RetrieveAppointments()
|
||||||
{
|
{
|
||||||
// Get the Outlook folder for the calendar to retrieve the appointments
|
// Get the Outlook folder for the calendar to retrieve the appointments
|
||||||
@ -123,20 +157,15 @@ namespace Outlook2013TodoAddIn
|
|||||||
case Outlook.OlBusyStatus.olBusy:
|
case Outlook.OlBusyStatus.olBusy:
|
||||||
current.ForeColor = Color.Purple;
|
current.ForeColor = Color.Purple;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Outlook.OlBusyStatus.olFree:
|
case Outlook.OlBusyStatus.olFree:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Outlook.OlBusyStatus.olOutOfOffice:
|
case Outlook.OlBusyStatus.olOutOfOffice:
|
||||||
current.ForeColor = Color.Brown;
|
current.ForeColor = Color.Brown;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Outlook.OlBusyStatus.olTentative:
|
case Outlook.OlBusyStatus.olTentative:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Outlook.OlBusyStatus.olWorkingElsewhere:
|
case Outlook.OlBusyStatus.olWorkingElsewhere:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -159,11 +188,11 @@ namespace Outlook2013TodoAddIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get recurring appointments in date range.
|
/// Get recurring appointments in a date range.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="folder"></param>
|
/// <param name="folder">Outlook folder</param>
|
||||||
/// <param name="startTime"></param>
|
/// <param name="startTime">Start time</param>
|
||||||
/// <param name="endTime"></param>
|
/// <param name="endTime">End time</param>
|
||||||
/// <returns>Outlook.Items</returns>
|
/// <returns>Outlook.Items</returns>
|
||||||
private Outlook.Items GetAppointmentsInRange(Outlook.Folder folder, DateTime startTime, DateTime endTime)
|
private Outlook.Items GetAppointmentsInRange(Outlook.Folder folder, DateTime startTime, DateTime endTime)
|
||||||
{
|
{
|
||||||
@ -190,6 +219,11 @@ namespace Outlook2013TodoAddIn
|
|||||||
catch { return null; }
|
catch { return null; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Open the appointment, having in mind it might be a recurring event
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void listView1_DoubleClick(object sender, EventArgs e)
|
private void listView1_DoubleClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (this.listView1.SelectedIndices.Count != 0)
|
if (this.listView1.SelectedIndices.Count != 0)
|
||||||
@ -222,13 +256,17 @@ namespace Outlook2013TodoAddIn
|
|||||||
// Open up the appointment in a new window
|
// Open up the appointment in a new window
|
||||||
appt.Display(true); // Modal yes/no
|
appt.Display(true); // Modal yes/no
|
||||||
}
|
}
|
||||||
|
|
||||||
// At the end, synchronously "refresh" items in case they have changed
|
// At the end, synchronously "refresh" items in case they have changed
|
||||||
this.RetrieveAppointments();
|
this.RetrieveAppointments();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new mail item to reply all recipients of an appointment (except the current user)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void mnuItemReplyAllEmail_Click(object sender, EventArgs e)
|
private void mnuItemReplyAllEmail_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (this.listView1.SelectedIndices.Count != 0)
|
if (this.listView1.SelectedIndices.Count != 0)
|
||||||
@ -237,7 +275,6 @@ namespace Outlook2013TodoAddIn
|
|||||||
if (appt != null)
|
if (appt != null)
|
||||||
{
|
{
|
||||||
Outlook.MailItem mail = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
|
Outlook.MailItem mail = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
|
||||||
|
|
||||||
string curUserAddress = GetEmailAddress(Globals.ThisAddIn.Application.Session.CurrentUser);
|
string curUserAddress = GetEmailAddress(Globals.ThisAddIn.Application.Session.CurrentUser);
|
||||||
foreach (Outlook.Recipient rcpt in appt.Recipients)
|
foreach (Outlook.Recipient rcpt in appt.Recipients)
|
||||||
{
|
{
|
||||||
@ -245,8 +282,6 @@ namespace Outlook2013TodoAddIn
|
|||||||
if (curUserAddress != smtpAddress)
|
if (curUserAddress != smtpAddress)
|
||||||
{
|
{
|
||||||
mail.Recipients.Add(smtpAddress);
|
mail.Recipients.Add(smtpAddress);
|
||||||
|
|
||||||
//mail.Recipients.Add(rcpt.AddressEntry.Name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mail.Body = Environment.NewLine + Environment.NewLine + appt.Body;
|
mail.Body = Environment.NewLine + Environment.NewLine + appt.Body;
|
||||||
@ -256,10 +291,44 @@ namespace Outlook2013TodoAddIn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resolves Outlook recipient email address
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="rcpt">Recipient</param>
|
||||||
|
/// <returns>Email address of the contact</returns>
|
||||||
private string GetEmailAddress(Outlook.Recipient rcpt)
|
private string GetEmailAddress(Outlook.Recipient rcpt)
|
||||||
{
|
{
|
||||||
Outlook.PropertyAccessor pa = rcpt.PropertyAccessor;
|
Outlook.PropertyAccessor pa = rcpt.PropertyAccessor;
|
||||||
return pa.GetProperty(PR_SMTP_ADDRESS).ToString();
|
return pa.GetProperty(PR_SMTP_ADDRESS).ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Switch to the calendar view when double-clicking a date
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
|
private void apptCalendar_DoubleClickEx(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// TODO: Clicking in days outside of the current month will cause the calendar to refresh to that day, reposition all days and
|
||||||
|
// select the wrong one
|
||||||
|
//MessageBox.Show(this.apptCalendar.SelectionStart.ToShortDateString());
|
||||||
|
|
||||||
|
// Get the Outlook folder for the calendar to retrieve the appointments
|
||||||
|
Outlook.Folder calFolder =
|
||||||
|
Globals.ThisAddIn.Application.Session.GetDefaultFolder(
|
||||||
|
Outlook.OlDefaultFolders.olFolderCalendar)
|
||||||
|
as Outlook.Folder;
|
||||||
|
|
||||||
|
//Outlook.View view = Globals.ThisAddIn.Application.ActiveExplorer().CurrentView;
|
||||||
|
|
||||||
|
foreach (Outlook.View view in Globals.ThisAddIn.Application.ActiveExplorer().CurrentFolder.Views)
|
||||||
|
{
|
||||||
|
MessageBox.Show("New view: {0}", view.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
//calFolder.Display();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion "Methods"
|
||||||
}
|
}
|
||||||
}
|
}
|
36
Outlook2013TodoAddIn/DoubleClickMonthCalendar.cs
Normal file
36
Outlook2013TodoAddIn/DoubleClickMonthCalendar.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Outlook2013TodoAddIn
|
||||||
|
{
|
||||||
|
public class DoubleClickMonthCalendar : MonthCalendar
|
||||||
|
{
|
||||||
|
public event EventHandler DoubleClickEx;
|
||||||
|
|
||||||
|
public DoubleClickMonthCalendar()
|
||||||
|
{
|
||||||
|
lastClickTick = Environment.TickCount - SystemInformation.DoubleClickTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseDown(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
int tick = Environment.TickCount;
|
||||||
|
if (tick - lastClickTick <= SystemInformation.DoubleClickTime)
|
||||||
|
{
|
||||||
|
EventHandler handler = DoubleClickEx;
|
||||||
|
if (handler != null) handler(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base.OnMouseDown(e);
|
||||||
|
lastClickTick = tick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int lastClickTick;
|
||||||
|
}
|
||||||
|
}
|
@ -2,21 +2,33 @@
|
|||||||
|
|
||||||
namespace Outlook2013TodoAddIn
|
namespace Outlook2013TodoAddIn
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Mimic Outlook's popup to open one instance or the whole series
|
||||||
|
/// </summary>
|
||||||
public partial class FormRecurringOpen : Form
|
public partial class FormRecurringOpen : Form
|
||||||
{
|
{
|
||||||
public DialogResult ButtonPressed { get; set; }
|
#region "Properties"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the user wants to retrieve all instances or not
|
||||||
|
/// </summary>
|
||||||
public bool OpenRecurring
|
public bool OpenRecurring
|
||||||
{
|
{
|
||||||
get
|
get { return this.rbtnAll.Checked; }
|
||||||
{
|
|
||||||
return this.rbtnAll.Checked;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion "Properties"
|
||||||
|
|
||||||
|
#region "Methods"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Open the form
|
||||||
|
/// </summary>
|
||||||
public FormRecurringOpen()
|
public FormRecurringOpen()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion "Methods"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -178,6 +178,7 @@
|
|||||||
can be found.
|
can be found.
|
||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="DoubleClickMonthCalendar.cs" />
|
||||||
<Compile Include="FormRecurringOpen.cs">
|
<Compile Include="FormRecurringOpen.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -5,69 +5,69 @@ using Office = Microsoft.Office.Core;
|
|||||||
|
|
||||||
namespace Outlook2013TodoAddIn
|
namespace Outlook2013TodoAddIn
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class for the add-in
|
||||||
|
/// </summary>
|
||||||
public partial class ThisAddIn
|
public partial class ThisAddIn
|
||||||
{
|
{
|
||||||
private AppointmentsControl appControl;
|
#region "Properties"
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Control with calendar, etc...
|
||||||
|
/// </summary>
|
||||||
|
public AppointmentsControl AppControl { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Custom task pane
|
||||||
|
/// </summary>
|
||||||
public Microsoft.Office.Tools.CustomTaskPane ToDoTaskPane { get; set; }
|
public Microsoft.Office.Tools.CustomTaskPane ToDoTaskPane { get; set; }
|
||||||
|
|
||||||
//private Dictionary<Outlook.Inspector, InspectorWrapper> inspectorWrappersValue = new Dictionary<Outlook.Inspector, InspectorWrapper>();
|
#endregion "Properties"
|
||||||
//private Outlook.Inspectors inspectors;
|
|
||||||
|
|
||||||
//void Inspectors_NewInspector(Outlook.Inspector Inspector)
|
#region "Methods"
|
||||||
//{
|
|
||||||
// if (Inspector.CurrentItem is Outlook.MailItem)
|
|
||||||
// {
|
|
||||||
// inspectorWrappersValue.Add(Inspector, new InspectorWrapper(Inspector));
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public Dictionary<Outlook.Inspector, InspectorWrapper> InspectorWrappers
|
|
||||||
//{
|
|
||||||
// get
|
|
||||||
// {
|
|
||||||
// return inspectorWrappersValue;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initialize settings upon add-in startup
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void ThisAddIn_Startup(object sender, System.EventArgs e)
|
private void ThisAddIn_Startup(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
//inspectors = this.Application.Inspectors;
|
this.AddRegistryNotification();
|
||||||
//inspectors.NewInspector +=
|
|
||||||
// new Outlook.InspectorsEvents_NewInspectorEventHandler(
|
|
||||||
// Inspectors_NewInspector);
|
|
||||||
|
|
||||||
//foreach (Outlook.Inspector inspector in inspectors)
|
this.AppControl = new AppointmentsControl();
|
||||||
//{
|
this.AppControl.NumDays = Properties.Settings.Default.NumDays; // Setting the value will load the appointments
|
||||||
// Inspectors_NewInspector(inspector);
|
this.AppControl.RetrieveAppointments();
|
||||||
//}
|
|
||||||
|
|
||||||
appControl = new AppointmentsControl();
|
ToDoTaskPane = this.CustomTaskPanes.Add(this.AppControl, "Appointments");
|
||||||
appControl.NumDays = Properties.Settings.Default.NumDays; // Setting the value will load the appointments
|
// TODO: Fix this
|
||||||
|
// ToDoTaskPane.Visible = Properties.Settings.Default.Visible;
|
||||||
//Properties.Settings.Default.Properties[]
|
ToDoTaskPane.Visible = true;
|
||||||
// appControl.Dock = System.Windows.Forms.DockStyle.Right;
|
|
||||||
ToDoTaskPane = this.CustomTaskPanes.Add(appControl, "Appointments");
|
|
||||||
ToDoTaskPane.Visible = Properties.Settings.Default.Visible;
|
|
||||||
|
|
||||||
//ToDoTaskPane.Visible = true;
|
|
||||||
//ToDoTaskPane.Width = 285; // appControl.Width;
|
|
||||||
ToDoTaskPane.Width = Properties.Settings.Default.Width;
|
ToDoTaskPane.Width = Properties.Settings.Default.Width;
|
||||||
ToDoTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
|
ToDoTaskPane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
|
||||||
ToDoTaskPane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
|
ToDoTaskPane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
|
||||||
ToDoTaskPane.VisibleChanged += ToDoTaskPane_VisibleChanged;
|
ToDoTaskPane.VisibleChanged += ToDoTaskPane_VisibleChanged;
|
||||||
appControl.SizeChanged += appControl_SizeChanged;
|
this.AppControl.SizeChanged += appControl_SizeChanged;
|
||||||
|
|
||||||
this.AddRegistryNotification();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Store the new size setting upon resizing
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void appControl_SizeChanged(object sender, EventArgs e)
|
private void appControl_SizeChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Properties.Settings.Default.Width = ToDoTaskPane.Width;
|
Properties.Settings.Default.Width = ToDoTaskPane.Width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggle ribbon button's status
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">EventArgs</param>
|
||||||
private void ToDoTaskPane_VisibleChanged(object sender, EventArgs e)
|
private void ToDoTaskPane_VisibleChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
// TODO: Save visibility ONLY when not closing the form
|
||||||
// Properties.Settings.Default.Visible = ToDoTaskPane.Visible;
|
// Properties.Settings.Default.Visible = ToDoTaskPane.Visible;
|
||||||
TodoRibbonAddIn rbn = Globals.Ribbons.FirstOrDefault(r => r is TodoRibbonAddIn) as TodoRibbonAddIn;
|
TodoRibbonAddIn rbn = Globals.Ribbons.FirstOrDefault(r => r is TodoRibbonAddIn) as TodoRibbonAddIn;
|
||||||
if (rbn != null)
|
if (rbn != null)
|
||||||
@ -77,45 +77,42 @@ namespace Outlook2013TodoAddIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is NEVER executed anymore
|
/// This is not executed by default
|
||||||
/// http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta
|
/// http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta
|
||||||
/// We MANUALLY add notification to the registry of each user
|
/// We MANUALLY add notification to the registry of each user below
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sender"></param>
|
/// <param name="sender">Sender</param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e">EventArgs</param>
|
||||||
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
|
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
//inspectors.NewInspector -=
|
// Can't call property setters such as: Properties.Settings.Default.NumDays = XXX because the pane is already disposed.
|
||||||
// new Outlook.InspectorsEvents_NewInspectorEventHandler(
|
// Settings will be set while the app is running and saved here.
|
||||||
// Inspectors_NewInspector);
|
|
||||||
//inspectors = null;
|
|
||||||
//inspectorWrappersValue = null;
|
|
||||||
// Can't call these because the object is already disposed. Settings will be set while the app is running
|
|
||||||
//Properties.Settings.Default.Visible = ToDoTaskPane.Visible;
|
|
||||||
//Properties.Settings.Default.Width = ToDoTaskPane.Width;
|
|
||||||
//Properties.Settings.Default.NumDays = appControl.NumDays;
|
|
||||||
Properties.Settings.Default.Save();
|
Properties.Settings.Default.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Implement shutdown notification for this particular add-in
|
||||||
|
/// http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta
|
||||||
|
/// HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\<ProgID>\[RequireShutdownNotification]=dword:0x1
|
||||||
|
/// </summary>
|
||||||
private void AddRegistryNotification()
|
private void AddRegistryNotification()
|
||||||
{
|
{
|
||||||
// http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta
|
// TODO: Make sure there are no memory leaks (dispose COM obejcts)
|
||||||
// HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\<ProgID>\[RequireShutdownNotification]=dword:0x1
|
// TODO: See if this works the first time (if the entry is not there when Outlook loads, it will NOT notify the add-in)
|
||||||
|
|
||||||
string subKey = @"Software\Microsoft\Office\Outlook\Addins\Outlook2013TodoAddIn";
|
string subKey = @"Software\Microsoft\Office\Outlook\Addins\Outlook2013TodoAddIn";
|
||||||
RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(subKey, true);
|
RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(subKey, true);
|
||||||
|
|
||||||
if (rk == null)
|
if (rk == null)
|
||||||
{
|
{
|
||||||
rk = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(subKey);
|
rk = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(subKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((int)rk.GetValue("RequireShutdownNotification", 0) == 0)
|
if ((int)rk.GetValue("RequireShutdownNotification", 0) == 0)
|
||||||
{
|
{
|
||||||
rk.SetValue("RequireShutdownNotification", 1, RegistryValueKind.DWord); // "dword:0x1"
|
rk.SetValue("RequireShutdownNotification", 1, RegistryValueKind.DWord); // "dword:0x1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion "Methods"
|
||||||
|
|
||||||
#region VSTO generated code
|
#region VSTO generated code
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
1
Outlook2013TodoAddIn/TodoRibbonAddIn.Designer.cs
generated
1
Outlook2013TodoAddIn/TodoRibbonAddIn.Designer.cs
generated
@ -67,7 +67,6 @@
|
|||||||
this.Name = "TodoRibbonAddIn";
|
this.Name = "TodoRibbonAddIn";
|
||||||
this.RibbonType = "Microsoft.Outlook.Explorer";
|
this.RibbonType = "Microsoft.Outlook.Explorer";
|
||||||
this.Tabs.Add(this.tab1);
|
this.Tabs.Add(this.tab1);
|
||||||
this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.TodoRibbonAddIn_Load);
|
|
||||||
this.tab1.ResumeLayout(false);
|
this.tab1.ResumeLayout(false);
|
||||||
this.tab1.PerformLayout();
|
this.tab1.PerformLayout();
|
||||||
this.group1.ResumeLayout(false);
|
this.group1.ResumeLayout(false);
|
||||||
|
@ -2,15 +2,23 @@
|
|||||||
|
|
||||||
namespace Outlook2013TodoAddIn
|
namespace Outlook2013TodoAddIn
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a button to the add-in placeholder in the ribbon
|
||||||
|
/// </summary>
|
||||||
public partial class TodoRibbonAddIn
|
public partial class TodoRibbonAddIn
|
||||||
{
|
{
|
||||||
private void TodoRibbonAddIn_Load(object sender, RibbonUIEventArgs e)
|
#region "Methods"
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Change visibility of the pane
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">Sender</param>
|
||||||
|
/// <param name="e">RibbonControlEventArgs</param>
|
||||||
private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
|
private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
|
||||||
{
|
{
|
||||||
Globals.ThisAddIn.ToDoTaskPane.Visible = this.toggleButton1.Checked;
|
Globals.ThisAddIn.ToDoTaskPane.Visible = this.toggleButton1.Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user