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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines