#ifndef Addin_H
#define Addin_H
#include "_IDTExtensibility2.h"
#include "IRibbonUI.h"
#include "IRibbonExtensibility.h"
#include "IRibbonControl.h"
#include "RibbonElements.h"
#include "AppEvents.h"
#include "ExplorersEvents.h"
#include "InspectorsEvents.h"
#include "Thread.h"
#include "SkypeDefs.h"
// addin methods (must not overlap with ribbon DISPIDs)
#define DISPID_ADDIN_BASE (DISPID_RIBBONCALLBACK_LAST + 0x00000001)
#define DISPID_ADDIN_SETAPISTATUS (DISPID_ADDIN_BASE + 0x00000001)
#define DISPID_ADDIN_PROCESSSKYPEMESSAGE (DISPID_ADDIN_BASE + 0x00000002)
#define DISPID_ADDIN_FIRST (DISPID_ADDIN_SETAPISTATUS)
#define DISPID_ADDIN_LAST (DISPID_ADDIN_PROCESSSKYPEMESSAGE)
// call contexts for sending messages to Skype
// this is used to identify response (which message type corresponds to)
// mainly is used when an error occur
#define SKYPE_CALLCONTEXT_BASE (0x00000000)
#define SKYPE_CALLCONTEXT_NONE (SKYPE_CALLCONTEXT_BASE + 0x00000000)
#define SKYPE_CALLCONTEXT_GETSKYPEVERSION (SKYPE_CALLCONTEXT_BASE + 0x00000001)
#define SKYPE_CALLCONTEXT_GET_AVATAR (SKYPE_CALLCONTEXT_BASE + 0x00000002)
typedef struct tagCOPYDATASTRUCT_CTX {
DWORD_PTR dwContext;
ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT_CTX, *PCOPYDATASTRUCT_CTX;
typedef struct XAddin XAddin;
struct XAddin {
// interfaces
_IDTExtensibility2 iAddin;
IRibbonExtensibility iRibbonX;
// events
XAppEvents *AppEvents;
XExplorersEvents *ExplorersEvents;
XInspectorsEvents *InspectorsEvents;
// convenient IUnknown helpers
HRESULT (NDAPI *QueryInterface)(
XAddin *pAddin,
REFIID riid,
void **ppvObject
);
ULONG (NDAPI *AddRef)(
XAddin *pAddin
);
ULONG (NDAPI *Release)(
XAddin *pAddin
);
// Outlook event handlers
VOID (NDAPI *OnQuit)(
XAddin *pAddin
);
VOID (NDAPI *OnNewExplorer)(
XAddin *pAddin,
IDispatch *pNewExplorer
);
VOID (NDAPI *OnNewInspector)(
XAddin *pAddin,
IDispatch *pNewInspector
);
// ribbon handlers
HRESULT (NDAPI *GetCustomUI)(
XAddin *pAddin,
BSTR RibbonID,
BSTR *RibbonXML
);
HRESULT (NDAPI *OnLoad)(
XAddin *pAddin,
IDispatch *RibbonControl
);
HRESULT (NDAPI *GetControlProperty)(
XAddin *pAddin,
IDispatch *RibbonControl,
DISPID DispID,
VARIANT *Value
);
HRESULT (NDAPI *Action)(
XAddin *pAddin,
IDispatch *RibbonControl
);
HRESULT (NDAPI *Action2)(
XAddin *pAddin,
IDispatch *RibbonControl,
BOOL Pressed
);
HRESULT (NDAPI *OnChange)(
XAddin *pAddin,
IDispatch *RibbonControl,
BSTR Text
);
HRESULT (NDAPI *InvalidateRibbon)(
XAddin *pAddin
);
HRESULT (NDAPI *InvalidateAll)(
XAddin *pAddin
);
HRESULT (NDAPI *InvalidateRibbonControl)(
XAddin *pAddin,
BSTR ControlID
);
// Skype handlers
BOOL (NDAPI *IsSkypeRunning)(
XAddin *pAddin
);
PVOID (NDAPI *SendSkypeMessage)(
XAddin *pAddin,
LPCSTR SkypeMessage,
PVOID Value,
enum VARENUM Type,
DWORD_PTR Context
);
LPCWSTR (NDAPI *GetSkypePropertySzW)(
XAddin *pAddin,
LPCSTR SkypeMessage,
LPWSTR Value,
DWORD_PTR Context
);
BOOL (NDAPI *GetSkypePropertyBool)(
XAddin *pAddin,
LPCSTR SkypeMessage,
BOOL *Value,
DWORD_PTR Context
);
VOID (NDAPI *SetSkypeApiStatus)(
XAddin *pAddin,
SKYPE_API_STATUS ApiStatus
);
VOID (NDAPI *SetSkypeApiHWND)(
XAddin *pAddin,
HWND ApiHWND
);
VOID (NDAPI *ProcessSkypeMessage)(
XAddin *pAddin,
PCOPYDATASTRUCT pCDS
);
LPCWSTR (NDAPI *GetSkypeVersion)(
XAddin *pAddin
);
VOID (NDAPI *SetSkypePresenceStatus)(
XAddin *pAddin,
SKYPE_PRESENCE Presence
);
LPCWSTR (NDAPI *GetSkypeLoggedOnUser)(
XAddin *pAddin
);
BOOL (NDAPI *GetPCSpeaker)(
XAddin *pAddin
);
VOID (NDAPI *SetPCSpeaker)(
XAddin *pAddin,
BOOL Value
);
BOOL (NDAPI *GetRingtone)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetRingtoneFile)(
XAddin *pAddin
);
VOID (NDAPI *SetRingtone)(
XAddin *pAddin,
BOOL Value
);
LPCWSTR (NDAPI *GetAvatar)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetBalance)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCurrency)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetFullName)(
XAddin *pAddin
);
VOID (NDAPI *SetFullName)(
XAddin *pAddin,
LPCWSTR Value
);
LPCWSTR (NDAPI *GetBirthday)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetSex)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetLanguages)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCountry)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetIPCountry)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetProvince)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCity)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetPhoneHome)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetPhoneOffice)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetPhoneMobile)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetHomepage)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetAbout)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetMoodText)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetRichMoodText)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetTimezone)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCallApplyCF)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCallNoAnswerTimeout)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCallForwardRules)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetCallSendToVoicemail)(
XAddin *pAddin
);
LPCWSTR (NDAPI *GetSMSValidatedNumbers)(
XAddin *pAddin
);
// Contact
LPCWSTR (NDAPI *GetSkypeID)(
XAddin *pAddin
);
VOID (NDAPI *SetSkypeID)(
XAddin *pAddin,
LPCWSTR Value
);
LPCWSTR (NDAPI *GetSkypeDisplayName)(
XAddin *pAddin
);
VOID (NDAPI *SetSkypeDisplayName)(
XAddin *pAddin,
LPCWSTR Value
);
// data members
ULONG Ref;
DWORD ThreadID;
BOOL MTAAvailable;
LPSTREAM pstmAddin;
ext_ConnectMode ConnectMode;
LONG MajorVersion;
BOOL FastShutdown;
BOOL RequireShutdownNotification;
IDispatch *Application;
IDispatch *Explorers;
IDispatch *Inspectors;
IRibbonUI *RibbonUI;
RibbonElement *RibbonElements;
// Skype runtime informations
struct SkypeInfo {
// program information
LPWSTR Path;
HICON Icon;
HICON IconSm;
// Skype running instance
SKYPE_API_STATUS ApiStatus;
LPWSTR SzApiStatus;
HWND ApiHWND;
LPWSTR Version;
LPWSTR UserStatus;
LPWSTR LoggedOnUser;
SKYPE_PRESENCE Presence;
SKYPE_CONNECTION_STATUS ConnStatus;
LPWSTR SzConnStatus;
// Properties
BOOL PCSpeaker;
BOOL Ringtone;
LPWSTR RingtoneFile;
LPWSTR Avatar;
// Profile
LPWSTR Balance;
LPWSTR Currency;
LPWSTR FullName;
LPWSTR Birthday;
LPWSTR Sex;
LPWSTR Languages;
LPWSTR Country;
LPWSTR IPCountry;
LPWSTR Province;
LPWSTR City;
LPWSTR PhoneHome;
LPWSTR PhoneOffice;
LPWSTR PhoneMobile;
LPWSTR Homepage;
LPWSTR About;
LPWSTR MoodText;
LPWSTR RichMoodText;
LPWSTR Timezone;
LPWSTR CallApplyCF;
LPWSTR CallNoAnswerTimeout;
LPWSTR CallForwardRules;
LPWSTR CallSendToVoicemail;
LPWSTR SMSValidatedNumbers;
// Assets
// Skype
HBITMAP BmpSkypeApp;
// Presence
HBITMAP BmpPresenceOnline;
HBITMAP BmpPresenceOffline;
HBITMAP BmpPresenceAway;
HBITMAP BmpPresenceDoNotDisturb;
HBITMAP BmpPresenceInvisible;
// dynamic
HBITMAP BmpAvatar;
} SkypeInfo;
// threads
Thread *SkypeWatchThread;
};
HRESULT
NDAPI
XAddin_Create(
XAddin** ppAddin
);
// macros
#define Addin_QueryInterface(This, riid, ppv) \
((((This)->lpVtbl)->QueryInterface)((This), (riid), (ppv)))
#define Addin_AddRef(This) \
((((This)->lpVtbl)->AddRef)(This))
#define Addin_Release(This) \
((((This)->lpVtbl)->Release)(This))
#define Addin_GetTypeInfoCount(This, pctinfo) \
((((This)->lpVtbl)->GetTypeInfoCount)((This), (pctinfo)))
#define Addin_GetTypeInfo(This, iTInfo, lcid, ppTInfo) \
((((This)->lpVtbl)->GetTypeInfo)((This), (iTInfo), (lcid), (pctinfo)))
#define Addin_GetIDsOfNames(This, riid, rgszNames, cNames, lcid, rgDispId) \
((((This)->lpVtbl)->GetIDsOfNames)((This), (riid), (rgszNames), (cNames), (lcid), (rgDispId)))
#define Addin_Invoke(This, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr) \
((((This)->lpVtbl)->Invoke)((This), (riid), (lcid), (wFlags), (pDispParams), (pVarResult), (pExcepInfo), (puArgErr)))
#define Addin_OnConnection(This, Application, ConnectMode, AddInInst, custom) \
((((This)->lpVtbl)->OnConnection)((This), (Application), (ConnectMode), (AddInInst), (custom)))
#define Addin_OnDisconnection(This, RemoveMode, custom) \
((((This)->lpVtbl)->OnDisconnection)((This), (RemoveMode), (custom)))
#define Addin_OnAddInsUpdate(This, custom) \
((((This)->lpVtbl)->OnAddInsUpdate)((This), (custom)))
#define Addin_OnStartupComplete(This, custom) \
((((This)->lpVtbl)->OnStartupComplete)((This), (custom)))
#define Addin_OnBeginShutdown(This, custom) \
((((This)->lpVtbl)->OnBeginShutdown)((This), (custom)))
#endif // Addin_H