ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/IBDBReg.pas
Revision: 106
Committed: Thu Jan 18 14:37:35 2018 UTC (6 years, 11 months ago) by tony
Content type: text/x-pascal
File size: 34661 byte(s)
Log Message:
Updates Merged

File Contents

# User Rev Content
1 tony 33 {************************************************************************}
2     { }
3     { Borland Delphi Visual Component Library }
4     { InterBase Express core components }
5     { }
6     { Copyright (c) 1998-2000 Inprise Corporation }
7     { }
8     { InterBase Express is based in part on the product }
9     { Free IB Components, written by Gregory H. Deatz for }
10     { Hoagland, Longo, Moran, Dunst & Doukas Company. }
11     { Free IB Components is used under license. }
12     { }
13     { The contents of this file are subject to the InterBase }
14     { Public License Version 1.0 (the "License"); you may not }
15     { use this file except in compliance with the License. You }
16     { may obtain a copy of the License at http://www.Inprise.com/IPL.html }
17     { Software distributed under the License is distributed on }
18     { an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either }
19     { express or implied. See the License for the specific language }
20     { governing rights and limitations under the License. }
21     { The Original Code was created by InterBase Software Corporation }
22     { and its successors. }
23     { Portions created by Inprise Corporation are Copyright (C) Inprise }
24     { Corporation. All Rights Reserved. }
25     { Contributor(s): Jeff Overcash }
26     { }
27     { IBX For Lazarus (Firebird Express) }
28     { Contributor: Tony Whyman, MWA Software http://www.mwasoftware.co.uk }
29     { Portions created by MWA Software are copyright McCallum Whyman }
30     { Associates Ltd 2011 }
31     {************************************************************************}
32    
33     unit IBDBReg;
34    
35     {$MODE Delphi}
36    
37     (*
38     * Compiler defines
39     *)
40     {$A+} (* Aligned records: On *)
41     {$B-} (* Short circuit boolean expressions: Off *)
42     {$H+} (* Huge Strings: On *)
43     {$J-} (* Modification of Typed Constants: Off *)
44     {$M+} (* Generate run-time type information: On *)
45     {$O+} (* Optimization: On *)
46     {$Q-} (* Overflow checks: Off *)
47     {$R-} (* Range checks: Off *)
48     {$T+} (* Typed address: On *)
49     {$W-} (* Always generate stack frames: Off *)
50     {$X+} (* Extended syntax: On *)
51     {$Z1} (* Minimum Enumeration Size: 1 Byte *)
52    
53     interface
54    
55     uses SysUtils, Classes, Graphics, Dialogs, Controls, Forms, TypInfo,
56     DB, IBTable, IBDatabase, IBEventsEditor, LazarusPackageIntf,
57 tony 80 IBUpdateSQL, IBUpdate, ComponentEditors, PropEdits, DBPropEdits, FieldsEditor,
58 tony 33 dbFieldLinkPropEditor, dbFieldListPropEditor, IBDialogs;
59    
60     type
61    
62     { TIBFileNameProperty
63     Property editor the DataBase Name property. Brings up the Open dialog }
64    
65     TIBFileNameProperty = class(TStringProperty)
66     public
67     procedure Edit; override;
68     function GetAttributes: TPropertyAttributes; override;
69     end;
70    
71     { TIBNameProperty
72     }
73     TIBNameProperty = class(TStringProperty)
74     public
75     function GetAttributes: TPropertyAttributes; override;
76     end;
77    
78     { TIBStoredProcNameProperty
79     Editor for the TIBStoredProc.StoredProcName property. Displays a drop-down list of all
80     the StoredProcedures in the Database.}
81     TIBStoredProcNameProperty = class(TIBNameProperty)
82     public
83     procedure GetValues(Proc: TGetStrProc); override;
84     end;
85    
86     { TIBTableNameProperty
87     Editor for the TIBTable.TableName property. Displays a drop-down list of all
88     the Tables in the Database.}
89     TIBTableNameProperty = class(TIBNameProperty)
90     public
91     procedure GetValues(Proc: TGetStrProc); override;
92     end;
93    
94     { TDBStringProperty }
95    
96     TDBStringProperty = class(TStringProperty)
97     private
98     function ConnecttoDB: boolean;
99     public
100     function GetAttributes: TPropertyAttributes; override;
101     procedure GetValueList(List: TStrings); virtual;
102     procedure GetValues(Proc: TGetStrProc); override;
103     procedure Edit; override;
104     end;
105    
106     { TIBIndexFieldNamesProperty }
107    
108     TIBIndexFieldNamesProperty = class(TDBStringProperty)
109     public
110     procedure GetValueList(List: TStrings); override;
111     end;
112    
113     TIBIndexNameProperty = class(TDBStringProperty)
114     public
115     procedure GetValueList(List: TStrings); override;
116     end;
117    
118     { TIBDatabaseEditor }
119    
120     TIBDatabaseEditor = class(TComponentEditor)
121     procedure ExecuteVerb(Index: Integer); override;
122     function GetVerb(Index: Integer): string; override;
123     function GetVerbCount: Integer; override;
124     end;
125    
126     { TIBTransactionEditor }
127    
128     TIBTransactionEditor = class(TComponentEditor)
129     public
130     procedure ExecuteVerb(Index: Integer); override;
131     function GetVerb(Index: Integer): string; override;
132     function GetVerbCount: Integer; override;
133     end;
134    
135 tony 45 { TIBArrayGridEditor }
136    
137     TIBArrayGridEditor = class(TComponentEditor)
138     public
139     procedure ExecuteVerb(Index: Integer); override;
140     function GetVerb(Index: Integer): string; override;
141     function GetVerbCount: Integer; override;
142     end;
143    
144 tony 33 { TIBQueryEditor }
145    
146     TIBQueryEditor = class(TFieldsComponentEditor)
147     public
148     procedure ExecuteVerb(Index: Integer); override;
149     function GetVerb(Index: Integer): string; override;
150     function GetVerbCount: Integer; override;
151     end;
152    
153     { TIBStoredProcEditor }
154    
155     TIBStoredProcEditor = class(TFieldsComponentEditor)
156     public
157     procedure ExecuteVerb(Index: Integer); override;
158     function GetVerb(Index: Integer): string; override;
159     function GetVerbCount: Integer; override;
160     end;
161    
162     { TIBDataSetEditor }
163    
164     TIBDataSetEditor = class(TFieldsComponentEditor)
165     public
166     procedure ExecuteVerb(Index: Integer); override;
167     function GetVerb(Index: Integer): string; override;
168     function GetVerbCount: Integer; override;
169     end;
170    
171     { TIBUpdateSQLEditor }
172    
173     TIBUpdateSQLEditor = class(TComponentEditor)
174     public
175     procedure ExecuteVerb(Index: Integer); override;
176     function GetVerb(Index: Integer): string; override;
177     function GetVerbCount: Integer; override;
178     end;
179    
180     { TIBSQLEditor }
181    
182     TIBSQLEditor = class(TComponentEditor)
183     public
184     procedure ExecuteVerb(Index: Integer); override;
185     function GetVerb(Index: Integer): string; override;
186     function GetVerbCount: Integer; override;
187     end;
188    
189     { TIBServiceEditor}
190    
191     TIBServiceEditor = class(TComponentEditor)
192     public
193     procedure ExecuteVerb(Index: Integer); override;
194     function GetVerb(Index: Integer): string; override;
195     function GetVerbCount: Integer; override;
196     end;
197    
198     TIBStoredProcParamsProperty = class(TCollectionPropertyEditor)
199     public
200     procedure Edit; override;
201     end;
202    
203     { TIBTableFieldLinkProperty }
204    
205     TIBTableFieldLinkProperty = class(TFieldLinkProperty)
206     private
207     FTable: TIBTable;
208     protected
209     function GetIndexDefs: TIndexDefs; override;
210     function GetIndexFieldNames: string; override;
211     function GetMasterFields: string; override;
212     procedure SetIndexFieldNames(const Value: string); override;
213     procedure SetMasterFields(const Value: string); override;
214     public
215     procedure Edit; override;
216     end;
217    
218     { TSQLPropertyEditor }
219    
220     TSQLPropertyEditor = class(TStringsPropertyEditor)
221     public
222     function GetAttributes: TPropertyAttributes; override;
223     end;
224    
225     { TIBQuerySQLProperty }
226    
227     TIBQuerySQLProperty = class(TSQLPropertyEditor)
228     public
229     procedure Edit; override;
230     end;
231    
232     {TIBSQLSQLPropertyEditor }
233    
234     TIBSQLSQLPropertyEditor = class(TSQLPropertyEditor)
235     public
236     procedure Edit; override;
237     end;
238    
239     { TIBDatasetSQLProperty }
240    
241     TIBDatasetSQLProperty = class(TSQLPropertyEditor)
242     public
243     procedure Edit; override;
244     end;
245    
246     { TIBSQLProperty }
247    
248     TIBSQLProperty = class(TSQLPropertyEditor)
249     public
250     procedure Edit; override;
251     end;
252    
253     { TUpdateSQLPropertyEditor }
254    
255     TUpdateSQLPropertyEditor = class(TSQLPropertyEditor)
256     protected
257     FIBUpdateSQL: TIBUpdateSQL;
258     FDatabase: TIBDatabase;
259     function GetObjects: boolean;
260     end;
261    
262     { TIBUpdateSQLProperty }
263    
264     TIBUpdateSQLProperty = class(TSQLPropertyEditor)
265     public
266     procedure Edit; override;
267     end;
268    
269     { TIBRefreshSQLProperty }
270    
271     TIBRefreshSQLProperty = class(TSQLPropertyEditor)
272     public
273     procedure Edit; override;
274     end;
275    
276     { TIBInsertSQLProperty }
277    
278     TIBInsertSQLProperty = class(TSQLPropertyEditor)
279     public
280     procedure Edit; override;
281     end;
282    
283     { TIBDeleteSQLProperty }
284    
285     TIBDeleteSQLProperty = class(TSQLPropertyEditor)
286     public
287     procedure Edit; override;
288     end;
289    
290     { TIBUpdateSQLUpdateProperty }
291    
292     TIBUpdateSQLUpdateProperty = class(TUpdateSQLPropertyEditor)
293     public
294     procedure Edit; override;
295     end;
296    
297     { TIBUpdateSQLRefreshSQLProperty }
298    
299     TIBUpdateSQLRefreshSQLProperty = class(TUpdateSQLPropertyEditor)
300     public
301     procedure Edit; override;
302     end;
303    
304     { TIBUpdateSQLInsertSQLProperty }
305    
306     TIBUpdateSQLInsertSQLProperty = class(TUpdateSQLPropertyEditor)
307     public
308     procedure Edit; override;
309     end;
310    
311     { TIBUpdateSQLDeleteProperty }
312    
313     TIBUpdateSQLDeleteProperty = class(TUpdateSQLPropertyEditor)
314     public
315     function GetAttributes: TPropertyAttributes; override;
316     procedure Edit; override;
317     end;
318    
319     { TIBEventListProperty }
320    
321     TIBEventListProperty = class(TClassProperty)
322     public
323     function GetAttributes: TPropertyAttributes; override;
324     procedure Edit; override;
325     end;
326    
327     {TIBGeneratorProperty}
328    
329     TIBGeneratorProperty = class(TPersistentPropertyEditor)
330     public
331     function GetAttributes: TPropertyAttributes; override;
332     procedure Edit; override;
333     end;
334    
335     { TDBDynamicGridFieldProperty }
336    
337     TDBDynamicGridFieldProperty = class(TFieldProperty)
338     public
339     procedure FillValues(const Values: TStringList); override;
340     end;
341    
342     { TDBLookupPropertiesGridFieldProperty }
343    
344     TDBLookupPropertiesGridFieldProperty = class(TFieldProperty)
345     public
346     procedure FillValues(const Values: TStringList); override;
347     end;
348    
349     { TIBTreeViewFieldProperty }
350    
351     TIBTreeViewFieldProperty = class(TFieldProperty)
352     public
353     procedure FillValues(const Values: TStringList); override;
354     end;
355    
356     { TIBDynamicGridIndexNamesProperty }
357    
358     TIBDynamicGridIndexNamesProperty = class(TIndexFieldNamesProperty)
359     protected
360     function GetFieldDefs: TFieldDefs; override;
361     function GetIndexFieldNames: string; override;
362     procedure SetIndexFieldNames(const Value: string); override;
363     end;
364    
365 tony 45 { TIBFieldDefsProperty }
366 tony 33
367 tony 45 TIBFieldDefsProperty = class(TCollectionPropertyEditor)
368     public
369     procedure Edit; override;
370     end;
371 tony 33
372 tony 45 { TIBIndexDefsProperty }
373    
374     TIBIndexDefsProperty = class(TCollectionPropertyEditor)
375     public
376     procedure Edit; override;
377     end;
378    
379    
380 tony 33 procedure Register;
381    
382     implementation
383    
384 tony 45 uses IB, IBQuery, IBStoredProc, IBCustomDataSet, FBMessages,
385     IBSQL, IBSQLMonitor, IBDatabaseInfo, IBEvents, IBTypes,
386 tony 33 IBServices, IBDatabaseEdit, IBTransactionEdit,
387     IBBatchMove, IBExtract,LResources, IBSelectSQLEditor,
388     IBModifySQLEditor,IBDeleteSQLEditor,IBRefreshSQLEditor,
389     IBInsertSQLEditor, IBGeneratorEditor, IBUpdateSQLEditor, IBDataSetEditor,
390     IBSQLEditor, ibserviceeditor, LCLVersion, IBDynamicGrid, IBLookupComboEditBox,
391 tony 45 IBTreeView, DBControlGrid, ibxscript, IBLocalDBSupport, IBDSDialogs,
392 tony 47 IBArrayGrid, IBVersion, IBDataOutput;
393 tony 33
394 tony 45 const
395     IBPalette1 = 'Firebird'; {do not localize}
396     IBPalette2 = 'Firebird Admin'; {do not localize}
397     IBPalette3 = 'Firebird Data Controls'; {do not localize}
398    
399     resourcestring
400 tony 47 SInterbaseExpressVersion = 'Firebird Express for Lazarus ' + IBX_VERSION;
401 tony 45 SEditSQL = 'Edit SQL';
402     SIBSQLEditor = 'IBSQL Editor';
403     SIBServiceEditor = 'Edit IB Service';
404     SIBUpdateSQLEditor = '&UpdateSQL Editor...';
405     SIBDataSetEditor = '&Dataset Editor...';
406     SExecute = 'E&xecute';
407     SIBDatabaseEditor = 'Da&tabase Editor...';
408     SIBTransactionEditor = '&Transaction Editor...';
409     SIBUpdateLayout = 'Update Layout';
410 tony 33
411     procedure Register;
412     begin
413     if not TryIBLoad then
414     begin
415     MessageDlg('IBX is unable to locate the Firebird Library - have you remembered to install it?',mtError,[mbOK],0);
416     Exit;
417     end;
418    
419 tony 106 RegisterNoIcon([TIBStringField, TIBBCDField, TIBMemoField, TIBArrayField,
420     TIBSmallintField, TIBIntegerField, TIBLargeIntField]);
421 tony 33 {$if lcl_fullversion < 01010000}
422     {see http://bugs.freepascal.org/view.php?id=19035 }
423     RegisterNoIcon([TIntegerField]);
424     {$endif}
425     RegisterComponents(IBPalette1, [ TIBQuery, TIBDataSet,
426 tony 80 TIBDatabase, TIBTransaction, TIBUpdateSQL, TIBUpdate, TIBEvents,
427 tony 33 TIBSQL, TIBDatabaseInfo, TIBSQLMonitor,
428 tony 47 TIBStoredProc,TIBBatchMove, TIBTable,TIBExtract, TIBXScript, TIBLocalDBSupport,
429     TIBBlockFormatOut,TIBCSVDataOut,TIBInsertStmtsOut]);
430 tony 45 if FirebirdAPI.HasServiceAPI then
431 tony 33 RegisterComponents(IBPalette2, [TIBConfigService, TIBBackupService,
432     TIBRestoreService, TIBValidationService, TIBStatisticalService,
433     TIBLogService, TIBSecurityService, TIBServerProperties]);
434    
435    
436 tony 45 RegisterComponents(IBPalette3,[TIBLookupComboEditBox,TIBDynamicGrid,TIBTreeView,TDBControlGrid, TIBArrayGrid]);
437 tony 33 RegisterPropertyEditor(TypeInfo(TIBFileName), TIBDatabase, 'DatabaseName', TIBFileNameProperty); {do not localize}
438     RegisterPropertyEditor(TypeInfo(string), TIBStoredProc, 'StoredProcName', TIBStoredProcNameProperty); {do not localize}
439     RegisterPropertyEditor(TypeInfo(TParams), TIBStoredProc, 'Params', TIBStoredProcParamsProperty);
440     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'TableName', TIBTableNameProperty); {do not localize}
441     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'IndexName', TIBIndexNameProperty); {do not localize}
442     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'IndexFieldNames', TIBIndexFieldNamesProperty); {do not localize}
443     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'MasterFields', TIBTableFieldLinkProperty); {do not localize}
444 tony 45 RegisterPropertyEditor(TypeInfo(TFieldDefs), TIBTable, 'FieldDefs', TIBFieldDefsProperty); {do not localize}
445     RegisterPropertyEditor(TypeInfo(TIndexDefs), TIBTable, 'IndexDefs', TIBIndexDefsProperty); {do not localize}
446 tony 33 RegisterPropertyEditor(TypeInfo(TStrings), TIBQuery, 'SQL', TIBQuerySQLProperty); {do not localize}
447     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'SelectSQL', TIBDatasetSQLProperty); {do not localize}
448     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'ModifySQL', TIBUpdateSQLProperty); {do not localize}
449     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'InsertSQL', TIBInsertSQLProperty); {do not localize}
450     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'RefreshSQL', TIBRefreshSQLProperty); {do not localize}
451     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'DeleteSQL', TIBDeleteSQLProperty); {do not localize}
452     RegisterPropertyEditor(TypeInfo(TStrings), TIBSQL, 'SQL', TIBSQLSQLPropertyEditor); {do not localize}
453     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'RefreshSQL', TIBUpdateSQLRefreshSQLProperty); {do not localize}
454     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'ModifySQL', TIBUpdateSQLUpdateProperty); {do not localize}
455     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'InsertSQL', TIBUpdateSQLInsertSQLProperty); {do not localize}
456     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'DeleteSQL', TIBUpdateSQLDeleteProperty); {do not localize}
457     RegisterPropertyEditor(TypeInfo(TStrings), TIBEvents, 'Events', TIBEventListProperty); {do not localize}
458     RegisterPropertyEditor(TypeInfo(TPersistent), TIBDataSet, 'GeneratorField', TIBGeneratorProperty); {do not localize}
459     RegisterPropertyEditor(TypeInfo(TPersistent), TIBQuery, 'GeneratorField', TIBGeneratorProperty); {do not localize}
460    
461     RegisterComponentEditor(TIBDatabase, TIBDatabaseEditor);
462     RegisterComponentEditor(TIBTransaction, TIBTransactionEditor);
463     RegisterComponentEditor(TIBUpdateSQL, TIBUpdateSQLEditor);
464     RegisterComponentEditor(TIBDataSet, TIBDataSetEditor);
465     RegisterComponentEditor(TIBQuery, TIBQueryEditor);
466     RegisterComponentEditor(TIBStoredProc, TIBStoredProcEditor);
467     RegisterComponentEditor(TIBSQL, TIBSQLEditor);
468     RegisterComponentEditor(TIBCustomService, TIBServiceEditor);
469 tony 45 RegisterComponentEditor(TIBArrayGrid, TIBArrayGridEditor);
470 tony 33
471    
472     {Firebird Data Access Controls}
473     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'KeyField', TDBDynamicGridFieldProperty);
474     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'ListField', TDBDynamicGridFieldProperty);
475     RegisterPropertyEditor(TypeInfo(string), TIBDynamicGrid, 'IndexFieldNames', TIBDynamicGridIndexNamesProperty);
476     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'DataFieldName', TDBLookupPropertiesGridFieldProperty);
477     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'KeyField', TIBTreeViewFieldProperty);
478     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'TextField', TIBTreeViewFieldProperty);
479     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'ParentField', TIBTreeViewFieldProperty);
480     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'HasChildField', TIBTreeViewFieldProperty);
481    
482 tony 39 IBGUIInterface := TIBDSLCLInterface.Create;
483 tony 33 end;
484    
485     procedure LoadDataSourceFields(DataSource: TDataSource; List: TStrings);
486     var
487     DataSet: TDataSet;
488     i: Integer;
489     begin
490     if Assigned(DataSource) then
491     begin
492     DataSet := DataSource.DataSet;
493     if Assigned(DataSet) then
494     begin
495     if DataSet.Fields.Count > 0 then
496     DataSet.GetFieldNames(List)
497     else
498     begin
499     DataSet.FieldDefs.Update;
500     for i := 0 to DataSet.FieldDefs.Count - 1 do
501     List.Add(DataSet.FieldDefs[i].Name);
502     end;
503     end;
504     end;
505     end;
506    
507 tony 45 { TIBIndexDefsProperty }
508    
509     procedure TIBIndexDefsProperty.Edit;
510     var IndexDefs: TIndexDefs;
511     begin
512     IndexDefs := TIndexDefs(GetObjectValue);
513     if IndexDefs <> nil then
514     IndexDefs.Update;
515     inherited Edit;
516     end;
517    
518     { TIBFieldDefsProperty }
519    
520     procedure TIBFieldDefsProperty.Edit;
521     var FieldDefs: TFieldDefs;
522     begin
523     FieldDefs := TFieldDefs(GetObjectValue);
524     if FieldDefs <> nil then
525     FieldDefs.Update;
526     inherited Edit;
527     end;
528    
529     { TIBArrayGridEditor }
530    
531     procedure TIBArrayGridEditor.ExecuteVerb(Index: Integer);
532     begin
533     if Index < inherited GetVerbCount then
534     inherited ExecuteVerb(Index)
535     else
536     case Index of
537     0: TIBArrayGrid(Component).UpdateLayout;
538     end;
539     end;
540    
541     function TIBArrayGridEditor.GetVerb(Index: Integer): string;
542     begin
543     if Index < inherited GetVerbCount then
544     Result := inherited GetVerb(Index) else
545     begin
546     Dec(Index, inherited GetVerbCount);
547     case Index of
548     0: Result := SIBUpdateLayout;
549     1 : Result := SInterbaseExpressVersion ;
550     end;
551     end;
552     end;
553    
554     function TIBArrayGridEditor.GetVerbCount: Integer;
555     begin
556     Result := 2;
557     end;
558    
559 tony 33 { TDBLookupPropertiesGridFieldProperty }
560    
561     procedure TDBLookupPropertiesGridFieldProperty.FillValues(
562     const Values: TStringList);
563     var
564     P: TDBLookupProperties;
565     begin
566     P :=TDBLookupProperties(GetComponent(0));
567     if not (P is TDBLookupProperties) then exit;
568     LoadDataSourceFields(TIBDynamicGrid(P.Owner.Grid).DataSource, Values);
569     end;
570    
571     { TIBTreeViewFieldProperty }
572    
573     procedure TIBTreeViewFieldProperty.FillValues(const Values: TStringList);
574     var ListSource: TDataSource;
575     begin
576     ListSource := TIBTreeView(GetComponent(0)).DataSource;
577     LoadDataSourceFields(ListSource, Values);
578     end;
579    
580     { TIBDynamicGridIndexNamesProperty }
581    
582     function TIBDynamicGridIndexNamesProperty.GetFieldDefs: TFieldDefs;
583     var Grid: TIBDynamicGrid;
584     begin
585     Result := nil;
586     Grid := TIBDynamicGrid(GetComponent(0));
587     if assigned(Grid.DataSource) and assigned(Grid.DataSource.DataSet) then
588     Result := Grid.DataSource.DataSet.FieldDefs
589     end;
590    
591     function TIBDynamicGridIndexNamesProperty.GetIndexFieldNames: string;
592     var Grid: TIBDynamicGrid;
593     begin
594     Grid := TIBDynamicGrid(GetComponent(0));
595     Result := Grid.IndexFieldNames
596     end;
597    
598     procedure TIBDynamicGridIndexNamesProperty.SetIndexFieldNames(
599     const Value: string);
600     var Grid: TIBDynamicGrid;
601     begin
602     Grid := TIBDynamicGrid(GetComponent(0));
603     Grid.IndexFieldNames := Value
604     end;
605    
606     { TDBDynamicGridFieldProperty }
607    
608     procedure TDBDynamicGridFieldProperty.FillValues(const Values: TStringList);
609     var
610     P: TDBLookupProperties;
611     begin
612     P :=TDBLookupProperties(GetComponent(0));
613     if not (P is TDBLookupProperties) then exit;
614     LoadDataSourceFields(P.ListSource, Values);
615     end;
616    
617     { TIBServiceEditor }
618    
619     procedure TIBServiceEditor.ExecuteVerb(Index: Integer);
620     begin
621     if Index < inherited GetVerbCount then
622     inherited ExecuteVerb(Index) else
623     begin
624     Dec(Index, inherited GetVerbCount);
625     case Index of
626     0 : if ibserviceeditor.EditIBService(TIBCustomService(Component)) then Designer.Modified;
627     end;
628     end;
629     end;
630    
631     function TIBServiceEditor.GetVerb(Index: Integer): string;
632     begin
633     if Index < inherited GetVerbCount then
634     Result := inherited GetVerb(Index) else
635     begin
636     Dec(Index, inherited GetVerbCount);
637     case Index of
638     0: Result := SIBServiceEditor;
639     1 : Result := SInterbaseExpressVersion;
640     end;
641     end;
642     end;
643    
644     function TIBServiceEditor.GetVerbCount: Integer;
645     begin
646     Result := inherited GetVerbCount + 2;
647     end;
648    
649     { TIBFileNameProperty }
650     procedure TIBFileNameProperty.Edit;
651     begin
652     with TOpenDialog.Create(Application) do
653     try
654     InitialDir := ExtractFilePath(GetStrValue);
655     Filter := SDatabaseFilter; {do not localize}
656     if Execute then
657     SetStrValue(FileName);
658     finally
659     Free
660     end;
661     end;
662    
663     function TIBFileNameProperty.GetAttributes: TPropertyAttributes;
664     begin
665     Result := [paDialog];
666     end;
667    
668     { TIBNameProperty }
669    
670     function TIBNameProperty.GetAttributes: TPropertyAttributes;
671     begin
672     Result := [paValueList, paSortList];
673     end;
674    
675     { TIBStoredProcNameProperty }
676    
677     procedure TIBStoredProcNameProperty.GetValues(Proc: TGetStrProc);
678     var
679     StoredProc : TIBStoredProc;
680     i : integer;
681     begin
682     StoredProc := GetComponent(0) as TIBStoredProc;
683     if StoredProc.Database = nil then
684     Exit;
685    
686     with StoredProc do
687     try
688     for I := 0 to StoredProcedureNames.Count - 1 do
689     Proc (StoredProcedureNames[i]);
690     except on E: Exception do
691     MessageDlg(E.Message,mtError,[mbOK],0)
692     end;
693     end;
694    
695     { TIBTableNameProperty }
696    
697     procedure TIBTableNameProperty.GetValues(Proc: TGetStrProc);
698     var
699     Table : TIBTable;
700     i : integer;
701     begin
702     Table := GetComponent(0) as TIBTable;
703     if Table.Database = nil then
704     Exit;
705     with Table do
706     for I := 0 to TableNames.Count - 1 do
707     Proc (TableNames[i]);
708     end;
709    
710     { TDBStringProperty }
711    
712     function TDBStringProperty.ConnecttoDB: boolean;
713     var DataSet: TIBCustomDataSet;
714     begin
715     Result := false;
716     DataSet := (GetComponent(0) as TIBCustomDataSet);
717     if assigned(Dataset.Database) then
718     begin
719     try
720     DataSet.Database.Connected := true;
721     except on E: Exception do
722     ShowMessage(E.Message)
723     end;
724     Result := DataSet.Database.Connected
725     end;
726     end;
727    
728     function TDBStringProperty.GetAttributes: TPropertyAttributes;
729     begin
730     Result := [paValueList, paSortList, paMultiSelect];
731     end;
732    
733     procedure TDBStringProperty.GetValueList(List: TStrings);
734     begin
735     end;
736    
737     procedure TDBStringProperty.GetValues(Proc: TGetStrProc);
738     var
739     I: Integer;
740     Values: TStringList;
741     begin
742     if not ConnecttoDB then Exit;
743     Values := TStringList.Create;
744     try
745     GetValueList(Values);
746     for I := 0 to Values.Count - 1 do Proc(Values[I]);
747     finally
748     Values.Free;
749     end;
750     end;
751    
752     procedure TDBStringProperty.Edit;
753     begin
754     if ConnecttoDB then
755     inherited Edit;
756     end;
757    
758     { Utility Functions }
759    
760     function GetPropertyValue(Instance: TPersistent; const PropName: string): TPersistent;
761     var
762     PropInfo: PPropInfo;
763     begin
764     Result := nil;
765     PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, PropName);
766     if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
767     Result := TObject(GetOrdProp(Instance, PropInfo)) as TPersistent;
768     end;
769    
770     function GetIndexDefs(Component: TPersistent): TIndexDefs;
771     var
772     DataSet: TDataSet;
773     begin
774     DataSet := Component as TDataSet;
775     Result := GetPropertyValue(DataSet, 'IndexDefs') as TIndexDefs; {do not localize}
776     if Assigned(Result) then
777     begin
778     Result.Updated := False;
779     Result.Update;
780     end;
781     end;
782    
783     { TIBIndexFieldNamesProperty }
784    
785     procedure TIBIndexFieldNamesProperty.GetValueList(List: TStrings);
786     var
787     I: Integer;
788     IndexDefs: TIndexDefs;
789     begin
790     IndexDefs := GetIndexDefs(GetComponent(0));
791     for I := 0 to IndexDefs.Count - 1 do
792     with IndexDefs[I] do
793     if (Options * [ixExpression, ixDescending] = []) and (Fields <> '') then
794     List.Add(Fields);
795     end;
796    
797    
798     { TIBIndexNameProperty }
799    
800     procedure TIBIndexNameProperty.GetValueList(List: TStrings);
801     begin
802     GetIndexDefs(GetComponent(0)).GetItemNames(List);
803     end;
804    
805     { TSQLPropertyEditor }
806    
807     function TSQLPropertyEditor.GetAttributes: TPropertyAttributes;
808     begin
809     Result := inherited GetAttributes + [paDialog] - [paMultiSelect,paSubProperties];
810     end;
811    
812     { TIBQuerySQLProperty }
813    
814     procedure TIBQuerySQLProperty.Edit;
815     var
816     Query: TIBQuery;
817     begin
818     Query := GetComponent(0) as TIBQuery;
819     if IBSelectSQLEditor.EditSQL(Query,Query.SQL) then Modified;
820     end;
821    
822     { TIBDatasetSQLProperty }
823    
824     procedure TIBDatasetSQLProperty.Edit;
825     var
826     IBDataset: TIBDataset;
827     begin
828     IBDataset := GetComponent(0) as TIBDataset;
829     if IBSelectSQLEditor.EditSQL(IBDataSet,IBDataSet.SelectSQL) then Modified;
830     end;
831    
832     { TIBSQLProperty }
833    
834     procedure TIBSQLProperty.Edit;
835     var
836     IBSQL: TIBSQL;
837     begin
838     IBSQL := GetComponent(0) as TIBSQL;
839 tony 80 if IBSQLEditor.EditSQL(IBSQL) then Modified;
840 tony 33 end;
841    
842     { TIBUpdateSQLEditor }
843    
844     procedure TIBUpdateSQLEditor.ExecuteVerb(Index: Integer);
845     begin
846     if IBUpdateSQLEditor.EditIBUpdateSQL(TIBUpdateSQL(Component)) then Modified;
847     end;
848    
849     function TIBUpdateSQLEditor.GetVerb(Index: Integer): string;
850     begin
851     case Index of
852     0 : Result := SIBUpdateSQLEditor;
853 tony 45 1: Result := SInterbaseExpressVersion ;
854 tony 33 end;
855     end;
856    
857     function TIBUpdateSQLEditor.GetVerbCount: Integer;
858     begin
859     Result := 2;
860     end;
861    
862     { TIBDataSetEditor }
863    
864     procedure TIBDataSetEditor.ExecuteVerb(Index: Integer);
865     begin
866     if Index < inherited GetVerbCount then
867     inherited ExecuteVerb(Index) else
868     begin
869     Dec(Index, inherited GetVerbCount);
870     case Index of
871     0:
872     if IBDataSetEditor.EditIBDataSet(TIBDataSet(Component)) then
873     Designer.Modified;
874     1: (Component as TIBDataSet).ExecSQL;
875     end;
876     end;
877     end;
878    
879     function TIBDataSetEditor.GetVerb(Index: Integer): string;
880     begin
881     if Index < inherited GetVerbCount then
882     Result := inherited GetVerb(Index) else
883     begin
884     Dec(Index, inherited GetVerbCount);
885     case Index of
886     0: Result := SIBDataSetEditor;
887     1: Result := SExecute;
888 tony 45 2: Result := SInterbaseExpressVersion ;
889 tony 33 end;
890     end;
891     end;
892    
893     function TIBDataSetEditor.GetVerbCount: Integer;
894     begin
895     Result := inherited GetVerbCount + 3;
896     end;
897    
898     { TIBEventListProperty }
899    
900     function TIBEventListProperty.GetAttributes: TPropertyAttributes;
901     begin
902     Result := inherited GetAttributes + [paDialog] - [paMultiSelect,paSubProperties];
903     end;
904    
905     procedure TIBEventListProperty.Edit;
906     var
907     Events: TStrings;
908     IBEvents: TIBEvents;
909     begin
910     IBEvents := GetComponent(0) as TIBEvents;
911     Events := TStringList.Create;
912     try
913     Events.Assign( IBEvents.Events);
914     if EditAlerterEvents( Events) then
915     begin
916     IBEvents.Events.Assign(Events);
917     Modified
918     end;
919     finally
920     Events.Free;
921     end;
922     end;
923    
924     { TIBDatabaseEditor }
925     procedure TIBDatabaseEditor.ExecuteVerb(Index: Integer);
926     begin
927     if Index < inherited GetVerbCount then
928     inherited ExecuteVerb(Index) else
929     begin
930     Dec(Index, inherited GetVerbCount);
931     case Index of
932     0 : if EditIBDatabase(TIBDatabase(Component)) then Designer.Modified;
933     end;
934     end;
935     end;
936    
937     function TIBDatabaseEditor.GetVerb(Index: Integer): string;
938     begin
939     if Index < inherited GetVerbCount then
940     Result := inherited GetVerb(Index) else
941     begin
942     Dec(Index, inherited GetVerbCount);
943     case Index of
944     0: Result := SIBDatabaseEditor;
945 tony 45 1 : Result := SInterbaseExpressVersion ;
946 tony 33 end;
947     end;
948     end;
949    
950     function TIBDatabaseEditor.GetVerbCount: Integer;
951     begin
952     Result := inherited GetVerbCount + 2;
953     end;
954    
955     { TIBTransactionEditor }
956    
957     procedure TIBTransactionEditor.ExecuteVerb(Index: Integer);
958     begin
959     case Index of
960     0: if EditIBTransaction(TIBTransaction(Component)) then Designer.Modified;
961     end;
962     end;
963    
964     function TIBTransactionEditor.GetVerb(Index: Integer): string;
965     begin
966     case Index of
967     0: Result := SIBTransactionEditor;
968 tony 45 1: Result := SInterbaseExpressVersion ;
969 tony 33 end;
970     end;
971    
972     function TIBTransactionEditor.GetVerbCount: Integer;
973     begin
974     Result := 2;
975     end;
976    
977     { TIBQueryEditor }
978    
979     procedure TIBQueryEditor.ExecuteVerb(Index: Integer);
980     var
981     Query: TIBQuery;
982     begin
983     if Index < inherited GetVerbCount then
984     inherited ExecuteVerb(Index) else
985     begin
986     Query := Component as TIBQuery;
987     Dec(Index, inherited GetVerbCount);
988     case Index of
989     0: Query.ExecSQL;
990     1: if ibselectsqleditor.EditSQL(Query,Query.SQL) then Designer.Modified;
991     end;
992     end;
993     end;
994    
995     function TIBQueryEditor.GetVerb(Index: Integer): string;
996     begin
997     if Index < inherited GetVerbCount then
998     Result := inherited GetVerb(Index) else
999     begin
1000     Dec(Index, inherited GetVerbCount);
1001     case Index of
1002     0: Result := SExecute;
1003     1: Result := SEditSQL;
1004 tony 45 2: Result := SInterbaseExpressVersion ;
1005 tony 33 end;
1006     end;
1007     end;
1008    
1009     function TIBQueryEditor.GetVerbCount: Integer;
1010     begin
1011     Result := inherited GetVerbCount + 3;
1012     end;
1013    
1014     { TIBStoredProcEditor }
1015    
1016     procedure TIBStoredProcEditor.ExecuteVerb(Index: Integer);
1017     begin
1018     if Index < inherited GetVerbCount then
1019     inherited ExecuteVerb(Index) else
1020     begin
1021     Dec(Index, inherited GetVerbCount);
1022     if Index = 0 then (Component as TIBStoredProc).ExecProc;
1023     end;
1024     end;
1025    
1026     function TIBStoredProcEditor.GetVerb(Index: Integer): string;
1027     begin
1028     if Index < inherited GetVerbCount then
1029     Result := inherited GetVerb(Index) else
1030     begin
1031     Dec(Index, inherited GetVerbCount);
1032     case Index of
1033     0: Result := SExecute;
1034 tony 45 1: Result := SInterbaseExpressVersion ;
1035 tony 33 end;
1036     end;
1037     end;
1038    
1039     function TIBStoredProcEditor.GetVerbCount: Integer;
1040     begin
1041     Result := inherited GetVerbCount + 2;
1042     end;
1043    
1044     { TIBStoredProcParamsProperty }
1045    
1046     procedure TIBStoredProcParamsProperty.Edit;
1047     var
1048     StoredProc: TIBStoredProc;
1049     Params: TParams;
1050     begin
1051     StoredProc := (GetComponent(0) as TIBStoredProc);
1052     Params := TParams.Create(nil);
1053     try
1054     StoredProc.CopyParams(Params);
1055     finally
1056     Params.Free;
1057     end;
1058     inherited Edit;
1059     end;
1060    
1061     { TIBTableFieldLinkProperty }
1062    
1063     procedure TIBTableFieldLinkProperty.Edit;
1064     begin
1065     FTable := DataSet as TIBTable;
1066     if assigned(FTable.Database) then
1067     FTable.Database.Connected := true;
1068     inherited Edit;
1069     end;
1070    
1071     function TIBTableFieldLinkProperty.GetIndexDefs: TIndexDefs;
1072     begin
1073     Result := FTable.IndexDefs
1074     end;
1075    
1076     function TIBTableFieldLinkProperty.GetIndexFieldNames: string;
1077     begin
1078     Result := FTable.IndexFieldNames;
1079     end;
1080    
1081     function TIBTableFieldLinkProperty.GetMasterFields: string;
1082     begin
1083     Result := FTable.MasterFields;
1084     end;
1085    
1086     procedure TIBTableFieldLinkProperty.SetIndexFieldNames(const Value: string);
1087     begin
1088     FTable.IndexFieldNames := Value;
1089     end;
1090    
1091     procedure TIBTableFieldLinkProperty.SetMasterFields(const Value: string);
1092     begin
1093     FTable.MasterFields := Value;
1094     end;
1095    
1096     { TIBUpdateSQLProperty }
1097    
1098     procedure TIBUpdateSQLProperty.Edit;
1099     var
1100     IBDataset: TIBDataset;
1101     begin
1102     IBDataset := GetComponent(0) as TIBDataset;
1103     if IBModifySQLEditor.EditSQL(IBDataSet,IBDataSet.ModifySQL) then Modified;
1104     end;
1105    
1106     { TIBUpdateSQLUpdateProperty }
1107    
1108     procedure TIBUpdateSQLUpdateProperty.Edit;
1109     begin
1110     GetObjects;
1111     if IBModifySQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.ModifySQL) then Modified;
1112     end;
1113    
1114     { TIBRefreshSQLProperty }
1115    
1116     procedure TIBRefreshSQLProperty.Edit;
1117     var
1118     IBDataset: TIBDataset;
1119     begin
1120     IBDataset := GetComponent(0) as TIBDataset;
1121     if IBRefreshSQLEditor.EditSQL(IBDataSet,IBDataSet.RefreshSQL) then Modified;
1122     end;
1123    
1124     { TIBUpdateSQLRefreshSQLProperty }
1125    
1126     procedure TIBUpdateSQLRefreshSQLProperty.Edit;
1127     begin
1128     GetObjects;
1129     if IBRefreshSQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.RefreshSQL) then Modified;
1130     end;
1131    
1132     { TIBDeleteSQLProperty }
1133    
1134     procedure TIBDeleteSQLProperty.Edit;
1135     var
1136     IBDataset: TIBDataSet;
1137     begin
1138     IBDataset := GetComponent(0) as TIBDataSet;
1139     if IBDeleteSQLEditor.EditSQL(IBDataSet,IBDataSet.DeleteSQL) then Modified;
1140     end;
1141    
1142     { TIBUpdateSQLDeleteProperty }
1143    
1144     function TIBUpdateSQLDeleteProperty.GetAttributes: TPropertyAttributes;
1145     begin
1146     Result:=inherited GetAttributes;
1147     end;
1148    
1149     procedure TIBUpdateSQLDeleteProperty.Edit;
1150     begin
1151     GetObjects;
1152     if IBDeleteSQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.DeleteSQL) then Modified;
1153     end;
1154    
1155     { TUpdateSQLPropertyEditor }
1156    
1157     function TUpdateSQLPropertyEditor.GetObjects: boolean;
1158     begin
1159     Result := false;
1160     FIBUpdateSQL := GetComponent(0) as TIBUpdateSQL;
1161     if not assigned(FIBUpdateSQL) or not assigned(FIBUpdateSQL.DataSet) then
1162     Exit;
1163     FDatabase := nil;
1164     if FIBUpdateSQL.DataSet is TIBQuery then
1165     begin
1166     FDatabase := (FIBUpdateSQL.DataSet as TIBQuery).Database;
1167     Result := true
1168     end;
1169     end;
1170    
1171     { TIBInsertSQLProperty }
1172    
1173     procedure TIBInsertSQLProperty.Edit;
1174     var
1175     IBDataset: TIBDataSet;
1176     begin
1177     IBDataset := GetComponent(0) as TIBDataSet;
1178     if IBInsertSQLEditor.EditSQL(IBDataSet,IBDataSet.InsertSQL) then Modified;
1179     end;
1180    
1181     { TIBUpdateSQLInsertSQLProperty }
1182    
1183     procedure TIBUpdateSQLInsertSQLProperty.Edit;
1184     begin
1185     GetObjects;
1186     if IBInsertSQLEditor.EditSQL(FIBUpdateSQL.Dataset,FIBUpdateSQL.InsertSQL) then Modified;
1187     end;
1188    
1189     { TIBGeneratorProperty }
1190    
1191     function TIBGeneratorProperty.GetAttributes: TPropertyAttributes;
1192     begin
1193     Result:= inherited GetAttributes + [paDialog] - [paMultiSelect,paValueList];
1194     end;
1195    
1196     procedure TIBGeneratorProperty.Edit;
1197     begin
1198     if IBGeneratorEditor.EditGenerator(GetPersistentReference as TIBGenerator) then Modified;
1199     end;
1200    
1201     { TIBSQLEditor }
1202    
1203     procedure TIBSQLEditor.ExecuteVerb(Index: Integer);
1204     begin
1205 tony 80 if IBSQLEditor.EditSQL(TIBSQL(Component)) then Modified;
1206 tony 33 end;
1207    
1208     function TIBSQLEditor.GetVerb(Index: Integer): string;
1209     begin
1210     case Index of
1211     0 : Result := SIBSQLEditor;
1212 tony 45 1: Result := SInterbaseExpressVersion ;
1213 tony 33 end;
1214     end;
1215    
1216     function TIBSQLEditor.GetVerbCount: Integer;
1217     begin
1218     Result:= 2
1219     end;
1220    
1221     { TIBSQLSQLPropertyEditor }
1222    
1223     procedure TIBSQLSQLPropertyEditor.Edit;
1224     var
1225     IBSQL: TIBSQL;
1226     begin
1227     IBSQL := GetComponent(0) as TIBSQL;
1228 tony 80 if IBSQLEditor.EditSQL(IBSQL) then Modified;
1229 tony 33 end;
1230    
1231     initialization
1232     {$I IBDBReg.lrs}
1233     end.