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
|
unit ua;
interface
procedure Init;
procedure DeInit;
function AddOptionPage(var tmpl:pAnsiChar;var proc:pointer;var name:PAnsiChar):integer;
implementation
uses
windows, commctrl, messages,
mirutils, common, dbsettings, io, m_api, wrapper,
global;
{$R ua.res}
{$include m_actman.inc}
{$include i_uconst.inc}
{$include i_uavars.inc}
// in - Action ID, out - action (group) number
function GetUABranch(setting:pAnsiChar;id:cardinal):pAnsiChar;
var
i:integer;
p,p1:pAnsiChar;
begin
result:=nil;
p1:=StrCopyE(setting,opt_groups);
for i:=0 to CallService(MS_ACT_GETLIST,0,0)-1 do
begin
p:=StrEnd(IntToStr(p1,i));
p^:='/'; inc(p);
StrCopy(p,opt_id);
if DBReadDWord(0,DBBranch,setting)=id then
begin
p^:=#0;
result:=p;
break;
end;
end;
end;
var
amLink:tActionLink;
{$include i_uaplaces.inc}
{$include i_options.inc}
{$include i_opt_dlg.inc}
{$include i_ua.inc}
{$include i_inoutxm.inc}
// ------------ base interface functions -------------
var
iohook:THANDLE;
hontabloaded,
honttbloaded,
ontabbtnpressed,
onactchanged:THANDLE;
hPreBuildMMenu,
hPreBuildCMenu,
hPreBuildTMenu:THANDLE;
procedure Init;
begin
GetModuleFileNameW(hInstance,szMyPath,MAX_PATH);
hServiceWithLParam:=CreateServiceFunction(SERVICE_WITH_LPARAM_NAME,@ServiceCallWithLParam);
hTTBService :=CreateServiceFunction(TTB_SERVICE_NAME ,@TTBServiceCall);
CheckPlacesAbility;
CreateUActionList;
honttbloaded :=HookEvent(ME_TTB_MODULELOADED ,@OnTTBLoaded);
hontabloaded :=HookEvent(ME_MSG_TOOLBARLOADED,@OnTabBBLoaded);
ontabbtnpressed:=HookEvent(ME_MSG_BUTTONPRESSED,@OnTabButtonPressed);
onactchanged :=HookEvent(ME_ACT_CHANGED ,@ActListChange);
hPreBuildMMenu:=HookEvent(ME_CLIST_PREBUILDMAINMENU , PreBuildMainMenu);
hPreBuildCMenu:=HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PreBuildContactMenu);
hPreBuildTMenu:=HookEvent(ME_CLIST_PREBUILDTRAYMENU , PreBuildTrayMenu);
iohook:=HookEvent(ME_ACT_INOUT,@ActInOut);
end;
procedure DeInit;
begin
SetLength(arMenuRec,0);
UnhookEvent(hPreBuildMMenu);
UnhookEvent(hPreBuildCMenu);
UnhookEvent(hPreBuildTMenu);
UnhookEvent(honttbloaded);
UnhookEvent(hontabloaded);
UnhookEvent(ontabbtnpressed);
UnhookEvent(onactchanged);
UnhookEvent(iohook);
DestroyServiceFunction(hServiceWithLParam);
DestroyServiceFunction(hTTBService);
end;
function AddOptionPage(var tmpl:pAnsiChar;var proc:pointer;var name:PAnsiChar):integer;
begin
result:=0;
tmpl:=PAnsiChar(IDD_UA);
proc:=@DlgProcOpt;
name:='Use Actions';
end;
procedure InitLink;
begin
amLink.Next :=ActionLink;
amLink.Init :=@Init;
amLink.DeInit :=@DeInit;
amLink.AddOption:=@AddOptionPage;
ActionLink :=@amLink;
end;
initialization
InitLink;
end.
|