diff --git a/Outlook2013TodoAddIn.sln b/Outlook2013TodoAddIn.sln new file mode 100644 index 0000000..48e3e30 --- /dev/null +++ b/Outlook2013TodoAddIn.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Outlook2013TodoAddIn", "Outlook2013TodoAddIn\Outlook2013TodoAddIn.csproj", "{EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Outlook2013TodoAddIn/2012-11-20_1546.png b/Outlook2013TodoAddIn/2012-11-20_1546.png new file mode 100644 index 0000000..0d90899 Binary files /dev/null and b/Outlook2013TodoAddIn/2012-11-20_1546.png differ diff --git a/Outlook2013TodoAddIn/AppointmentsControl.Designer.cs b/Outlook2013TodoAddIn/AppointmentsControl.Designer.cs new file mode 100644 index 0000000..2cbedcf --- /dev/null +++ b/Outlook2013TodoAddIn/AppointmentsControl.Designer.cs @@ -0,0 +1,201 @@ +namespace Outlook2013TodoAddIn +{ + partial class AppointmentsControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.numRangeDays = new System.Windows.Forms.NumericUpDown(); + this.lblRangeDays = new System.Windows.Forms.Label(); + this.apptCalendar = new System.Windows.Forms.MonthCalendar(); + this.ctxMenuAppointments = new System.Windows.Forms.ContextMenuStrip(this.components); + this.mnuItemReplyAllEmail = new System.Windows.Forms.ToolStripMenuItem(); + this.hdrDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.hdrSubject = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.listView1 = new System.Windows.Forms.ListView(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.numRangeDays)).BeginInit(); + this.ctxMenuAppointments.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // numRangeDays + // + this.numRangeDays.Location = new System.Drawing.Point(60, 21); + this.numRangeDays.Maximum = new decimal(new int[] { + 15, + 0, + 0, + 0}); + this.numRangeDays.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numRangeDays.Name = "numRangeDays"; + this.numRangeDays.Size = new System.Drawing.Size(55, 22); + this.numRangeDays.TabIndex = 2; + this.numRangeDays.Value = new decimal(new int[] { + 3, + 0, + 0, + 0}); + this.numRangeDays.ValueChanged += new System.EventHandler(this.numRangeDays_ValueChanged); + // + // lblRangeDays + // + this.lblRangeDays.AutoSize = true; + this.lblRangeDays.Location = new System.Drawing.Point(10, 23); + this.lblRangeDays.Name = "lblRangeDays"; + this.lblRangeDays.Size = new System.Drawing.Size(44, 17); + this.lblRangeDays.TabIndex = 3; + this.lblRangeDays.Text = "Days:"; + // + // apptCalendar + // + this.apptCalendar.Dock = System.Windows.Forms.DockStyle.Top; + this.apptCalendar.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.apptCalendar.Location = new System.Drawing.Point(0, 0); + this.apptCalendar.MaxSelectionCount = 1; + this.apptCalendar.Name = "apptCalendar"; + this.apptCalendar.TabIndex = 4; + this.apptCalendar.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged); + // + // ctxMenuAppointments + // + this.ctxMenuAppointments.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuItemReplyAllEmail}); + this.ctxMenuAppointments.Name = "ctxMenuAppointments"; + this.ctxMenuAppointments.Size = new System.Drawing.Size(214, 28); + // + // mnuItemReplyAllEmail + // + this.mnuItemReplyAllEmail.Name = "mnuItemReplyAllEmail"; + this.mnuItemReplyAllEmail.Size = new System.Drawing.Size(213, 24); + this.mnuItemReplyAllEmail.Text = "Reply All With Email"; + this.mnuItemReplyAllEmail.Click += new System.EventHandler(this.mnuItemReplyAllEmail_Click); + // + // hdrDate + // + this.hdrDate.Text = "Date"; + this.hdrDate.Width = 78; + // + // hdrSubject + // + this.hdrSubject.Text = "Subject"; + this.hdrSubject.Width = 163; + // + // listView1 + // + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.hdrDate, + this.hdrSubject}); + this.listView1.ContextMenuStrip = this.ctxMenuAppointments; + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.Font = new System.Drawing.Font("Calibri", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listView1.FullRowSelect = true; + this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.MultiSelect = false; + this.listView1.Name = "listView1"; + this.listView1.ShowItemToolTips = true; + this.listView1.Size = new System.Drawing.Size(289, 507); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.btnRefresh); + this.groupBox1.Controls.Add(this.lblRangeDays); + this.groupBox1.Controls.Add(this.numRangeDays); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox1.Location = new System.Drawing.Point(0, 207); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(289, 53); + this.groupBox1.TabIndex = 7; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Days:"; + // + // btnRefresh + // + this.btnRefresh.Location = new System.Drawing.Point(162, 20); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(75, 23); + this.btnRefresh.TabIndex = 4; + this.btnRefresh.Text = "Refresh"; + this.btnRefresh.UseVisualStyleBackColor = true; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.listView1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 260); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(289, 507); + this.panel1.TabIndex = 8; + // + // AppointmentsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.apptCalendar); + this.Name = "AppointmentsControl"; + this.Size = new System.Drawing.Size(289, 767); + ((System.ComponentModel.ISupportInitialize)(this.numRangeDays)).EndInit(); + this.ctxMenuAppointments.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.NumericUpDown numRangeDays; + private System.Windows.Forms.Label lblRangeDays; + private System.Windows.Forms.MonthCalendar apptCalendar; + private System.Windows.Forms.ContextMenuStrip ctxMenuAppointments; + private System.Windows.Forms.ToolStripMenuItem mnuItemReplyAllEmail; + private System.Windows.Forms.ColumnHeader hdrDate; + private System.Windows.Forms.ColumnHeader hdrSubject; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button btnRefresh; + + + } +} diff --git a/Outlook2013TodoAddIn/AppointmentsControl.cs b/Outlook2013TodoAddIn/AppointmentsControl.cs new file mode 100644 index 0000000..9cdbd68 --- /dev/null +++ b/Outlook2013TodoAddIn/AppointmentsControl.cs @@ -0,0 +1,265 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using Outlook = Microsoft.Office.Interop.Outlook; + +namespace Outlook2013TodoAddIn +{ + public partial class AppointmentsControl : UserControl + { + private const string PR_SMTP_ADDRESS = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"; + + public decimal NumDays + { + get + { + return this.numRangeDays.Value; + } + set + { + this.numRangeDays.Value = value; + } + } + + public AppointmentsControl() + { + InitializeComponent(); + + //(this.apptCalendar as Control).SetStyle(); + //(this.apptCalendar as Control).DoubleClick += AppointmentsControl_DoubleClick; + // ShowScrollBar(this.listView1.Handle.ToInt64(), SB_HORZ, 0); + } + + //[DllImport("user32")] + //private static extern long ShowScrollBar(long hwnd, long wBar, long bShow); + //long SB_HORZ = 0; + //long SB_VERT = 1; + //long SB_BOTH = 3; + + //void AppointmentsControl_DoubleClick(object sender, EventArgs e) + //{ + // MessageBox.Show("Test"); + //} + + private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) + { + this.RetrieveAppointments(); + } + + private void numRangeDays_ValueChanged(object sender, EventArgs e) + { + Properties.Settings.Default.NumDays = this.numRangeDays.Value; + this.RetrieveAppointments(); + } + + private void btnRefresh_Click(object sender, EventArgs e) + { + this.RetrieveAppointments(); + } + + public void RetrieveAppointments() + { + // 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; + + int selectedMonth = this.apptCalendar.SelectionStart.Month; + int selectedYear = this.apptCalendar.SelectionStart.Year; + + // To get all the appointments for the current month (so it displays nicely bolded even for past events) + DateTime start = new DateTime(selectedYear, selectedMonth, 1); // MM-01-YYYY + DateTime end = start.AddMonths(1).AddDays(-1); // Last day of the month + end = end.AddDays((int)this.numRangeDays.Value); // So we get appointments for the "possible" first days of the next month + + // Get all the appointments + Outlook.Items rangeAppts = GetAppointmentsInRange(calFolder, start, end); + + // Get a more manageable list + List appts = new List(); + if (rangeAppts != null) + { + foreach (Outlook.AppointmentItem appt in rangeAppts) + { + appts.Add(appt); + } + } + + // Highlight dates with appointments in the current calendar + this.apptCalendar.BoldedDates = appts.Select(a => a.Start).ToArray(); + + // Now display the actual appointments below the calendar + DateTime startRange = this.apptCalendar.SelectionStart; + DateTime endRange = startRange.AddDays((int)this.numRangeDays.Value); + + // Get items in range + var lstItems = appts.Where(a => a.Start >= startRange && a.Start <= endRange); + + int sameDay = -1; // startRange.Day; + + List lstCol = new List(); + lstItems.ToList().ForEach(i => + { + if (i.Start.Day != sameDay) + { + ListViewItem dateItem = new ListViewItem() { Text = i.Start.ToShortDateString() }; + dateItem.Font = new Font(this.listView1.Font, FontStyle.Bold); + lstCol.Add(dateItem); + sameDay = i.Start.Day; + }; + + ListViewItem current = new ListViewItem() { Text = i.Start.ToShortTimeString() }; + current.SubItems.Add(i.Subject); + + // current.SubItems.Add(i.Location); + current.ToolTipText = String.Format("{0} - {1} {2}", i.Start.ToShortTimeString(), i.End.ToShortTimeString(), i.Subject); + current.Tag = i; + + switch (i.BusyStatus) + { + case Outlook.OlBusyStatus.olBusy: + current.ForeColor = Color.Purple; + break; + + case Outlook.OlBusyStatus.olFree: + break; + + case Outlook.OlBusyStatus.olOutOfOffice: + current.ForeColor = Color.Brown; + break; + + case Outlook.OlBusyStatus.olTentative: + break; + + case Outlook.OlBusyStatus.olWorkingElsewhere: + break; + + default: + break; + } + + lstCol.Add(current); + + // Add location into a new line (if available) + if (!String.IsNullOrEmpty(i.Location)) + { + ListViewItem locationItem = new ListViewItem() { Text = String.Empty }; + locationItem.SubItems.Add(i.Location); + locationItem.ForeColor = current.ForeColor; + locationItem.Tag = i; + lstCol.Add(locationItem); + } + }); + + this.listView1.Items.Clear(); + this.listView1.Items.AddRange(lstCol.ToArray()); + } + + /// + /// Get recurring appointments in date range. + /// + /// + /// + /// + /// Outlook.Items + private Outlook.Items GetAppointmentsInRange(Outlook.Folder folder, DateTime startTime, DateTime endTime) + { + string filter = "[Start] >= '" + + startTime.ToString("g") + + "' AND [End] <= '" + + endTime.ToString("g") + "'"; + + try + { + Outlook.Items calItems = folder.Items; + calItems.IncludeRecurrences = true; + calItems.Sort("[Start]", Type.Missing); + Outlook.Items restrictItems = calItems.Restrict(filter); + if (restrictItems.Count > 0) + { + return restrictItems; + } + else + { + return null; + } + } + catch { return null; } + } + + private void listView1_DoubleClick(object sender, EventArgs e) + { + if (this.listView1.SelectedIndices.Count != 0) + { + Outlook.AppointmentItem appt = this.listView1.SelectedItems[0].Tag as Outlook.AppointmentItem; + if (appt != null) + { + if (appt.IsRecurring) + { + FormRecurringOpen f = new FormRecurringOpen(); + if (f.ShowDialog() == DialogResult.OK) + { + if (f.OpenRecurring) + { + // Open up the master appointment in a new window + // If we open the current instance then there is an error: "This item is no longer valid because it has been closed" + // One workaround is to refresh the appointments list to get new instances... + Outlook.AppointmentItem masterAppt = appt.Parent; // Get the master appointment item + masterAppt.Display(true); // Will modify ALL instances + } + else + { + // Open up the appointment in a new window + appt.Display(true); // Modal yes/no + } + } + } + else + { + // Open up the appointment in a new window + appt.Display(true); // Modal yes/no + } + + // At the end, synchronously "refresh" items in case they have changed + this.RetrieveAppointments(); + } + } + } + + private void mnuItemReplyAllEmail_Click(object sender, EventArgs e) + { + if (this.listView1.SelectedIndices.Count != 0) + { + Outlook.AppointmentItem appt = this.listView1.SelectedItems[0].Tag as Outlook.AppointmentItem; + if (appt != null) + { + Outlook.MailItem mail = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; + + string curUserAddress = GetEmailAddress(Globals.ThisAddIn.Application.Session.CurrentUser); + foreach (Outlook.Recipient rcpt in appt.Recipients) + { + string smtpAddress = GetEmailAddress(rcpt); + if (curUserAddress != smtpAddress) + { + mail.Recipients.Add(smtpAddress); + + //mail.Recipients.Add(rcpt.AddressEntry.Name); + } + } + mail.Body = Environment.NewLine + Environment.NewLine + appt.Body; + mail.Subject = "RE: " + appt.Subject; + mail.Display(); + } + } + } + + private string GetEmailAddress(Outlook.Recipient rcpt) + { + Outlook.PropertyAccessor pa = rcpt.PropertyAccessor; + return pa.GetProperty(PR_SMTP_ADDRESS).ToString(); + } + } +} \ No newline at end of file diff --git a/Outlook2013TodoAddIn/AppointmentsControl.resx b/Outlook2013TodoAddIn/AppointmentsControl.resx new file mode 100644 index 0000000..86afd8b --- /dev/null +++ b/Outlook2013TodoAddIn/AppointmentsControl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/FormRecurringOpen.Designer.cs b/Outlook2013TodoAddIn/FormRecurringOpen.Designer.cs new file mode 100644 index 0000000..4ec929f --- /dev/null +++ b/Outlook2013TodoAddIn/FormRecurringOpen.Designer.cs @@ -0,0 +1,121 @@ +namespace Outlook2013TodoAddIn +{ + partial class FormRecurringOpen + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.rbtnOne = new System.Windows.Forms.RadioButton(); + this.rbtnAll = new System.Windows.Forms.RadioButton(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(57, 195); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(75, 23); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.UseVisualStyleBackColor = true; + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(192, 195); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 23); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + // + // rbtnOne + // + this.rbtnOne.AutoSize = true; + this.rbtnOne.Checked = true; + this.rbtnOne.Location = new System.Drawing.Point(57, 91); + this.rbtnOne.Name = "rbtnOne"; + this.rbtnOne.Size = new System.Drawing.Size(109, 21); + this.rbtnOne.TabIndex = 2; + this.rbtnOne.TabStop = true; + this.rbtnOne.Text = "Just this one"; + this.rbtnOne.UseVisualStyleBackColor = true; + // + // rbtnAll + // + this.rbtnAll.AutoSize = true; + this.rbtnAll.Location = new System.Drawing.Point(57, 118); + this.rbtnAll.Name = "rbtnAll"; + this.rbtnAll.Size = new System.Drawing.Size(136, 21); + this.rbtnAll.TabIndex = 3; + this.rbtnAll.Text = "The entire series"; + this.rbtnAll.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(57, 12); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(227, 62); + this.textBox1.TabIndex = 4; + this.textBox1.Text = "This is one appointment in a series. What do you want to open?"; + // + // FormRecurringOpen + // + this.AcceptButton = this.btnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(312, 255); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.rbtnAll); + this.Controls.Add(this.rbtnOne); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormRecurringOpen"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Open Recurring Item"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.RadioButton rbtnOne; + private System.Windows.Forms.RadioButton rbtnAll; + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/Outlook2013TodoAddIn/FormRecurringOpen.cs b/Outlook2013TodoAddIn/FormRecurringOpen.cs new file mode 100644 index 0000000..863d159 --- /dev/null +++ b/Outlook2013TodoAddIn/FormRecurringOpen.cs @@ -0,0 +1,22 @@ +using System.Windows.Forms; + +namespace Outlook2013TodoAddIn +{ + public partial class FormRecurringOpen : Form + { + public DialogResult ButtonPressed { get; set; } + + public bool OpenRecurring + { + get + { + return this.rbtnAll.Checked; + } + } + + public FormRecurringOpen() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/Outlook2013TodoAddIn/FormRecurringOpen.resx b/Outlook2013TodoAddIn/FormRecurringOpen.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Outlook2013TodoAddIn/FormRecurringOpen.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/ManageTaskPaneRibbon.resx b/Outlook2013TodoAddIn/ManageTaskPaneRibbon.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Outlook2013TodoAddIn/ManageTaskPaneRibbon.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/Outlook2013TodoAddIn.csproj b/Outlook2013TodoAddIn/Outlook2013TodoAddIn.csproj new file mode 100644 index 0000000..72e91f8 --- /dev/null +++ b/Outlook2013TodoAddIn/Outlook2013TodoAddIn.csproj @@ -0,0 +1,274 @@ + + + + + + {BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Debug + AnyCPU + {EF0CD4A2-56E1-4C98-BE40-ED2D969F16A8} + Library + false + Outlook2013TodoAddIn + Outlook2013TodoAddIn + v4.5 + VSTO40 + False + true + publish\ + + en + 1.0.0.4 + true + true + 7 + days + Outlook2013TodoAddIn + + + Outlook2013TodoAddIn + + 3 + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 4.5 + true + + + + + Outlook + + + + true + full + false + bin\Debug\ + false + $(DefineConstants);DEBUG;TRACE + 4 + + + + pdbonly + true + bin\Release\ + false + $(DefineConstants);TRACE + 4 + + + + + + + + + + + + + + + + + + + + + + + + True + + + True + + + + + False + true + + + False + true + + + False + + + + + + Form + + + FormRecurringOpen.cs + + + Code + + + UserControl + + + AppointmentsControl.cs + + + Component + + + TodoRibbonAddIn.cs + + + FormRecurringOpen.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + AppointmentsControl.cs + + + TodoRibbonAddIn.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Code + + + ThisAddIn.cs + + + ThisAddIn.Designer.xml + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + true + + + Outlook2013TodoAddIn_TemporaryKey.pfx + + + B6559589A18A516E837FF896B50FFF8050D46FFB + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/Outlook2013TodoAddIn_TemporaryKey.pfx b/Outlook2013TodoAddIn/Outlook2013TodoAddIn_TemporaryKey.pfx new file mode 100644 index 0000000..947e724 Binary files /dev/null and b/Outlook2013TodoAddIn/Outlook2013TodoAddIn_TemporaryKey.pfx differ diff --git a/Outlook2013TodoAddIn/Properties/AssemblyInfo.cs b/Outlook2013TodoAddIn/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0773445 --- /dev/null +++ b/Outlook2013TodoAddIn/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Outlook2013TodoAddIn")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Outlook2013TodoAddIn")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("88026d93-9414-4884-9d7e-6cb7f8274093")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Outlook2013TodoAddIn/Properties/Resources.Designer.cs b/Outlook2013TodoAddIn/Properties/Resources.Designer.cs new file mode 100644 index 0000000..4e6f799 --- /dev/null +++ b/Outlook2013TodoAddIn/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18010 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Outlook2013TodoAddIn.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Outlook2013TodoAddIn.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap todoIcon { + get { + object obj = ResourceManager.GetObject("todoIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Outlook2013TodoAddIn/Properties/Resources.resx b/Outlook2013TodoAddIn/Properties/Resources.resx new file mode 100644 index 0000000..6641111 --- /dev/null +++ b/Outlook2013TodoAddIn/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\2012-11-20_1546.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/Properties/Settings.Designer.cs b/Outlook2013TodoAddIn/Properties/Settings.Designer.cs new file mode 100644 index 0000000..3fd554d --- /dev/null +++ b/Outlook2013TodoAddIn/Properties/Settings.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18033 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Outlook2013TodoAddIn.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool Visible { + get { + return ((bool)(this["Visible"])); + } + set { + this["Visible"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("285")] + public int Width { + get { + return ((int)(this["Width"])); + } + set { + this["Width"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("3")] + public decimal NumDays { + get { + return ((decimal)(this["NumDays"])); + } + set { + this["NumDays"] = value; + } + } + } +} diff --git a/Outlook2013TodoAddIn/Properties/Settings.settings b/Outlook2013TodoAddIn/Properties/Settings.settings new file mode 100644 index 0000000..93b26d9 --- /dev/null +++ b/Outlook2013TodoAddIn/Properties/Settings.settings @@ -0,0 +1,15 @@ + + + + + + True + + + 285 + + + 3 + + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/ThisAddIn.Designer.cs b/Outlook2013TodoAddIn/ThisAddIn.Designer.cs new file mode 100644 index 0000000..f44a259 --- /dev/null +++ b/Outlook2013TodoAddIn/ThisAddIn.Designer.cs @@ -0,0 +1,286 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18010 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +#pragma warning disable 414 +namespace Outlook2013TodoAddIn { + + + /// + [Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)] + [global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] + public sealed partial class ThisAddIn : Microsoft.Office.Tools.Outlook.OutlookAddInBase { + + internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + private global::System.Object missing = global::System.Type.Missing; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + internal Microsoft.Office.Interop.Outlook.Application Application; + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + public ThisAddIn(global::Microsoft.Office.Tools.Outlook.Factory factory, global::System.IServiceProvider serviceProvider) : + base(factory, serviceProvider, "AddIn", "ThisAddIn") { + Globals.Factory = factory; + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void Initialize() { + base.Initialize(); + this.Application = this.GetHostItem(typeof(Microsoft.Office.Interop.Outlook.Application), "Application"); + Globals.ThisAddIn = this; + global::System.Windows.Forms.Application.EnableVisualStyles(); + this.InitializeCachedData(); + this.InitializeControls(); + this.InitializeComponents(); + this.InitializeData(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void FinishInitialization() { + this.InternalStartup(); + this.OnStartup(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void InitializeDataBindings() { + this.BeginInitialization(); + this.BindToData(); + this.EndInitialization(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeCachedData() { + if ((this.DataHost == null)) { + return; + } + if (this.DataHost.IsCacheInitialized) { + this.DataHost.FillCachedData(this); + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeData() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void BindToData() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private void StartCaching(string MemberName) { + this.DataHost.StartCaching(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private void StopCaching(string MemberName) { + this.DataHost.StopCaching(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private bool IsCached(string MemberName) { + return this.DataHost.IsCached(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void BeginInitialization() { + this.BeginInit(); + this.CustomTaskPanes.BeginInit(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void EndInitialization() { + this.CustomTaskPanes.EndInit(); + this.EndInit(); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeControls() { + this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + private void InitializeComponents() { + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + private bool NeedsFill(string MemberName) { + return this.DataHost.NeedsFill(this, MemberName); + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] + protected override void OnShutdown() { + this.CustomTaskPanes.Dispose(); + base.OnShutdown(); + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + internal sealed partial class Globals { + + /// + private Globals() { + } + + private static ThisAddIn _ThisAddIn; + + private static global::Microsoft.Office.Tools.Outlook.Factory _factory; + + private static ThisRibbonCollection _ThisRibbonCollection; + + private static ThisFormRegionCollection _ThisFormRegionCollection; + + internal static ThisAddIn ThisAddIn { + get { + return _ThisAddIn; + } + set { + if ((_ThisAddIn == null)) { + _ThisAddIn = value; + } + else { + throw new System.NotSupportedException(); + } + } + } + + internal static global::Microsoft.Office.Tools.Outlook.Factory Factory { + get { + return _factory; + } + set { + if ((_factory == null)) { + _factory = value; + } + else { + throw new System.NotSupportedException(); + } + } + } + + internal static ThisRibbonCollection Ribbons { + get { + if ((_ThisRibbonCollection == null)) { + _ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory()); + } + return _ThisRibbonCollection; + } + } + + internal static ThisFormRegionCollection FormRegions { + get { + if ((_ThisFormRegionCollection == null)) { + _ThisFormRegionCollection = new ThisFormRegionCollection(Globals.ThisAddIn.GetFormRegions()); + } + return _ThisFormRegionCollection; + } + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "11.0.0.0")] + internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase { + + /// + internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) : + base(factory) { + } + + internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] { + get { + return this.GetRibbonContextCollection(inspector); + } + } + + internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] { + get { + return this.GetRibbonContextCollection(explorer); + } + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal sealed partial class ThisFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase { + + /// + public ThisFormRegionCollection(System.Collections.Generic.IList list) : + base(list) { + } + + internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] { + get { + return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(explorer, typeof(WindowFormRegionCollection)))); + } + } + + internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] { + get { + return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(inspector, typeof(WindowFormRegionCollection)))); + } + } + } + + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal sealed partial class WindowFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase { + + /// + public WindowFormRegionCollection(System.Collections.Generic.IList list) : + base(list) { + } + } +} diff --git a/Outlook2013TodoAddIn/ThisAddIn.Designer.xml b/Outlook2013TodoAddIn/ThisAddIn.Designer.xml new file mode 100644 index 0000000..9143365 --- /dev/null +++ b/Outlook2013TodoAddIn/ThisAddIn.Designer.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/ThisAddIn.cs b/Outlook2013TodoAddIn/ThisAddIn.cs new file mode 100644 index 0000000..b1f1a36 --- /dev/null +++ b/Outlook2013TodoAddIn/ThisAddIn.cs @@ -0,0 +1,133 @@ +using Microsoft.Win32; +using System; +using System.Linq; +using Office = Microsoft.Office.Core; + +namespace Outlook2013TodoAddIn +{ + public partial class ThisAddIn + { + private AppointmentsControl appControl; + + public Microsoft.Office.Tools.CustomTaskPane ToDoTaskPane { get; set; } + + //private Dictionary inspectorWrappersValue = new Dictionary(); + //private Outlook.Inspectors inspectors; + + //void Inspectors_NewInspector(Outlook.Inspector Inspector) + //{ + // if (Inspector.CurrentItem is Outlook.MailItem) + // { + // inspectorWrappersValue.Add(Inspector, new InspectorWrapper(Inspector)); + // } + //} + + //public Dictionary InspectorWrappers + //{ + // get + // { + // return inspectorWrappersValue; + // } + //} + + private void ThisAddIn_Startup(object sender, System.EventArgs e) + { + //inspectors = this.Application.Inspectors; + //inspectors.NewInspector += + // new Outlook.InspectorsEvents_NewInspectorEventHandler( + // Inspectors_NewInspector); + + //foreach (Outlook.Inspector inspector in inspectors) + //{ + // Inspectors_NewInspector(inspector); + //} + + appControl = new AppointmentsControl(); + appControl.NumDays = Properties.Settings.Default.NumDays; // Setting the value will load the appointments + + //Properties.Settings.Default.Properties[] + // 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.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; + ToDoTaskPane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal; + ToDoTaskPane.VisibleChanged += ToDoTaskPane_VisibleChanged; + appControl.SizeChanged += appControl_SizeChanged; + + this.AddRegistryNotification(); + } + + private void appControl_SizeChanged(object sender, EventArgs e) + { + Properties.Settings.Default.Width = ToDoTaskPane.Width; + } + + private void ToDoTaskPane_VisibleChanged(object sender, EventArgs e) + { + // Properties.Settings.Default.Visible = ToDoTaskPane.Visible; + TodoRibbonAddIn rbn = Globals.Ribbons.FirstOrDefault(r => r is TodoRibbonAddIn) as TodoRibbonAddIn; + if (rbn != null) + { + rbn.toggleButton1.Checked = ToDoTaskPane.Visible; + } + } + + /// + /// This is NEVER executed anymore + /// http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta + /// We MANUALLY add notification to the registry of each user + /// + /// + /// + private void ThisAddIn_Shutdown(object sender, System.EventArgs e) + { + //inspectors.NewInspector -= + // new Outlook.InspectorsEvents_NewInspectorEventHandler( + // 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(); + } + + private void AddRegistryNotification() + { + // http://msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta + // HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\\[RequireShutdownNotification]=dword:0x1 + + string subKey = @"Software\Microsoft\Office\Outlook\Addins\Outlook2013TodoAddIn"; + RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(subKey, true); + + if (rk == null) + { + rk = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(subKey); + } + + if ((int)rk.GetValue("RequireShutdownNotification", 0) == 0) + { + rk.SetValue("RequireShutdownNotification", 1, RegistryValueKind.DWord); // "dword:0x1" + } + } + + #region VSTO generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InternalStartup() + { + this.Startup += new System.EventHandler(ThisAddIn_Startup); + this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); + } + + #endregion VSTO generated code + } +} \ No newline at end of file diff --git a/Outlook2013TodoAddIn/TodoRibbonAddIn.Designer.cs b/Outlook2013TodoAddIn/TodoRibbonAddIn.Designer.cs new file mode 100644 index 0000000..38a6676 --- /dev/null +++ b/Outlook2013TodoAddIn/TodoRibbonAddIn.Designer.cs @@ -0,0 +1,92 @@ +namespace Outlook2013TodoAddIn +{ + partial class TodoRibbonAddIn : Microsoft.Office.Tools.Ribbon.RibbonBase + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + public TodoRibbonAddIn() + : base(Globals.Factory.GetRibbonFactory()) + { + InitializeComponent(); + } + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tab1 = this.Factory.CreateRibbonTab(); + this.group1 = this.Factory.CreateRibbonGroup(); + this.toggleButton1 = this.Factory.CreateRibbonToggleButton(); + this.tab1.SuspendLayout(); + this.group1.SuspendLayout(); + // + // tab1 + // + this.tab1.ControlId.ControlIdType = Microsoft.Office.Tools.Ribbon.RibbonControlIdType.Office; + this.tab1.Groups.Add(this.group1); + this.tab1.Label = "TabAddIns"; + this.tab1.Name = "tab1"; + // + // group1 + // + this.group1.Items.Add(this.toggleButton1); + this.group1.Label = "To-Do AddIn"; + this.group1.Name = "group1"; + // + // toggleButton1 + // + this.toggleButton1.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; + this.toggleButton1.Image = global::Outlook2013TodoAddIn.Properties.Resources.todoIcon; + this.toggleButton1.Label = "Show To-Do Panel"; + this.toggleButton1.Name = "toggleButton1"; + this.toggleButton1.ShowImage = true; + this.toggleButton1.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.toggleButton1_Click); + // + // TodoRibbonAddIn + // + this.Name = "TodoRibbonAddIn"; + this.RibbonType = "Microsoft.Outlook.Explorer"; + this.Tabs.Add(this.tab1); + this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.TodoRibbonAddIn_Load); + this.tab1.ResumeLayout(false); + this.tab1.PerformLayout(); + this.group1.ResumeLayout(false); + this.group1.PerformLayout(); + + } + + #endregion + + internal Microsoft.Office.Tools.Ribbon.RibbonTab tab1; + internal Microsoft.Office.Tools.Ribbon.RibbonGroup group1; + internal Microsoft.Office.Tools.Ribbon.RibbonToggleButton toggleButton1; + } + + partial class ThisRibbonCollection + { + internal TodoRibbonAddIn TodoRibbonAddIn + { + get { return this.GetRibbon(); } + } + } +} diff --git a/Outlook2013TodoAddIn/TodoRibbonAddIn.cs b/Outlook2013TodoAddIn/TodoRibbonAddIn.cs new file mode 100644 index 0000000..e66c965 --- /dev/null +++ b/Outlook2013TodoAddIn/TodoRibbonAddIn.cs @@ -0,0 +1,16 @@ +using Microsoft.Office.Tools.Ribbon; + +namespace Outlook2013TodoAddIn +{ + public partial class TodoRibbonAddIn + { + private void TodoRibbonAddIn_Load(object sender, RibbonUIEventArgs e) + { + } + + private void toggleButton1_Click(object sender, RibbonControlEventArgs e) + { + Globals.ThisAddIn.ToDoTaskPane.Visible = this.toggleButton1.Checked; + } + } +} \ No newline at end of file diff --git a/Outlook2013TodoAddIn/TodoRibbonAddIn.resx b/Outlook2013TodoAddIn/TodoRibbonAddIn.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Outlook2013TodoAddIn/TodoRibbonAddIn.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Outlook2013TodoAddIn/app.config b/Outlook2013TodoAddIn/app.config new file mode 100644 index 0000000..1dc6f0b --- /dev/null +++ b/Outlook2013TodoAddIn/app.config @@ -0,0 +1,21 @@ + + + + +
+ + + + + + True + + + 285 + + + 3 + + + + \ No newline at end of file