git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SDAC@3 6f543ec7-021b-7e4c-98c9-62eafc7fb9a8
251 lines
5.7 KiB
ObjectPascal
251 lines
5.7 KiB
ObjectPascal
|
|
//////////////////////////////////////////////////
|
|
// Data Access Components
|
|
// Copyright © 1998-2005 Core Lab. All right reserved.
|
|
// Tab Editor
|
|
//////////////////////////////////////////////////
|
|
|
|
{$IFNDEF CLR}
|
|
|
|
{$I Dac.inc}
|
|
|
|
unit CRTabEditor;
|
|
{$ENDIF}
|
|
interface
|
|
uses
|
|
{$IFDEF MSWINDOWS}
|
|
Windows, Messages, Graphics, Controls, Forms, Dialogs,
|
|
ComCtrls, StdCtrls, ExtCtrls, Buttons,
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
Types, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
|
|
QExtCtrls, QComCtrls, QButtons,
|
|
{$ENDIF}
|
|
{$IFDEF DBTOOLS}
|
|
DBToolsClient,
|
|
{$ENDIF}
|
|
SysUtils, Classes,
|
|
CREditor, CRFrame, DADesignUtils, MemData;
|
|
|
|
type
|
|
TCRTabEditorForm = class(TCREditorForm)
|
|
PageControl: TPageControl;
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure PageControlChange(Sender: TObject);
|
|
procedure PageControlChanging(Sender: TObject;
|
|
var AllowChange: Boolean);
|
|
|
|
protected
|
|
FFramesList: TList;
|
|
|
|
{$IFDEF LINUX}
|
|
procedure DoInit; override;
|
|
procedure DoActivate; override;
|
|
{$ENDIF}
|
|
{$IFDEF DBTOOLS}
|
|
procedure ExitActiveControl; override;
|
|
{$ENDIF}
|
|
procedure SaveControlData; override;
|
|
|
|
function AddTab(FrameClass: TCRFrameClass; Page: TTabSheet): TCRFrame;
|
|
|
|
function GetFrameByInitProp: TCRFrame; virtual;
|
|
|
|
function GetModified: boolean; override;
|
|
procedure SetModified(Value: boolean); override;
|
|
|
|
function GetActiveFrame: TCRFrame;
|
|
|
|
// Avoid Kylix bug
|
|
procedure DoPageControlChange(Sender: TObject); virtual;
|
|
procedure DoPageControlChanging(Sender: TObject; var AllowChange: Boolean); virtual;
|
|
public
|
|
constructor Create(Owner: TComponent; DADesignUtilsClass: TDADesignUtilsClass); override;
|
|
procedure ActivateFrame(Frame: TCRFrame);
|
|
|
|
property ActiveFrame: TCRFrame read GetActiveFrame;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$IFDEF IDE}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
{$IFDEF MSWINDOWS}
|
|
{$R CRTabEditor.dfm}
|
|
{$ENDIF}
|
|
{$IFDEF LINUX}
|
|
{$R *.xfm}
|
|
{$ENDIF}
|
|
|
|
{ TCRTabEditorForm }
|
|
|
|
{
|
|
procedure TCRTabEditorForm.CreateFrames;
|
|
begin
|
|
Assert(False, 'Must be overriden - D8 bug');
|
|
end;
|
|
}
|
|
|
|
{$IFDEF LINUX}
|
|
procedure TCRTabEditorForm.DoInit;
|
|
begin
|
|
inherited;
|
|
|
|
PageControl.OnChange := nil;
|
|
PageControl.OnChanging := nil;
|
|
PageControl.ActivePageIndex := 0;
|
|
PageControl.OnChange := PageControlChange;
|
|
PageControl.OnChanging := PageControlChanging;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.DoActivate;
|
|
var
|
|
ActiveFrame: TCRFrame;
|
|
begin
|
|
inherited;
|
|
|
|
// on Windows frame is activated from PageControlChange method
|
|
ActiveFrame := GetActiveFrame;
|
|
if ActiveFrame <> nil then
|
|
ActiveFrame.Activate;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF DBTOOLS}
|
|
procedure TCRTabEditorForm.ExitActiveControl;
|
|
begin
|
|
DBTools.CheckDBToolsChanges(GetActiveFrame);
|
|
inherited;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
procedure TCRTabEditorForm.SaveControlData;
|
|
var
|
|
ActiveFrame: TCRFrame;
|
|
begin
|
|
ActiveFrame := GetActiveFrame;
|
|
if ActiveFrame <> nil then
|
|
ActiveFrame.Finish;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
function TCRTabEditorForm.AddTab(FrameClass: TCRFrameClass; Page: TTabSheet): TCRFrame;
|
|
begin
|
|
Result := FrameClass.Create(Self);
|
|
Result.Parent := Page;
|
|
Result.Align := alClient;
|
|
Result.Name := Page.Name + FrameClass.ClassName;
|
|
Result.Editor := Self;
|
|
|
|
FFramesList.Add(Result);
|
|
end;
|
|
|
|
function TCRTabEditorForm.GetModified: boolean;
|
|
var
|
|
i :integer;
|
|
begin
|
|
Result := inherited GetModified;
|
|
for i := 0 to FFramesList.Count - 1 do
|
|
Result := Result or TCRFrame(FFramesList[i]).Modified;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.SetModified(Value: boolean);
|
|
var
|
|
i :integer;
|
|
begin
|
|
inherited;
|
|
for i := 0 to FFramesList.Count - 1 do
|
|
TCRFrame(FFramesList[i]).Modified := Value;
|
|
end;
|
|
|
|
constructor TCRTabEditorForm.Create(Owner: TComponent; DADesignUtilsClass: TDADesignUtilsClass);
|
|
begin
|
|
FFramesList := TList.Create;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
FFramesList.Free;
|
|
end;
|
|
|
|
function TCRTabEditorForm.GetActiveFrame: TCRFrame;
|
|
var
|
|
i: integer;
|
|
begin
|
|
for i := 0 to FFramesList.Count - 1 do
|
|
if TCRFrame(FFramesList[i]).Page = PageControl.ActivePage then begin
|
|
Result := TCRFrame(FFramesList[i]);
|
|
Exit;
|
|
end;
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.ActivateFrame(Frame: TCRFrame);
|
|
var
|
|
ActiveFrame: TCRFrame;
|
|
begin
|
|
ActiveFrame := GetActiveFrame;
|
|
if ActiveFrame <> nil then
|
|
ActiveFrame.Finish;
|
|
|
|
if Frame.Page <> PageControl.ActivePage then
|
|
PageControl.ActivePage := Frame.Page;
|
|
Frame.Activate;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.DoPageControlChange(Sender: TObject);
|
|
var
|
|
ActiveFrame: TCRFrame;
|
|
begin
|
|
ActiveFrame := GetActiveFrame;
|
|
if ActiveFrame <> nil then
|
|
ActiveFrame.Activate;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.PageControlChange(Sender: TObject);
|
|
begin
|
|
DoPageControlChange(Sender);
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.DoPageControlChanging(Sender: TObject; var AllowChange: Boolean);
|
|
var
|
|
ActiveFrame: TCRFrame;
|
|
begin
|
|
try
|
|
ActiveFrame := GetActiveFrame;
|
|
if ActiveFrame <> nil then
|
|
ActiveFrame.Finish;
|
|
except
|
|
on E: Exception do begin
|
|
AllowChange := False;
|
|
ApplicationHandleException(E);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCRTabEditorForm.PageControlChanging(Sender: TObject; var AllowChange: Boolean);
|
|
begin
|
|
DoPageControlChanging(Sender, AllowChange);
|
|
end;
|
|
|
|
function TCRTabEditorForm.GetFrameByInitProp: TCRFrame;
|
|
var
|
|
i :integer;
|
|
begin
|
|
Result := nil;
|
|
if InitialProperty <> '' then begin
|
|
for i := 0 to FFramesList.Count - 1 do
|
|
if TCRFrame(FFramesList[i]).Page.Caption = InitialProperty then begin
|
|
Result := TCRFrame(FFramesList[i]);
|
|
Break;
|
|
end;
|
|
Assert(Result <> nil, 'Unknown frame ' + InitialProperty);
|
|
end;
|
|
end;
|
|
|
|
end.
|