-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathAimpMenu.h
57 lines (42 loc) · 1.59 KB
/
AimpMenu.h
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
#pragma once
#include "SDK/apiCore.h"
#include "SDK/apiMenu.h"
#include "IUnknownInterfaceImpl.h"
#include <functional>
#include <string>
class AimpMenu {
typedef std::function<void(IAIMPMenuItem *)> CallbackFunc;
class ClickHandler : public IUnknownInterfaceImpl<IAIMPActionEvent> {
public:
ClickHandler(CallbackFunc callback, IAIMPMenuItem *item) : m_menuItem(item), m_callback(callback) {}
virtual HRESULT WINAPI QueryInterface(REFIID riid, LPVOID* ppvObj) {
if (!ppvObj) return E_POINTER;
if (riid == IID_IAIMPActionEvent) {
*ppvObj = this;
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
virtual void WINAPI OnExecute(IUnknown *Data) { if (m_callback) m_callback(m_menuItem); }
private:
IAIMPMenuItem *m_menuItem;
CallbackFunc m_callback;
};
public:
AimpMenu(IAIMPMenuItem *item);
~AimpMenu();
static bool Init(IAIMPCore *Core);
static void Deinit();
IAIMPMenuItem *Add(const std::wstring &name, CallbackFunc action, UINT icon = 0, CallbackFunc showAction = nullptr, const std::wstring &id = std::wstring());
void Clear();
static AimpMenu *Get(int id);
static AimpMenu *Get(const std::wstring &id);
static bool SetIcon(IAIMPMenuItem *item, UINT icon);
private:
AimpMenu(const AimpMenu &);
AimpMenu &operator=(const AimpMenu &);
IAIMPMenuItem *m_menuItem;
static IAIMPCore *m_core;
static IAIMPServiceMenuManager *m_menuManager;
};