2005-08-26 22:29:39 +04:00
unit UnitPlugins;
interface
uses SysUtils, Classes, Windows, Messages, Forms, ComCtrls;
type TCodeSnippetClick = function ( pTitle, pCategory: PChar ; pCode: PChar ) : Integer ; cdecl ;
TFileAction = function ( pFilename: PChar ) : Integer ; cdecl ;
2005-09-04 17:03:34 +04:00
TDocChange = function ( pIndex: Integer ; pFilename: PChar ; pHighlighter: PChar ; pRestoreCaret: Boolean ) : Integer ; cdecl ;
TProjectsChange = function ( pOldIndex, pNewIndex: Integer ) : Integer ; cdecl ;
TCreateNewFile = function ( Item: Byte ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TDisplaySearch = function ( pSearchList: PChar ; pSelected: PChar ) : Integer ; cdecl ;
2005-09-04 00:00:46 +04:00
TSearch = function ( pExpression, pSearchList: PChar ; pCaseSensivity, pWholeWords, pSearchFromCaret, pSelectedOnly, pRegEx, pForward: Boolean ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TSearchReplace = function ( pExpression, pReplace, pExpList, pRepList: PChar ; pCaseSensivity, pWholeWords, pSearchFromCaret, pSelectedOnly, pRegEx, pForward: Boolean ) : Integer ; cdecl ;
2005-09-04 17:03:34 +04:00
TVisibleControlChange = function ( pControl: Integer ; pShow: Boolean ) : Integer ; cdecl ;
TCompile = function ( pCompileType: Integer ; Lang, Filename: PChar ) : Integer ; cdecl ;
TShowHelp = function ( pHelpType: Integer ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TCustomItemClick = function ( pCaption: PChar ) : Integer ; cdecl ;
TThemeChanged = function ( pTheme: PChar ) : Integer ; cdecl ;
2005-09-08 02:20:28 +04:00
TModified = function ( pModifiedText: PChar ) : Integer ; cdecl ;
2005-09-04 00:00:46 +04:00
TKeyPress = function ( pKey: PChar ) : Integer ; cdecl ;
2005-09-04 17:03:34 +04:00
TEditorClick = function : Integer ; cdecl ;
TUpdateSel = function ( pSelStart, pSelLength, pFirstVisibleLine: Integer ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TCallTipShow = function ( pList: PChar ) : Integer ; cdecl ;
2005-09-04 17:03:34 +04:00
TCallTipClick = function ( pPosition: Integer ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TAutoCompleteShow = function ( pList: PChar ) : Integer ; cdecl ;
TAutoCompleteSelect = function ( pText: PChar ) : Integer ; cdecl ;
2005-09-04 17:03:34 +04:00
TAppMsg = function ( pHwnd: HWND; pMessage: Integer ; pWParam, pLParam: Integer ; pTime: Integer ; pPt: TPoint) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
TUpdateCodeTools = function ( pLang, pFilename, pCurrProjects: PChar ) : Integer ; cdecl ;
TOutputEvent = function ( pItemIndex: Integer ) : Integer ; cdecl ;
2005-09-11 01:55:22 +04:00
TShortcutEvent = function ( pCharCode, pKeyData: Integer ) : Integer ; cdecl ;
2005-08-26 22:29:39 +04:00
type TIntegerArray = array of Integer ;
type TLoadInfo = record
2005-08-27 05:47:15 +04:00
{ Plugin values }
2005-08-26 22:29:39 +04:00
sPluginName: PChar ;
sPluginDescription: PChar ;
{ Form Handles }
hAllFilesForm: HWND;
hAutoIndent: HWND;
hClose: HWND;
hConnGen: HWND;
hGoToLine: HWND;
hHTMLPreview: HWND;
hHudMsgGenerator: HWND;
hInfo: HWND;
2005-09-04 00:00:46 +04:00
hIRCPaster: HWND;
2005-08-26 22:29:39 +04:00
hMainForm: HWND;
hMenuGenerator: HWND;
hMOTDGen: HWND;
hPluginsIniEditor: HWND;
hReplace: HWND;
hSearch: HWND;
hSelectColor: HWND;
hSettings: HWND;
hSocketsTerminal: HWND;
{ Important Control Handles }
hOutput: HWND;
hCodeExplorer: HWND;
hCodeInspector: HWND; // even if it won't be useful
hNotes: HWND;
{ Other }
pApplication: Pointer ; // this is only useful for Delphi developers
end ;
type PLoadInfo = ^ TLoadInfo;
2005-08-27 05:47:15 +04:00
TLoadPlugin = procedure ( LoadInfo: PLoadInfo) ; cdecl ;
2005-08-26 22:29:39 +04:00
TUnloadPlugin = procedure ; cdecl ;
2005-09-04 00:00:46 +04:00
function SendStudioMsg( eMessage: Integer ; eData: String ; eIntData: Integer ) : Integer ;
2005-08-26 22:29:39 +04:00
function LoadPlugin( ListItem: TListItem) : Boolean ;
procedure UnloadPlugin( ListItem: TListItem) ;
function Plugin_CodeSnippetClick( Title, Category: String ; Code: String ) : Boolean ;
function Plugin_FileLoad( Filename: String ; Loading: Boolean ) : Boolean ;
function Plugin_FileSave( Filename: String ; Saving: Boolean ) : Boolean ;
function Plugin_DocChange( Index : Integer ; Filename, Highlighter: String ; RestoreCaret, Changing: Boolean ) : Boolean ;
function Plugin_ProjectsChange( OldIndex, NewIndex: Integer ; Changing: Boolean ) : Boolean ;
function Plugin_CreateNewFile( Item: Byte ; Creating: Boolean ) : Boolean ;
2005-09-04 00:00:46 +04:00
function Plugin_Search( SearchList, Selected: String ; Displaying, SearchAgain: Boolean ; CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward : Boolean ) : Boolean ;
2005-08-26 22:29:39 +04:00
function Plugin_SearchReplace( Expression, Replace, ExpList, RepList: String ; CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward : Boolean ) : Boolean ;
function Plugin_VisibleControlChange( Control: Integer ; Show: Boolean ) : Boolean ;
function Plugin_Compile( CompileType: Integer ; Lang, Filename: String ; Compiling: Boolean ) : Boolean ;
function Plugin_ShowHelp( HelpType: Integer ) : Boolean ;
function Plugin_CustomItemClick( Caption: String ) : Boolean ;
function Plugin_ThemeChange( Theme: String ) : Boolean ;
2005-09-08 02:20:28 +04:00
function Plugin_Modified( ModifiedStr: PAnsiChar ) : Boolean ;
2005-09-04 00:00:46 +04:00
function Plugin_KeyPress( Key: Char ) : Boolean ;
2005-08-26 22:29:39 +04:00
function Plugin_EditorClick( DoubleClick: Boolean ) : Boolean ;
function Plugin_UpdateSel( SelStart, SelLength, FirstVisibleLine: Integer ) : Boolean ;
function Plugin_CallTipShow( List: PChar ) : Boolean ;
function Plugin_CallTipClick( Position: Integer ) : Boolean ;
function Plugin_AutoCompleteShow( List: PChar ) : Boolean ;
function Plugin_AutoCompleteSelect( Text : PChar ) : Boolean ;
2005-09-04 17:03:34 +04:00
function Plugin_AppMsg( hwnd: HWND; Message : Integer ; wParam, lParam: Integer ; time: Integer ; pt: TPoint) : Boolean ;
2005-08-26 22:29:39 +04:00
function Plugin_UpdateCodeExplorer( Lang, Filename, CurrProjects: String ; Updating: Boolean ) : Boolean ;
function Plugin_UpdateCodeInspector( Lang, Filename, CurrProjects: String ; Updating: Boolean ) : Boolean ;
function Plugin_OutputDblClick( ItemIndex: Integer ) : Boolean ;
function Plugin_OutputPopup( ItemIndex: Integer ) : Boolean ;
2005-09-11 01:55:22 +04:00
function Plugin_Shortcut( CharCode, KeyData: Integer ) : Boolean ;
2005-08-26 22:29:39 +04:00
const { Return values for dlls }
PLUGIN_CONTINUE = 0 ; // continue...
PLUGIN_STOP = 1 ; // stop calling funcs and don't handle the command
PLUGIN_HANDLED = 2 ; // don't handle the command
{ Compile values }
COMP_DEFAULT = 0 ;
COMP_STARTHL = 1 ;
COMP_UPLOAD = 2 ;
{ Help values }
HELP_DEFAULT = 0 ;
HELP_SEARCH = 1 ;
HELP_FORUMS = 2 ;
HELP_ABOUT = 3 ;
{ Controls for visible state }
CTRL_OUTPUT = 0 ; // Output list
CTRL_CODETOOLS_MAIN = 1 ; // Code-Tools window
CTRL_CODETOOLS_ITEM = 2 ; // Code-Tools tab
CTRL_NOTES = 3 ; // Notes tab
{ Languages }
NEW_PAWN_PLUGIN = 0 ;
NEW_PAWN_EMPTYPLUGIN = 1 ;
NEW_PAWN_HEADER = 2 ;
NEW_CPP_MODULE = 3 ;
NEW_CPP_UNIT = 4 ;
NEW_CPP_HEADER = 5 ;
NEW_OTHER_TEXTFILE = 6 ;
NEW_OTHER_HTML = 7 ;
NEW_OTHER_SQL = 8 ;
NEW_OTHER_XML = 9 ;
2005-09-04 00:00:46 +04:00
const SCM_SHOWPROGRESS = WM_USER + $100 ;
SCM_HIDEPROGRESS = WM_USER + $101 ;
SCM_UPDATEPROGRESS = WM_USER + $102 ;
SCM_LOADCODESNIPPETS = WM_USER + $103 ;
SCM_CODESNIPPETCLICK = WM_USER + $104 ;
SCM_MIRC_CMD = WM_USER + $105 ;
SCM_RELOADINI = WM_USER + $106 ;
SCM_SELECTLANGUAGE = WM_USER + $107 ;
SCM_LOADFILE = WM_USER + $108 ;
SCM_CURRPROJECTS = WM_USER + $109 ;
SCM_COMPILE = WM_USER + $110 ;
SCM_COMPILE_UPLOAD = WM_USER + $111 ;
SCM_COMPILE_STARTHL = WM_USER + $112 ;
SCM_MENU_LOADIMAGE = WM_USER + $113 ;
SCM_MENU_ADDITEM = WM_USER + $114 ;
SCM_MENU_ADDSUBITEM = WM_USER + $115 ;
SCM_MENU_FAKECLICK = WM_USER + $116 ;
SCM_MENU_SHOWITEM = WM_USER + $117 ;
SCM_MENU_HIDEITEM = WM_USER + $118 ;
SCM_PLUGIN_LOAD = WM_USER + $119 ;
SCM_PLUGIN_UNLOAD = WM_USER + $120 ;
SCM_SETTINGS_CREATEPAGE = WM_USER + $121 ;
SCM_CODEINSPECTOR_CLEAR = WM_USER + $122 ;
SCM_CODEINSPECTOR_ADD = WM_USER + $123 ;
SCM_CODEINSPECTOR_ADDCOMBO = WM_USER + $124 ;
SCM_CODEINSPECTOR_SETVALUE = WM_USER + $125 ;
SCM_CODEINSPECTOR_SETNAME = WM_USER + $126 ;
SCM_CODEINSPECTOR_GETVALUE = WM_USER + $127 ;
SCM_CODEINSPECTOR_GETNAME = WM_USER + $128 ;
SCM_CODEINSPECTOR_COUNT = WM_USER + $129 ;
SCM_CODEINSPECTOR_BEGINUPDATE = WM_USER + $130 ;
SCM_CODEINSPECTOR_ENDUPDATE = WM_USER + $131 ;
SCM_CODEINSPECTOR_DELETE = WM_USER + $132 ;
SCM_PAWN_NEWFILE = WM_USER + $133 ;
SCM_PAWN_SAVEFILE = WM_USER + $134 ;
SCM_PAWN_CLOSEFILE = WM_USER + $135 ;
SCM_PAWN_ISUNTITLED = WM_USER + $136 ;
SCM_PAWN_ACTIVATE = WM_USER + $137 ;
SCM_PAWN_ACTIVATEDOC = WM_USER + $138 ;
SCM_PAWN_GETNOTES = WM_USER + $139 ;
SCM_PAWN_SETNOTES = WM_USER + $140 ;
SCM_PAWN_GETFILENAME = WM_USER + $141 ;
SCM_PAWN_SETFILENAME = WM_USER + $142 ;
SCM_PAWN_GETTEXT = WM_USER + $143 ;
SCM_PAWN_SETTEXT = WM_USER + $144 ;
SCM_CPP_NEWFILE = WM_USER + $145 ;
SCM_CPP_SAVEFILE = WM_USER + $146 ;
SCM_CPP_CLOSEFILE = WM_USER + $147 ;
SCM_CPP_ISUNTITLED = WM_USER + $148 ;
SCM_CPP_ACTIVATE = WM_USER + $149 ;
SCM_CPP_ACTIVATEDOC = WM_USER + $150 ;
SCM_CPP_ACTIVATEIDE = WM_USER + $151 ;
SCM_CPP_GETNOTES = WM_USER + $152 ;
SCM_CPP_SETNOTES = WM_USER + $153 ;
SCM_CPP_GETFILENAME = WM_USER + $154 ;
SCM_CPP_SETFILENAME = WM_USER + $155 ;
SCM_CPP_GETTEXT = WM_USER + $156 ;
SCM_CPP_SETTEXT = WM_USER + $157 ;
SCM_OTHER_NEWFILE = WM_USER + $158 ;
SCM_OTHER_SAVEFILE = WM_USER + $159 ;
SCM_OTHER_CLOSEFILE = WM_USER + $160 ;
SCM_OTHER_ISUNTITLED = WM_USER + $161 ;
SCM_OTHER_ACTIVATE = WM_USER + $162 ;
SCM_OTHER_ACTIVATEDOC = WM_USER + $163 ;
SCM_OTHER_GETNOTES = WM_USER + $164 ;
SCM_OTHER_SETNOTES = WM_USER + $165 ;
SCM_OTHER_GETFILENAME = WM_USER + $166 ;
SCM_OTHER_SETFILENAME = WM_USER + $167 ;
SCM_OTHER_GETTEXT = WM_USER + $168 ;
SCM_OTHER_SETTEXT = WM_USER + $169 ;
SCM_OUTPUT_SHOW = WM_USER + $170 ;
SCM_OUTPUT_HIDE = WM_USER + $171 ;
SCM_OUTPUT_ADD = WM_USER + $172 ;
SCM_OUTPUT_CLEAR = WM_USER + $173 ;
SCM_OUTPUT_DELETE = WM_USER + $174 ;
SCM_OUTPUT_GETTEXT = WM_USER + $175 ;
SCM_OUTPUT_GETITEM = WM_USER + $176 ;
SCM_OUTPUT_INDEXOF = WM_USER + $177 ;
SCM_ACTIVE_DOCUMENT = WM_USER + $178 ;
SCM_ACTIVE_PROJECTS = WM_USER + $179 ;
SCM_EDITOR_SETTEXT = WM_USER + $180 ;
SCM_EDITOR_GETTEXT = WM_USER + $181 ;
SCM_EDTIOR_SETCALLTIPS = WM_USER + $182 ;
SCM_EDITOR_SHOWCALLTIP = WM_USER + $183 ;
SCM_EDITOR_SETAUTOCOMPLETE = WM_USER + $184 ;
SCM_EDITOR_SHOWAUTOCOMPLETE = WM_USER + $185 ;
SCM_EDITOR_GETSELSTART = WM_USER + $186 ;
SCM_EDTIOR_GETSELLENGTH = WM_USER + $187 ;
SCM_EDITOR_SETSELSTART = WM_USER + $188 ;
SCM_EDITOR_SETSELLENGH = WM_USER + $189 ;
SCM_REMOVE_MENUITEM = WM_USER + $190 ;
SCM_REMOVE_IMAGE = WM_USER + $191 ;
SCM_SETTHEME = WM_USER + $192 ;
SCM_GETTHEME = WM_USER + $193 ;
2005-08-26 22:29:39 +04:00
implementation
uses UnitfrmSettings, UnitMainTools, UnitfrmAllFilesForm,
UnitfrmAutoIndent, UnitfrmClose, UnitfrmConnGen, UnitfrmGoToLine,
UnitfrmHTMLPreview, UnitfrmHudMsgGenerator, UnitfrmInfo, UnitfrmMain,
UnitfrmMenuGenerator, UnitfrmMOTDGen, UnitfrmPluginsIniEditor,
UnitfrmReplace, UnitfrmSearch, UnitfrmSelectColor,
2005-09-11 01:55:22 +04:00
UnitfrmSocketsTerminal, UnitLanguages, UnitCodeExplorerUpdater,
UnitCodeInspector, UnitCodeSnippets, UnitCodeUtils, UnitCompile,
UnitfrmIRCPaster, UnitMenuGenerators, UnitReadThread, UnitTextAnalyze;
2005-08-26 22:29:39 +04:00
function LoadPlugin( ListItem: TListItem) : Boolean ;
var eLoadInfo: TLoadInfo;
LoadInfo: PLoadInfo;
eHandle: Cardinal ;
eFunc, eFunc2: TLoadPlugin;
begin
Result : = False ;
with eLoadInfo do begin
sPluginName : = 'Untitled' ;
sPluginDescription : = 'No description' ;
{ Handles }
hAllFilesForm : = frmAllFilesForm. Handle;
hAutoIndent : = frmAutoIndent. Handle;
hClose : = frmClose. Handle;
hConnGen : = frmConnGen. Handle;
hGoToLine : = frmGoToLine. Handle;
hHTMLPreview : = frmHTMLPreview. Handle;
hHudMsgGenerator : = frmHudMsgGenerator. Handle;
hInfo : = frmInfo. Handle;
2005-09-04 00:00:46 +04:00
hIRCPaster : = frmIRCPaster. Handle;
2005-08-26 22:29:39 +04:00
hMainForm : = frmMain. Handle;
hMenuGenerator : = frmMenuGenerator. Handle;
hMOTDGen : = frmMOTDGen. Handle;
hPluginsIniEditor : = frmPluginsIniEditor. Handle;
hReplace : = frmReplace. Handle;
hSearch : = frmSearch. Handle;
hSelectColor : = frmSelectColor. Handle;
hSettings : = frmSettings. Handle;
hSocketsTerminal : = frmSocketsTerminal. Handle;
{ Important Control Handles }
hOutput : = frmMain. lstOutput. Handle;
hCodeExplorer : = frmMain. trvExplorer. Handle;
hCodeInspector : = frmMain. jviCode. Handle; // even if it won't be useful
hNotes : = frmMain. rtfNotes. Handle;
{ Other }
pApplication : = @ Application; // this is only useful for Delphi developers
end ;
eHandle : = LoadLibrary( PChar( ExtractFilePath( ParamStr( 0 ) ) + 'plugins\' + ListItem. SubItems[ 0 ] ) ) ;
if eHandle = 0 then exit;
2005-09-04 00:00:46 +04:00
@ eFunc : = GetProcAddress( eHandle, 'PluginLoad' ) ;
@ eFunc2 : = GetProcAddress( eHandle, 'PluginUnload' ) ;
2005-08-26 22:29:39 +04:00
if @ eFunc2 < > nil then begin
if @ eFunc < > nil then begin
2005-08-27 05:47:15 +04:00
try
LoadInfo : = @ eLoadInfo;
eFunc( LoadInfo) ;
ListItem. Data : = Pointer( eHandle) ;
ListItem. Caption : = eLoadInfo. sPluginName;
ListItem. SubItems[ 1 ] : = eLoadInfo. sPluginDescription;
ListItem. SubItems[ 2 ] : = 'Loaded' ;
except
on E: Exception do
Application. MessageBox( PChar( E. Message ) , PChar( Application. Title) , MB_ICONERROR) ;
end ;
2005-08-26 22:29:39 +04:00
end
else
2005-09-04 00:00:46 +04:00
MessageBox( Application. Handle, PChar( 'Error loading plugin:' + #13 + 'PluginLoad function not found.' ) , PChar( ExtractFileName( ExtractFilePath( ParamStr( 0 ) ) + 'plugins\' + ListItem. SubItems[ 0 ] ) ) , MB_ICONERROR) ;
2005-08-26 22:29:39 +04:00
end
else
2005-09-04 00:00:46 +04:00
MessageBox( Application. Handle, PChar( 'Error loading plugin:' + #13 + 'PluginUnload function not found.' ) , PChar( ExtractFileName( ExtractFilePath( ParamStr( 0 ) ) + 'plugins\' + ListItem. SubItems[ 0 ] ) ) , MB_ICONERROR) ;
2005-08-26 22:29:39 +04:00
end ;
procedure UnloadPlugin( ListItem: TListItem) ;
var eFunc: TUnloadPlugin;
begin
2005-09-04 00:00:46 +04:00
@ eFunc : = GetProcAddress( Cardinal( ListItem. Data) , 'PluginUnload' ) ;
2005-08-26 22:29:39 +04:00
if @ eFunc < > nil then
eFunc;
FreeLibrary( Cardinal( ListItem. Data) ) ;
ListItem. Data : = nil ;
ListItem. Caption : = '-' ;
ListItem. SubItems[ 1 ] : = '-' ;
ListItem. SubItems[ 2 ] : = 'Unloaded' ;
end ;
2005-09-04 00:00:46 +04:00
function SendStudioMsg( eMessage: Integer ; eData: String ; eIntData: Integer ) : Integer ;
var eStudioHandle: HWND;
eCopyDataStruct: TCopyDataStruct;
2005-08-26 22:29:39 +04:00
begin
2005-09-04 00:00:46 +04:00
with eCopyDataStruct do begin
dwData : = eIntData;
2005-08-26 22:29:39 +04:00
cbData : = Length( eData) + 1 ;
lpData : = PChar( eData) ;
end ;
2005-09-04 00:00:46 +04:00
eStudioHandle : = FindWindow( 'TfrmMain' , 'AMXX-Studio' ) ;
if eStudioHandle < > 0 then
Result : = SendMessage( eStudioHandle, WM_COPYDATA, eMessage, LongInt( @ eCopyDataStruct) )
else
Result : = 0 ;
2005-08-26 22:29:39 +04:00
end ;
function GetDLLHandles: TIntegerArray;
var i, eCount: integer ;
begin
SetLength( Result , 0 ) ;
eCount : = 0 ;
if not Started then exit;
for i : = 0 to frmSettings. lvPlugins. Items. Count - 1 do begin
if frmSettings. lvPlugins. Items[ i] . Data < > nil then begin
SetLength( Result , eCount + 1 ) ;
Result [ eCount] : = Cardinal( frmSettings. lvPlugins. Items[ i] . Data) ;
Inc( eCount, 1 ) ;
end ;
end ;
end ;
function Plugin_CodeSnippetClick( Title, Category: String ; Code: String ) : Boolean ;
var Func: TCodeSnippetClick;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CodeSnippetClick' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Title) , PChar( Category) , PChar( Code) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_FileLoad( Filename: String ; Loading: Boolean ) : Boolean ;
var Func: TFileAction;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Loading then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Loading' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Loaded' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Filename) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_FileSave( Filename: String ; Saving: Boolean ) : Boolean ;
var Func: TFileAction;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Saving then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Saving' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Saved' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Filename) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_DocChange( Index : Integer ; Filename, Highlighter: String ; RestoreCaret, Changing: Boolean ) : Boolean ;
var Func: TDocChange;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Changing then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'DocChanging' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'DocChanged' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( Index , PChar( Filename) , PChar( Highlighter) , RestoreCaret) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_ProjectsChange( OldIndex, NewIndex: Integer ; Changing: Boolean ) : Boolean ;
var Func: TProjectsChange;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Changing then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'ProjectsChanging' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'ProjectsChanged' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( OldIndex, NewIndex) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_CreateNewFile( Item: Byte ; Creating: Boolean ) : Boolean ;
var Func: TCreateNewFile;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Creating then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CreatingNewFile' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CreatedNewFile' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
2005-09-04 17:03:34 +04:00
case Func( Item) of
2005-08-26 22:29:39 +04:00
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
2005-09-04 00:00:46 +04:00
function Plugin_Search( SearchList, Selected: String ; Displaying, SearchAgain: Boolean ; CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward : Boolean ) : Boolean ;
var Func: TSearch;
2005-08-26 22:29:39 +04:00
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Displaying then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'DisplayingSearch' )
2005-08-26 22:29:39 +04:00
else if SearchAgain then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'SearchAgain' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Search' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
2005-09-04 00:00:46 +04:00
case Func( PChar( Selected) , PChar( SearchList) , CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward ) of
2005-08-26 22:29:39 +04:00
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_SearchReplace( Expression, Replace, ExpList, RepList: String ; CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward : Boolean ) : Boolean ;
var Func: TSearchReplace;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'SearchReplace' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Expression) , PChar( Replace) , PChar( ExpList) , PChar( RepList) , CaseSensivity, WholeWords, SearchFromCaret, SelectedOnly, RegEx, Forward ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_VisibleControlChange( Control: Integer ; Show: Boolean ) : Boolean ;
var Func: TVisibleControlChange;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'VisibleControlChange' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( Control, Show) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_Compile( CompileType: Integer ; Lang, Filename: String ; Compiling: Boolean ) : Boolean ;
var Func: TCompile;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Compiling then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Compiling' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Compile' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( CompileType, PChar( Lang) , PChar( Filename) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_ShowHelp( HelpType: Integer ) : Boolean ;
var Func: TShowHelp;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'ShowHelp' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( HelpType) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_CustomItemClick( Caption: String ) : Boolean ;
var Func: TCustomItemClick;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CustomItemClick' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Caption) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_ThemeChange( Theme: String ) : Boolean ;
var Func: TThemeChanged;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'ThemeChanged' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Theme) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
2005-09-08 02:20:28 +04:00
function Plugin_Modified( ModifiedStr: PAnsiChar ) : Boolean ;
2005-08-26 22:29:39 +04:00
var Func: TModified;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Modified' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
2005-09-08 02:20:28 +04:00
case Func( ModifiedStr) of
2005-08-26 22:29:39 +04:00
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
2005-09-04 00:00:46 +04:00
function Plugin_KeyPress( Key: Char ) : Boolean ;
2005-08-26 22:29:39 +04:00
var Func: TKeyPress;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'KeyPress' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
2005-09-04 00:00:46 +04:00
case Func( PChar( String( Key) ) ) of
2005-08-26 22:29:39 +04:00
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_EditorClick( DoubleClick: Boolean ) : Boolean ;
var Func: TEditorClick;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if DoubleClick then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'DoubleClick' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'Click' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
2005-09-04 17:03:34 +04:00
case Func of
2005-08-26 22:29:39 +04:00
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_UpdateSel( SelStart, SelLength, FirstVisibleLine: Integer ) : Boolean ;
var Func: TUpdateSel;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'UpdateSel' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( SelStart, SelLength, FirstVisibleLine) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_CallTipShow( List: PChar ) : Boolean ;
var Func: TCallTipShow;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CallTipShow' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( List) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_CallTipClick( Position: Integer ) : Boolean ;
var Func: TCallTipClick;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'CallTipClick' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( Position) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_AutoCompleteShow( List: PChar ) : Boolean ;
var Func: TAutoCompleteShow;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'AutoCompleteShow' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( List) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_AutoCompleteSelect( Text : PChar ) : Boolean ;
var Func: TAutoCompleteSelect;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'AutoCompleteSelect' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( Text ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
2005-09-04 17:03:34 +04:00
function Plugin_AppMsg( hwnd: HWND; Message : Integer ; wParam, lParam: Integer ; time: Integer ; pt: TPoint) : Boolean ;
2005-08-26 22:29:39 +04:00
var Func: TAppMsg;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 17:03:34 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'AppMessage' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( hwnd, Message , wParam, lParam, time, pt) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
end ;
2005-08-26 22:29:39 +04:00
function Plugin_UpdateCodeExplorer( Lang, Filename, CurrProjects: String ; Updating: Boolean ) : Boolean ;
var Func: TUpdateCodeTools;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Updating then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'UpdatingCodeExplorer' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'UpdatedCodeExplorer' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Lang) , PChar( Filename) , PChar( CurrProjects) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_UpdateCodeInspector( Lang, Filename, CurrProjects: String ; Updating: Boolean ) : Boolean ;
var Func: TUpdateCodeTools;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
if Updating then
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'UpdatingCodeInspector' )
2005-08-26 22:29:39 +04:00
else
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'UpdatedCodeInspector' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( PChar( Lang) , PChar( Filename) , PChar( CurrProjects) ) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_OutputDblClick( ItemIndex: Integer ) : Boolean ;
var Func: TOutputEvent;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'OutputDoubleClick' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( ItemIndex) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
function Plugin_OutputPopup( ItemIndex: Integer ) : Boolean ;
var Func: TOutputEvent;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
2005-09-04 00:00:46 +04:00
@ Func : = GetProcAddress( Handles[ i] , 'OutputPopup' ) ;
2005-08-26 22:29:39 +04:00
if @ Func < > nil then begin
case Func( ItemIndex) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
2005-09-08 02:20:28 +04:00
SetLength( Handles, 0 ) ;
Handles : = nil ;
2005-08-26 22:29:39 +04:00
end ;
2005-09-11 01:55:22 +04:00
function Plugin_Shortcut( CharCode, KeyData: Integer ) : Boolean ;
var Func: TShortcutEvent;
i: integer ;
Handles: TIntegerArray;
begin
Result : = True ;
Handles : = GetDLLHandles;
for i : = 0 to High( Handles) do begin
@ Func : = GetProcAddress( Handles[ i] , 'Shortcut' ) ;
if @ Func < > nil then begin
case Func( CharCode, KeyData) of
PLUGIN_HANDLED: Result : = False ;
PLUGIN_STOP: begin
Result : = False ;
exit;
end ;
end ;
end ;
end ;
SetLength( Handles, 0 ) ;
Handles : = nil ;
end ;
2005-08-26 22:29:39 +04:00
end .