From 9e46759e7968e312841f7050a42f64808b4c0d22 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Mon, 8 Dec 2014 19:32:16 +0000 Subject: Awkward's private repo sync git-svn-id: http://svn.miranda-ng.org/main/trunk@11279 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Actman30/actman.dpr | 254 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 plugins/Actman30/actman.dpr (limited to 'plugins/Actman30/actman.dpr') diff --git a/plugins/Actman30/actman.dpr b/plugins/Actman30/actman.dpr new file mode 100644 index 0000000000..d47d57c95a --- /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, + Windows, + m_api, + 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, + iac_call, + iac_ini, + iac_notes, + 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); + + 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. -- cgit v1.2.3