ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/journaling/design/IBDBReg.pas
(Generate patch)

Comparing ibx/trunk/design/IBDBReg.pas (file contents):
Revision 17 by tony, Sat Dec 28 19:22:24 2013 UTC vs.
Revision 143 by tony, Fri Feb 23 12:11:21 2018 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines