summaryrefslogtreecommitdiff
path: root/plugins/Actman30/actman.dpr
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Actman30/actman.dpr')
-rw-r--r--plugins/Actman30/actman.dpr254
1 files changed, 254 insertions, 0 deletions
diff --git a/plugins/Actman30/actman.dpr b/plugins/Actman30/actman.dpr
new file mode 100644
index 0000000000..2f22cda9e2
--- /dev/null
+++ b/plugins/Actman30/actman.dpr
@@ -0,0 +1,254 @@
+{$include compilers.inc}
+{$IFDEF COMPILER_16_UP}
+ {$WEAKLINKRTTI ON}
+ {.$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
+{$ENDIF}
+{$IMAGEBASE $13200000}
+library actman;
+{%File 'm_actman.inc'}
+{%File 'i_const.inc'}
+{%File 'i_opt_dlg2.inc'}
+{%File 'i_opt_dlg.inc'}
+{%File 'i_options.inc'}
+{%File 'i_services.inc'}
+{%File 'i_vars.inc'}
+{%File 'i_inoutxm.inc'}
+{%File 'tasks\i_opt_dlg.inc'}
+{%File 'tasks\i_options.inc'}
+{%File 'tasks\i_task.inc'}
+{%File 'hooks\i_options.inc'}
+{%File 'hooks\i_hook.inc'}
+{%File 'hooks\i_opt_dlg.inc'}
+{%File 'ua\i_opt_dlg.inc'}
+{%File 'ua\i_inoutxm.inc'}
+{%File 'ua\i_options.inc'}
+{%File 'ua\i_ua.inc'}
+{%File 'ua\i_uaplaces.inc'}
+{%File 'ua\i_uconst.inc'}
+
+uses
+// fastmm4,
+ m_api,
+ Windows,
+ messages,
+ commctrl,
+ common,
+ wrapper,
+ io,
+ dbsettings,
+ mirutils,
+ syswin,
+ base64,
+ question,
+ mApiCardM,
+ global,
+ lowlevelc,
+ dlgshare,
+ iac_global,
+ iac_settings,
+ iac_storage,
+ iac_dbrw,
+ iac_messagebox,
+ iac_text,
+ iac_jump,
+ iac_inout,
+ iac_service,
+ iac_program,
+ iac_chain,
+ iac_contact,
+ inoutxml,
+ sedit,
+ strans,
+ ua in 'ua\ua.pas',
+ hooks in 'hooks\hooks.pas',
+ scheduler in 'tasks\scheduler.pas';
+
+{$r options.res}
+
+const
+ PluginName = 'Action Manager';
+var
+ hevaction,hHookChanged,hevinout:THANDLE;
+
+{$include m_actman.inc}
+
+
+function MirandaPluginInfoEx(mirandaVersion:DWORD):PPLUGININFOEX; cdecl;
+begin
+ result:=@PluginInfo;
+ PluginInfo.cbSize :=SizeOf(TPLUGININFOEX);
+ PluginInfo.shortName :='Action manager';
+ PluginInfo.version :=$00030001;
+ PluginInfo.description:='Plugin for manage hotkeys to open contact window, insert text, '+
+ 'run program and call services';
+ PluginInfo.author :='Awkward';
+ PluginInfo.authorEmail:='panda75@bk.ru; awk1975@ya.ru';
+ PluginInfo.copyright :='(c) 2007-2013 Awkward';
+ PluginInfo.homepage :='http://code.google.com/p/delphi-miranda-plugins/';
+ PluginInfo.flags :=UNICODE_AWARE;
+ PluginInfo.uuid :=MIID_ACTMAN;
+end;
+
+{$include i_const.inc}
+
+{$include i_options.inc}
+{$include i_services.inc}
+{$include i_opt_dlg.inc}
+{.$include i_inoutxm.inc}
+
+function PreShutdown(wParam:WPARAM;lParam:LPARAM):int;cdecl;
+var
+ ptr:pActionLink;
+begin
+ result:=0;
+
+ ptr:=ActionLink;
+ while ptr<>nil do
+ begin
+ if @ptr^.DeInit<>nil then
+ ptr^.DeInit;
+ ptr:=ptr^.Next;
+ end;
+
+ MacroList.Clear;
+ MacroList.Free;
+
+ DestroyHookableEvent(hHookChanged);
+ DestroyHookableEvent(hevinout);
+ DestroyHookableEvent(hevaction);
+
+end;
+
+procedure RegisterActTypes;
+var
+ p:pActModule;
+ sid:TSKINICONDESC;
+ buf:array [0..63] of AnsiChar;
+ pc:pAnsiChar;
+// ii:tIconItem;
+begin
+ FillChar(sid,SizeOf(sid),0);
+ sid.cbSize:=SizeOf(sid);
+ sid.cx:=16;
+ sid.cy:=16;
+ sid.szSection.a:='Actions';
+ sid.pszName :=@buf;
+ pc:=StrCopyE(buf,IcoLibPrefix);
+ p:=ModuleLink;
+{
+ ii.size :=0;
+ ii.hIcolib:=0;
+ ii.szName :=@buf;
+}
+ while p<>nil do
+ begin
+ if p^.Hash=0 then
+ p^.Hash:=Hash(p^.Name,StrLen(p^.Name));
+ //!! must add icon registration in icolib
+{
+ StrCopy(pc,p^.Name);
+ ii.szDescr :=p^.Name;
+ ii.DefIconID:=;
+ Icon_Register(hInstance,'Actions',@ii,1);
+}
+ sid.hDefaultIcon :=LoadImageA(hInstance,p^.Icon,IMAGE_ICON,16,16,0);
+ sid.szDescription.a:=p^.Name;
+ StrCopy(pc,p^.Name);
+ Skin_AddIcon(@sid);
+ DestroyIcon(sid.hDefaultIcon);
+
+ p:=p^.Next;
+ end;
+end;
+
+// This function implements autostart action execution after all others plugins loading
+function DoAutostart(wParam:WPARAM;lParam:LPARAM):int;cdecl;
+var
+ i:integer;
+ Macro:pMacroRecord;
+ section:array [0..127] of AnsiChar;
+ p,p1:pAnsiChar;
+begin
+ Result:=0;
+ CallService(MS_ACT_RUNBYNAME,TWPARAM(AutoStartName),0);
+
+ p1:=StrCopyE(section,opt_group);
+ for i:=0 to MacroList.Count-1 do
+ begin
+ Macro:=MacroList[i];
+ if (Macro^.flags and ACF_FIRSTRUN)<>0 then
+ begin
+ CallService(MS_ACT_RUNBYID,TWPARAM(Macro^.id),0);
+ Macro^.flags:=Macro^.flags and not ACF_FIRSTRUN;
+ p:=StrEnd(IntToStr(p1,i));
+ p^:='/'; inc(p);
+ StrCopy(p,opt_flags); DBWriteDWord(0,DBBranch,section,Macro^.flags);
+ end;
+ end;
+end;
+
+function OnModulesLoaded(wParam:WPARAM;lParam:LPARAM):int;cdecl;
+var
+ ptr:pActionLink;
+begin
+ Result:=0;
+
+ RegisterActTypes;
+
+ LoadMacros;
+ RegisterIcons;
+
+ HookEvent(ME_OPT_INITIALISE ,@OnOptInitialise);
+ HookEvent(ME_SYSTEM_SHUTDOWN{ME_SYSTEM_OKTOEXIT},@PreShutdown);
+ NotifyEventHooks(hHookChanged,twparam(ACTM_LOADED),0);
+
+ //----- DBEDITOR support -----
+// CallService(MS_DBEDIT_REGISTERSINGLEMODULE,twparam(PluginShort),0);
+
+ IsMultiThread:=true;
+ // Load additional modules
+ ptr:=ActionLink;
+ while ptr<>nil do
+ begin
+ if @ptr^.Init<>nil then
+ ptr^.Init;
+ ptr:=ptr^.Next;
+ end;
+
+ // cheat
+ HookEvent(ME_SYSTEM_MODULESLOADED,@DoAutostart);
+// DoAutostart(0,0);
+end;
+
+function Load:int; cdecl;
+begin
+ Result:=0;
+ Langpack_Register;
+
+ hHookChanged:=CreateHookableEvent(ME_ACT_CHANGED);
+ hevinout :=CreateHookableEvent(ME_ACT_INOUT);
+ hevaction :=CreateHookableEvent(ME_ACT_ACTION);
+
+ CreateServiceFunction(MS_ACT_FREELIST ,@ActFreeList);
+ CreateServiceFunction(MS_ACT_GETLIST ,@ActGetList);
+ CreateServiceFunction(MS_ACT_RUNBYID ,@ActRun);
+ CreateServiceFunction(MS_ACT_RUNBYNAME,@ActRunGroup);
+ CreateServiceFunction(MS_ACT_RUNPARAMS,@ActRunParam);
+//!! CreateServiceFunction(MS_ACT_INOUT ,@ActInOut);
+ CreateServiceFunction(MS_ACT_SELECT ,@ActSelect);
+
+ HookEvent(ME_SYSTEM_MODULESLOADED,@OnModulesLoaded);
+end;
+
+function Unload: int; cdecl;
+begin
+ Result:=0;
+end;
+
+exports
+ Load, Unload,
+ MirandaPluginInfoEx;
+
+begin
+ DisableThreadLibraryCalls(hInstance);
+end.