forked from David-Barrett-MS/OutlookEventsInspector
-
Notifications
You must be signed in to change notification settings - Fork 0
/
InspectorWrapper.cs
141 lines (116 loc) · 5.77 KB
/
InspectorWrapper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
* By David Barrett, Microsoft Ltd. 2016-2020. Use at your own risk. No warranties are given.
*
* DISCLAIMER:
* THIS CODE IS SAMPLE CODE. THESE SAMPLES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
* MICROSOFT FURTHER DISCLAIMS ALL IMPLIED WARRANTIES INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR OF FITNESS FOR
* A PARTICULAR PURPOSE. THE ENTIRE RISK ARISING OUT OF THE USE OR PERFORMANCE OF THE SAMPLES REMAINS WITH YOU. IN NO EVENT SHALL
* MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
* BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE
* SAMPLES, EVEN IF MICROSOFT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION
* OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.
*/
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System;
using System.Reflection;
namespace InspectorEvents {
internal delegate void InspectorWrapperClosedEventHandler(Guid id);
internal abstract class InspectorWrapper {
public event InspectorWrapperClosedEventHandler Closed;
public Guid Id { get; private set; }
public Outlook.Inspector Inspector { get; private set; }
public InspectorWrapper(Outlook.Inspector inspector) {
Id = Guid.NewGuid();
Inspector = inspector;
// register for Inspector events
Inspector.AttachmentSelectionChange += Inspector_AttachmentSelectionChange;
Inspector.BeforeMaximize += Inspector_BeforeMaximize;
Inspector.BeforeMinimize += Inspector_BeforeMinimize;
Inspector.BeforeMove += Inspector_BeforeMove;
Inspector.BeforeSize += Inspector_BeforeSize;
Inspector.Deactivate += Inspector_Deactivate;
Inspector.PageChange += Inspector_PageChange;
((Outlook.InspectorEvents_10_Event)Inspector).Close += new Outlook.InspectorEvents_10_CloseEventHandler(Inspector_Close);
((Outlook.InspectorEvents_10_Event)Inspector).Activate += new Outlook.InspectorEvents_10_ActivateEventHandler(Activate);
Initialize();
}
void Inspector_PageChange(ref string ActivePageName)
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_PageChange");
}
void Inspector_Deactivate()
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_Deactivate");
}
void Inspector_BeforeSize(ref bool Cancel)
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_BeforeSize");
}
void Inspector_BeforeMove(ref bool Cancel)
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_BeforeMove");
}
void Inspector_BeforeMinimize(ref bool Cancel)
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_BeforeMinimize");
}
void Inspector_BeforeMaximize(ref bool Cancel)
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_BeforeMaximize");
}
void Inspector_AttachmentSelectionChange()
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_AttachmentSelectionChange");
}
private void Inspector_Close() {
// unregister Inspector events
Inspector.AttachmentSelectionChange -= Inspector_AttachmentSelectionChange;
Inspector.BeforeMaximize -= Inspector_BeforeMaximize;
Inspector.BeforeMinimize -= Inspector_BeforeMinimize;
Inspector.BeforeMove -= Inspector_BeforeMove;
Inspector.BeforeSize -= Inspector_BeforeSize;
Inspector.Deactivate -= Inspector_Deactivate;
Inspector.PageChange -= Inspector_PageChange;
((Outlook.InspectorEvents_10_Event)Inspector).Close -= new Outlook.InspectorEvents_10_CloseEventHandler(Inspector_Close);
((Outlook.InspectorEvents_10_Event)Inspector).Activate -= new Outlook.InspectorEvents_10_ActivateEventHandler(Activate);
Close();
Inspector = null;
GC.Collect();
GC.WaitForPendingFinalizers();
if (Closed != null) Closed(Id);
}
protected virtual void Initialize() { }
protected virtual void Activate()
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_Activate");
}
protected virtual void Close()
{
Globals.ThisAddIn.EventTrackerForm.AddLog("Inspector_Close");
}
public static InspectorWrapper GetWrapperFor(Outlook.Inspector inspector)
{
string messageClass = (string)inspector.CurrentItem.GetType().InvokeMember("MessageClass", BindingFlags.GetProperty, null, inspector.CurrentItem, null);
// Create a wrapper depending upon the message class
switch (messageClass) {
case "IPM.Contact":
return new ContactItemWrapper(inspector);
case "IPM.Journal":
return new JournalItemWrapper(inspector);
case "IPM.Note":
return new MailItemInspectorWrapper(inspector);
case "IPM.Post":
return new PostItemWrapper(inspector);
case "IPM.Task":
return new TaskItemWrapper(inspector);
}
// Create a wrapper based on Outlook type
if (inspector.CurrentItem is Outlook.AppointmentItem) {
return new AppointmentItemWrapper(inspector);
}
// no wrapper found
return null;
}
}
}