mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-02 12:36:12 +02:00
IDE: designer: implemented generic function for TWriter to find stream ancestor
git-svn-id: trunk@15240 -
This commit is contained in:
parent
5d3ba0fc54
commit
3b6486fbbb
@ -246,10 +246,13 @@ each control that's dropped onto the form
|
|||||||
function CreateChildComponentFromStream(BinStream: TStream;
|
function CreateChildComponentFromStream(BinStream: TStream;
|
||||||
ComponentClass: TComponentClass; Root: TComponent;
|
ComponentClass: TComponentClass; Root: TComponent;
|
||||||
ParentControl: TWinControl): TIComponentInterface; override;
|
ParentControl: TWinControl): TIComponentInterface; override;
|
||||||
|
procedure WriterFindAncestor(Writer: TWriter; Component: TComponent;
|
||||||
|
const Name: string;
|
||||||
|
var Ancestor, RootAncestor: TComponent);
|
||||||
procedure SetComponentNameAndClass(CI: TIComponentInterface;
|
procedure SetComponentNameAndClass(CI: TIComponentInterface;
|
||||||
const NewName, NewClassName: shortstring);
|
const NewName, NewClassName: shortstring);
|
||||||
function GetDescendantTypeClass(TypeClass: TComponentClass): TComponentClass;
|
function GetDescendantTypeClass(TypeClass: TComponentClass): TComponentClass;
|
||||||
|
|
||||||
// ancestors
|
// ancestors
|
||||||
function GetAncestorLookupRoot(AComponent: TComponent): TComponent; override;
|
function GetAncestorLookupRoot(AComponent: TComponent): TComponent; override;
|
||||||
function GetAncestorInstance(AComponent: TComponent): TComponent; override;
|
function GetAncestorInstance(AComponent: TComponent): TComponent; override;
|
||||||
@ -1355,11 +1358,8 @@ begin
|
|||||||
try
|
try
|
||||||
BinCompStream.Position:=0;
|
BinCompStream.Position:=0;
|
||||||
Writer:=CreateLRSWriter(BinCompStream,DestroyDriver);
|
Writer:=CreateLRSWriter(BinCompStream,DestroyDriver);
|
||||||
AncestorUnitInfo:=AnUnitInfo.FindAncestorUnit;
|
Writer.OnFindAncestor:=@WriterFindAncestor;
|
||||||
Ancestor:=nil;
|
Writer.WriteDescendent(AnUnitInfo.Component,nil);
|
||||||
if AncestorUnitInfo<>nil then
|
|
||||||
Ancestor:=AncestorUnitInfo.Component;
|
|
||||||
Writer.WriteDescendent(AnUnitInfo.Component,Ancestor);
|
|
||||||
if DestroyDriver then Writer.Driver.Free;
|
if DestroyDriver then Writer.Driver.Free;
|
||||||
FreeAndNil(Writer);
|
FreeAndNil(Writer);
|
||||||
AnUnitInfo.ComponentLastBinStreamSize:=BinCompStream.Size;
|
AnUnitInfo.ComponentLastBinStreamSize:=BinCompStream.Size;
|
||||||
@ -1728,6 +1728,30 @@ begin
|
|||||||
Result:=CreateComponentInterface(NewComponent,true);
|
Result:=CreateComponentInterface(NewComponent,true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomFormEditor.WriterFindAncestor(Writer: TWriter;
|
||||||
|
Component: TComponent; const Name: string; var Ancestor,
|
||||||
|
RootAncestor: TComponent);
|
||||||
|
// Note: TWriter wants the stream ancestor, which is not always the class ancestor
|
||||||
|
var
|
||||||
|
AnUnitInfo: TUnitInfo;
|
||||||
|
begin
|
||||||
|
//DebugLn(['TCustomFormEditor.WriterFindAncestor START ',DbgSName(Component)]);
|
||||||
|
AnUnitInfo:=Project1.UnitWithComponentClass(TComponentClass(Component.ClassType));
|
||||||
|
if (AnUnitInfo<>nil) then begin
|
||||||
|
if (AnUnitInfo.Component=Component) then begin
|
||||||
|
// Component is a root component (e.g. not nested, inline)
|
||||||
|
// the stream ancestor is the component of the ClassParent
|
||||||
|
AnUnitInfo:=AnUnitInfo.FindAncestorUnit;
|
||||||
|
end else begin
|
||||||
|
// Component is a nested, inline component
|
||||||
|
// the stream ancestor is the component of the class
|
||||||
|
end;
|
||||||
|
if (AnUnitInfo<>nil) and (AnUnitInfo.Component<>nil) then
|
||||||
|
Ancestor:=AnUnitInfo.Component;
|
||||||
|
DebugLn(['TCustomFormEditor.WriterFindAncestor Component=',DbgSName(Component),' Ancestor=',DbgSName(Ancestor)]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomFormEditor.SetComponentNameAndClass(CI: TIComponentInterface;
|
procedure TCustomFormEditor.SetComponentNameAndClass(CI: TIComponentInterface;
|
||||||
const NewName, NewClassName: shortstring);
|
const NewName, NewClassName: shortstring);
|
||||||
var
|
var
|
||||||
|
10
ide/main.pp
10
ide/main.pp
@ -4648,8 +4648,6 @@ var
|
|||||||
CompResourceCode, LFMFilename, TestFilename, ResTestFilename: string;
|
CompResourceCode, LFMFilename, TestFilename, ResTestFilename: string;
|
||||||
UnitSaveFilename: String;
|
UnitSaveFilename: String;
|
||||||
ADesigner: TDesigner;
|
ADesigner: TDesigner;
|
||||||
AncestorUnit: TUnitInfo;
|
|
||||||
AncestorInstance: TComponent;
|
|
||||||
Grubber: TLRTGrubber;
|
Grubber: TLRTGrubber;
|
||||||
LRTFilename: String;
|
LRTFilename: String;
|
||||||
begin
|
begin
|
||||||
@ -4699,13 +4697,9 @@ begin
|
|||||||
{$IFNDEF DisableFakeMethods}
|
{$IFNDEF DisableFakeMethods}
|
||||||
Writer.OnWriteMethodProperty:=@FormEditor1.WriteMethodPropertyEvent;
|
Writer.OnWriteMethodProperty:=@FormEditor1.WriteMethodPropertyEvent;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
AncestorUnit:=GetAncestorUnit(AnUnitInfo);
|
|
||||||
if AncestorUnit<>nil then
|
|
||||||
AncestorInstance:=AncestorUnit.Component
|
|
||||||
else
|
|
||||||
AncestorInstance:=nil;
|
|
||||||
//DebugLn(['TMainIDE.DoSaveUnitComponent AncestorInstance=',dbgsName(AncestorInstance)]);
|
//DebugLn(['TMainIDE.DoSaveUnitComponent AncestorInstance=',dbgsName(AncestorInstance)]);
|
||||||
Writer.WriteDescendent(AnUnitInfo.Component,AncestorInstance);
|
Writer.OnFindAncestor:=@FormEditor1.WriterFindAncestor;
|
||||||
|
Writer.WriteDescendent(AnUnitInfo.Component,nil);
|
||||||
if DestroyDriver then Writer.Driver.Free;
|
if DestroyDriver then Writer.Driver.Free;
|
||||||
FreeAndNil(Writer);
|
FreeAndNil(Writer);
|
||||||
AnUnitInfo.ComponentLastBinStreamSize:=BinCompStream.Size;
|
AnUnitInfo.ComponentLastBinStreamSize:=BinCompStream.Size;
|
||||||
|
Loading…
Reference in New Issue
Block a user