source: branches/2.20_branch/Sibyl/SPCC/TOOLSAPI.PAS

Last change on this file was 7, checked in by RBRi, 19 years ago

+ sibyl staff

  • Property svn:eol-style set to native
File size: 18.8 KB
Line 
1
2{ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
3 º º
4 º Sibyl Portable Component Classes º
5 º º
6 º Copyright (C) 1995,97 SpeedSoft Germany, All rights reserved. º
7 º º
8 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ}
9
10Unit ToolsAPI;
11
12Interface
13
14Uses Classes,Forms,Graphics,editors;
15
16Type
17 //Tools Service API. the Reference For This Class Is ToolServices And Is created by the SP/2
18 //IDE ON Library Initialization
19 TCreateModuleFlag = (cmfAddToProject,cmfShowSource,cmfShowForm,
20 cmfUnNamed,cmfNewUnit,cmfNewForm,cmfMainForm,cmfMarkModified,
21 cmfNewFile,cmfExisting);
22
23 TCreateModuleFlags = Set Of TCreateModuleFlag;
24
25 TProjectEnumProc = Function(Param: Pointer;Const FileName, UnitName,
26 FormName:String):Boolean;
27
28 TFileNotification = (fnFileOpening, fnFileOpened, fnFileClosing,
29 fnProjectOpening, fnProjectOpened, fnProjectClosing, fnAddedToProject,
30 fnRemovedFromProject, fnDefaultDesktopLoad, fnDefaultDesktopSave,
31 fnProjectDesktopLoad, fnProjectDesktopSave, fnProjectSaved, fnFileSaved);
32
33 TIMainMenuIntf = Class;
34
35 TIAddInNotifier = Class
36 Procedure FileNotification(NotifyCode: TFileNotification;
37 Const FileName:String;Var Cancel:Boolean); Virtual;Abstract;
38 End;
39
40 TIModuleInterface=Class;
41
42 TIToolServices = Class
43 //Opens A New project. If PrjName Is Empty, Create A New, Empty project.
44 Function OpenProject(Const PrjName:String):Boolean; Virtual;Abstract;
45 //Extended Version Of OpenProject
46 Function OpenProjectEx(Const PrjName:String;VisualProject,CreateNew:Boolean):Boolean;Virtual;Abstract;
47 //Close project And return True ON Success
48 Function CloseProject:Boolean; Virtual;Abstract;
49 //determines If A named project can be opened, no Load
50 Function OpenProjectInfo(Const PrjName:String):Boolean; Virtual;Abstract;
51 //save Current project And return True ON Success
52 Function SaveProject:Boolean; Virtual;Abstract;
53 //returns True If specified File Is Open Or can be Loaded
54 Function OpenFile(Const FileName:String):Boolean; Virtual;Abstract;
55 //Closes Open Editor File, If it Is Not Open return also True
56 Function CloseFile(Const FileName:String):Boolean; Virtual;Abstract;
57 //Saves the specified files, If it Is Not Open return also True
58 Function SaveFile(Const FileName:String):Boolean; Virtual;Abstract;
59 //creates A New Module
60 Function CreateModule(Const ModuleName:String;
61 Source, Form: TMemoryStream;
62 CreateFlags: TCreateModuleFlags):Boolean; Virtual;Abstract;
63 //Extended Version Of CreateModule
64 Function CreateModuleEx(Const ModuleName, FormName, AncestorClass:String;
65 Source, Form: TMemoryStream;
66 CreateFlags: TCreateModuleFlags):TIModuleInterface; Virtual;Abstract;
67 //returns IDE Application Form
68 Function GetParentForm:TForm; Virtual;Abstract;
69 //returns Current project Name
70 Function GetProjectName:String; Virtual;Abstract;
71 //returns primary File Of project
72 Function GetPrimaryFile:String;Virtual;Abstract;
73 //returns Count Of units belonging To the Current project
74 Function GetUnitCount:LongInt; Virtual;Abstract;
75 //returns full Name Of project Unit With specified Index
76 Function GetUnitName(Index:LongInt):String; Virtual;Abstract;
77 //calls EnumProc For each Unit In the project
78 Function EnumProjectUnits(EnumProc: TProjectEnumProc;Param: Pointer):Boolean; Virtual;Abstract;
79 //return All files that belong To the Current project
80 Procedure GetProjectFiles(AStrings:TStrings);Virtual;Abstract;
81 //return Number Of available Forms In Current project
82 Function GetFormCount:LongInt; Virtual;Abstract;
83 //Get Name Of Form With specified Index
84 Function GetFormName(Index:LongInt):String; Virtual;Abstract;
85 //Get full Name Of Current File Or Form-Unit-File, Empty String If no File Is Active
86 Function GetCurrentFile:String; Virtual;Abstract;
87 //returns True If specified File Is Open
88 Function IsFileOpen(Const FileName:String):Boolean; Virtual;Abstract;
89 //Generate New Unit Name And File Name
90 Function GetNewModuleName(Var UnitIdent,FileName:String):Boolean; Virtual;Abstract;
91 //Get Count Of Currently installed Component modules (units)
92 Function GetModuleCount:LongInt; Virtual;Abstract;
93 //Get Component Unit Name With specified Index
94 Function GetModuleName(Index:LongInt):String; Virtual;Abstract;
95 //Get Component Count Of Component Unit With specified Index
96 Function GetComponentCount(Index:LongInt):LongInt; Virtual;Abstract;
97 //Get Component Name from Component Unit With specified Index
98 Function GetComponentName(ModIndex,CompIndex:LongInt):String; Virtual;Abstract;
99 //Get Interface For A File Loaded into the Editor
100 Function GetModuleInterface(Const FileName:String):TIModuleInterface; Virtual;Abstract;
101 //Get Interface For A Form And its associated Editor File
102 Function GetFormModuleInterface(Const FormName:String):TIModuleInterface; Virtual;Abstract;
103 //gets IDE main Menu
104 Function GetMainMenu:TIMainMenuIntf; Virtual;Abstract;
105 //Adds A Notification Proc
106 //gets main Menu Handle - Use With care
107 Function GetMainMenuHandle:TMenu;Virtual;Abstract;
108 Function AddNotifier(AddInNotifier:TIAddInNotifier):Boolean; Virtual;Abstract;
109 //Remove Notification Proc
110 Function RemoveNotifier(AddInNotifier:TIAddInNotifier):Boolean; Virtual;Abstract;
111 //Get Version Of the IDE
112 Function GetVersion:LongInt; Virtual;Abstract;
113 End;
114
115 TIMenuItemIntf=Class;
116
117 TIMenuFlag = (mfInvalid, mfEnabled, mfVisible, mfChecked, mfBreak, mfBarBreak,mfRadioItem);
118 TIMenuFlags = Set Of TIMenuFlag;
119
120 TIMenuClickEvent = Procedure(Sender:TIMenuItemIntf) Of Object;
121
122 //note: All TIMainMenuIntf queried MUST be freed by the client !!
123 TIMainMenuIntf = Class
124 //returns Interface For IDE main Menu (Top Level)
125 Function GetMenuItems: TIMenuItemIntf; Virtual;Abstract;
126 //returns Interface For Menu Item Or Submenu With specified Name
127 Function FindMenuItem(Const MenuName:String):TIMenuItemIntf; Virtual;Abstract;
128 End;
129
130 //note: All TIMenuItemIntf queried MUST be freed by the client !!
131 TIMenuItemIntf = Class
132 //Destroys Menu Item associated With the Interface, returns False If the Item was created by IDE
133 Function DestroyMenuItem:Boolean; Virtual;Abstract;
134 //Get Index Of This Item within the Menu Tree
135 Function GetIndex:LongInt; Virtual;Abstract;
136 //Get Count Of submenus For This Interface
137 Function GetItemCount:LongInt; Virtual;Abstract;
138 //Get Submenu Item With specified Index
139 Function GetItem(Index:LongInt):TIMenuItemIntf; Virtual;Abstract;
140 //Get (internal !) Name Of Menu associated With Interface, See also GetCaption
141 Function GetName:String; Virtual;Abstract;
142 //Get parent Interface Of Item Or Nil
143 Function GetParent: TIMenuItemIntf; Virtual;Abstract;
144 //Get Caption Of Menu associated With the Interface
145 Function GetCaption:String; Virtual;Abstract;
146 //Set Caption Of Menu associated With the Interface
147 Function SetCaption(Const Caption:String):Boolean; Virtual;Abstract;
148 //Get ShortCut Of Menu
149 Function GetShortCut:TKeyCode; Virtual;Abstract;
150 //Set ShortCut Of Menu
151 Function SetShortCut(ShortCut:TKeyCode):Boolean; Virtual;Abstract;
152 //Get Flags Of Menu
153 Function GetFlags:TIMenuFlags; Virtual;Abstract;
154 //Set Flags Of Menu
155 Function SetFlags(Mask,Flags: TIMenuFlags):Boolean; Virtual;Abstract;
156 //Get Hint Of Menu
157 Function GetHint:String; Virtual;Abstract;
158 //Set Hint Of Menu
159 Function SetHint(Hint:String):Boolean; Virtual;Abstract;
160 //Get help context Of Menu
161 Function GetContext:THelpContext; Virtual;Abstract;
162 //Set help context For Menu
163 Function SetContext(context:THelpContext):Boolean; Virtual;Abstract;
164 //Get OnClick event For the Menu
165 Function GetOnClick:TIMenuClickEvent; Virtual;Abstract;
166 //Set OnClick event For the Menu
167 Function SetOnClick(Click:TIMenuClickEvent):Boolean; Virtual;Abstract;
168 //inserts an Item
169 Function InsertItem(Index:LongInt;Caption,Name,Hint:String;
170 ShortCut:TKeyCode;context:THelpContext;Flags:TIMenuFlags;
171 EventHandler:TIMenuClickEvent):TIMenuItemIntf; Virtual;Abstract;
172 //Get Menu Item associates With the Interface - Use With care !
173 Function GetMenuEntry:TMenuItem; Virtual;Abstract;
174 End;
175
176 TNotifyCode = (ncModuleDeleted, ncModuleRenamed, ncEditorModified,
177 ncFormModified, ncEditorSelected, ncFormSelected, ncBeforeSave,
178 ncAfterSave, ncFormSaving, ncProjResModified);
179
180 TIModuleNotifier=Class
181 Procedure notify(NotifyCode:TNotifyCode); Virtual;Abstract;
182 Procedure ComponentRenamed(ComponentHandle:Pointer;
183 Const OldName,NewName:String); Virtual;Abstract;
184 End;
185
186 TIEditorInterface=Class;
187 TIFormInterface=Class;
188
189 //represents File And Forms Open In A project
190 //note: All TIModuleInterface queried MUST be freed by the client !!
191 TIModuleInterface=Class
192 //Get Editor Interface For the Module Or Nil
193 Function GetEditorInterface:TIEditorInterface; Virtual;Abstract;
194 //Get Form Interface For the Module Or Nil
195 Function GetFormInterface:TIFormInterface; Virtual;Abstract;
196 //Close the Module without Saving (See save)
197 Function Close:Boolean; Virtual;Abstract;
198 //Saves the Module, If forcesave Is True, the user will Not be asked
199 Function save(forcesave: Boolean):Boolean; Virtual;Abstract;
200 //Rename Module
201 Function Rename(Const NewName:String):Boolean; Virtual;Abstract;
202 //Show Source File Of Editor In topmost Editor Window
203 Function ShowSource:Boolean; Virtual;Abstract;
204 //Show Form Of Module If present
205 Function ShowForm:Boolean; Virtual;Abstract;
206 //Add Notification Proc
207 Function AddNotifier(AModuleNotifier:TIModuleNotifier):Boolean; Virtual;Abstract;
208 //Remove Notification Proc
209 Function RemoveNotifier(AModuleNotifier:TIModuleNotifier):Boolean; Virtual;Abstract;
210 End;
211
212 TEditPos = Record
213 Col: SMALLINT;
214 Line: LongInt;
215 End;
216
217 TSyntaxHighlighter = (shNone, shPascal, shSQL, shQuery);
218
219 //represents Editor File opened
220 //note: All TIEditorInterface queried MUST be freed by the client !!
221 TIEditorInterface=Class
222 //gets Text At specified Position
223 Function GetText(Position:LongInt;Var Buffer;BufSize:LongInt):LongInt;Virtual;Abstract;
224 //copies Text from actual Position To Pos into the Clipboard
225 Function CopyTo(Pos:LongInt):Boolean; Virtual;Abstract;
226 //deletes Text from actual positon To Pos into the Clipboard
227 Function DeleteTo(Pos:LongInt):Boolean; Virtual;Abstract;
228 //Insert specified Text At Current Position
229 Function Insert(Var Buffer;BufSize:LongInt):Boolean; Virtual;Abstract;
230 //Get Editor Position
231 Function Position: LongInt; Virtual;Abstract;
232 //Get File Name Of Editor
233 Function FileName:String; Virtual;Abstract;
234 //Get total Lines Of edit Buffer
235 Function LinesInBuffer:LongInt; Virtual;Abstract;
236 //returns True If edit Buffer was Modified
237 Function BufferModified:Boolean; Virtual;Abstract;
238 //Forces the Editor To be Modified
239 Function MarkModified:Boolean; Virtual;Abstract;
240 //sets color Table
241 Function SetSyntaxHighlighter(SyntaxHighlighter:TSyntaxHighlighter):TSyntaxHighlighter;Virtual;Abstract;
242 //Get Editor Position
243 Function GetPos:TEditPos; Virtual;Abstract;
244 //Set Editor positon
245 Procedure SetPos(Value: TEditPos); Virtual;Abstract;
246 //Get Editor Form Instance - Use With care !
247 Function GetEditorForm:TEditor; Virtual;Abstract;
248
249 Property CursorPos: TEditPos Read GetPos Write SetPos;
250 End;
251
252 TIComponentInterface=Class;
253
254 //represents Form inside designer
255 //note: All TIFormInterface queried MUST be freed by the client !!
256 TIFormInterface=Class
257 //returns Unit File Name For the Form
258 Function FileName:String; Virtual;Abstract;
259 //returns True If the Form Is Modified
260 Function FormModified:Boolean; Virtual;Abstract;
261 //Forces the Form To be marked As Modified
262 Function MarkModified:Boolean; Virtual;Abstract;
263 //Get Component Interface For the Form
264 Function GetFormComponent:TIComponentInterface; Virtual;Abstract;
265 //Get Form Instance For the Form - Use With care !
266 Function GetFormInstance:TForm; Virtual;Abstract;
267 //Find Component by Name And return Interface
268 Function FindComponent(Const Name:String):TIComponentInterface; Virtual;Abstract;
269 //Get Component Interface from Instance
270 Function GetComponentFromHandle(ComponentHandle:TObject):TIComponentInterface; Virtual;Abstract;
271 //Get Selection Count In Form Editor
272 Function GetSelCount:LongInt; Virtual;Abstract;
273 //Get Selected Component Interface from Index
274 Function GetSelComponent(Index:LongInt):TIComponentInterface; Virtual;Abstract;
275 //gets parent Interface that created the Form
276 Function GetCreateParent: TIComponentInterface; Virtual;Abstract;
277 //Create New Component, If containter Is Not Nil, it Is the parent, If Name Is Empty, it Is auto-created
278 Function CreateComponent(Container: TIComponentInterface;Const TypeName,Name:String;
279 X,Y,W,H:LongInt):TIComponentInterface; Virtual;Abstract;
280 End;
281
282 TPropertyType = (ptUnknown, ptInteger, ptChar, ptEnumeration, ptFloat,
283 ptString, ptSet, ptClass, ptMethod, ptWChar, ptLString, ptLWString,
284 ptVariant,ptBoolean,ptCString,ptClassRef,ptRecord);
285
286 TGetChildCallback = Function(Param:Pointer;ComponentInterface:TIComponentInterface):Boolean;
287
288 //represents Components inside A Form
289 //note: All TIComponentInterface queried MUST be freed by the client !!
290 TIComponentInterface=Class
291 //returns Component Type As String
292 Function GetComponentType:String; Virtual;Abstract;
293 //returns Component Instance - Use With care !
294 Function GetComponentHandle:TComponent; Virtual;Abstract;
295 //returns parent Interface
296 Function GetParent:TIComponentInterface; Virtual;Abstract;
297 //returns True If Interface Is A descendant Of TControl
298 Function IsTControl:Boolean; Virtual;Abstract;
299 //returns Property Count For the Interface Instance
300 Function GetPropCount:LongInt; Virtual;Abstract;
301 //Get Property Name from Index
302 Function GetPropName(Index:LongInt):String; Virtual;Abstract;
303 //Get Property Type from Index
304 Function GetPropType(Index:LongInt;Var TypeLen:LongInt):TPropertyType; Virtual;Abstract;
305 //Get Property Type from Name
306 Function GetPropTypeByName(Const Name:String;Var TypeLen:LongInt):TPropertyType; Virtual;Abstract;
307 //gets Property Value from Index
308 Function GetPropValue(Index:LongInt;Var Value):Boolean; Virtual;Abstract;
309 //gets Property Value from Name
310 Function GetPropValueByName(Const Name:String;Var Value):Boolean; Virtual;Abstract;
311 //sets Property from Index
312 Function SetProp(Index:LongInt;Const Value):Boolean; Virtual;Abstract;
313 //sets Property from Name
314 Function SetPropByName(Const Name:String;Const Value):Boolean; Virtual;Abstract;
315 //Enums component's Children
316 Function GetChildren(Param:Pointer;Proc:TGetChildCallback): Boolean; Virtual;Abstract;
317 //Get Count Of Child Controls
318 Function GetControlCount:LongInt; Virtual;Abstract;
319 //Get Control from Index
320 Function GetControl(Index:LongInt):TIComponentInterface; Virtual;Abstract;
321 //Get Count Of Child Components
322 Function GetComponentCount:LongInt; Virtual;Abstract;
323 //Get Child Component from Index
324 Function GetComponent(Index:LongInt):TIComponentInterface; Virtual;Abstract;
325 //Select Component
326 Function Select: Boolean; Virtual;Abstract;
327 //Focus Component
328 Function Focus: Boolean; Virtual;Abstract;
329 //Delete Component
330 Function Delete: Boolean; Virtual;Abstract;
331 //Set event Property And Add Some Code To it (optional)
332 Function SetEventProperty(Const PropertyName,MethodName:String;Code:TStream):Boolean;Virtual;Abstract;
333 //Get method Name Of A event Property
334 Function GetEventProperty(Const PropertyName:String):String;Virtual;Abstract;
335 End;
336
337 //Expert interfaces - provided by client, created And destroyed by IDE
338 TExpertStyle = (esStandard, esForm, esProject, esAddIn);
339 TExpertState = Set Of (esEnabled, esChecked);
340
341 TIExpert=Class(TComponent)
342 //Required: returns Name Of Expert
343 Function GetName:String; Virtual;Abstract;
344 //Required For styles esForm And esProject: returns author Of Expert
345 Function GetAuthor:String; Virtual;Abstract;
346 //Required For styles esForm And esProject: returns comment Of Expert
347 Function GetComment:String; Virtual;Abstract;
348 //Required For styles esForm And esProject: returns page For repository, Empty String For Default
349 Function GetPage:String; Virtual;Abstract;
350 //Required For styles esForm And esProject: returns Bitmap For Expert, Nil For Default
351 Function GetGlyph: TBitmap; Virtual;Abstract;
352 //Required: returns Style Of Expert
353 Function GetStyle: TExpertStyle; Virtual;Abstract;
354 //Required If Style Is esStandard: returns Menu State Of Expert
355 Function GetState: TExpertState; Virtual;Abstract;
356 //Required: returns UNIQUE IDString Of Expert. Supposed format Is: CompanyName.ExpertFunction, ex. SpeedSoft.AppExpert
357 Function GetIDString:String; Virtual;Abstract;
358 //Required If Style Is esStandard:returns Menu Text For Expert
359 Function GetMenuText:String; Virtual;Abstract;
360 //Required If Style Is esForm,esStandard Or esProject: called whenever project Is invoked
361 Procedure Execute; Virtual;Abstract;
362 //Required: Is called whenever the IDE registeres This Expert
363 Procedure Register; Virtual;Abstract;
364 //Required: Is called whenever the IDE unloads This Expert. the Expert Is destroyed after This call
365 Procedure Unload; Virtual;Abstract;
366 End;
367
368 TIExpertClass=Class Of TIExpert;
369
370Const
371 ToolServices:TIToolServices=Nil;
372
373Procedure RegisterLibraryExperts(Experts:Array Of TIExpertClass);
374Procedure FreeAllLibraryExperts;
375
376Implementation
377
378Procedure RegisterLibraryExperts(Experts:Array Of TIExpertClass);
379Var T:LongInt;
380Begin
381 For T:=0 To High(Experts) Do LibExperts.Add(Experts[T]);
382End;
383
384Procedure FreeAllLibraryExperts;
385Var T:LongInt;
386 Expert:TIExpert;
387Begin
388 LibExperts.Clear;
389 For T:=0 To LibExpertInstances.Count-1 Do
390 Begin
391 Expert:=TIExpert(LibExpertInstances.Items[T]);
392 Expert.Unload;
393 Expert.Destroy;
394 End;
395 LibExpertInstances.Clear;
396End;
397
398Procedure RegisterToolsAPI(ToolServ:TIToolServices);
399Begin
400 ToolServices:=ToolServ;
401End;
402
403Begin
404 RegisterToolsAPIProc:=Pointer(@RegisterToolsAPI);
405End.
406
Note: See TracBrowser for help on using the repository browser.