mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 11:00:33 +02:00
IDE: fixup references when dropping a frame onto a form
git-svn-id: trunk@22260 -
This commit is contained in:
parent
2265922f51
commit
29ea3fdaa5
@ -1820,8 +1820,12 @@ var
|
|||||||
ParentCI,NewComponentClass,'',
|
ParentCI,NewComponentClass,'',
|
||||||
NewLeft,NewTop,NewWidth,NewHeight));
|
NewLeft,NewTop,NewWidth,NewHeight));
|
||||||
if NewCI=nil then exit;
|
if NewCI=nil then exit;
|
||||||
Modified;
|
|
||||||
NewComponent:=NewCI.Component;
|
NewComponent:=NewCI.Component;
|
||||||
|
TheFormEditor.FixupReferences(NewComponent); // e.g. frame references a datamodule
|
||||||
|
|
||||||
|
// modified
|
||||||
|
Modified;
|
||||||
|
|
||||||
|
|
||||||
// set initial properties
|
// set initial properties
|
||||||
if NewComponent is TControl then begin
|
if NewComponent is TControl then begin
|
||||||
|
@ -1772,7 +1772,7 @@ end;
|
|||||||
procedure TJITComponentList.ReaderReferenceName(Reader: TReader;
|
procedure TJITComponentList.ReaderReferenceName(Reader: TReader;
|
||||||
var RefName: Ansistring);
|
var RefName: Ansistring);
|
||||||
begin
|
begin
|
||||||
// debugln('[TJITComponentList.ReaderReferenceName] Name='''+RefName+'''');
|
debugln('[TJITComponentList.ReaderReferenceName] Name='''+RefName+'''');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TJITComponentList.ReaderAncestorNotFound(Reader: TReader;
|
procedure TJITComponentList.ReaderAncestorNotFound(Reader: TReader;
|
||||||
|
@ -45,7 +45,7 @@ uses
|
|||||||
// IDEIntf
|
// IDEIntf
|
||||||
PropEdits, ObjectInspector, IDECommands, FormEditingIntf,
|
PropEdits, ObjectInspector, IDECommands, FormEditingIntf,
|
||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, Project, JITForms,
|
LazarusIDEStrConsts, Project, JITForms, MainIntf,
|
||||||
CustomNonFormDesigner, NonControlDesigner, FrameDesigner,
|
CustomNonFormDesigner, NonControlDesigner, FrameDesigner,
|
||||||
ComponentReg, IDEProcs, ComponentEditors, KeyMapping, EditorOptions,
|
ComponentReg, IDEProcs, ComponentEditors, KeyMapping, EditorOptions,
|
||||||
EnvironmentOpts, DesignerProcs;
|
EnvironmentOpts, DesignerProcs;
|
||||||
@ -270,6 +270,7 @@ 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;
|
||||||
|
function FixupReferences(AComponent: TComponent): TModalResult;
|
||||||
procedure WriterFindAncestor(Writer: TWriter; Component: TComponent;
|
procedure WriterFindAncestor(Writer: TWriter; Component: TComponent;
|
||||||
const Name: string;
|
const Name: string;
|
||||||
var Ancestor, RootAncestor: TComponent);
|
var Ancestor, RootAncestor: TComponent);
|
||||||
@ -1909,6 +1910,11 @@ begin
|
|||||||
Result:=CreateComponentInterface(NewComponent,true);
|
Result:=CreateComponentInterface(NewComponent,true);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomFormEditor.FixupReferences(AComponent: TComponent): TModalResult;
|
||||||
|
begin
|
||||||
|
Result:=MainIDEInterface.DoFixupComponentReferences(AComponent,[]);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomFormEditor.WriterFindAncestor(Writer: TWriter;
|
procedure TCustomFormEditor.WriterFindAncestor(Writer: TWriter;
|
||||||
Component: TComponent; const Name: string; var Ancestor,
|
Component: TComponent; const Name: string; var Ancestor,
|
||||||
RootAncestor: TComponent);
|
RootAncestor: TComponent);
|
||||||
|
33
ide/main.pp
33
ide/main.pp
@ -639,8 +639,9 @@ type
|
|||||||
function FindBaseComponentClass(const AComponentClassName,
|
function FindBaseComponentClass(const AComponentClassName,
|
||||||
DescendantClassName: string;
|
DescendantClassName: string;
|
||||||
out AComponentClass: TComponentClass): boolean;
|
out AComponentClass: TComponentClass): boolean;
|
||||||
function DoFixupComponentReferences(AnUnitInfo: TUnitInfo;
|
function DoFixupComponentReferences(
|
||||||
OpenFlags: TOpenFlags): TModalResult;
|
RootComponent: TComponent;
|
||||||
|
OpenFlags: TOpenFlags): TModalResult; override;
|
||||||
function DoLoadAncestorDependencyHidden(AnUnitInfo: TUnitInfo;
|
function DoLoadAncestorDependencyHidden(AnUnitInfo: TUnitInfo;
|
||||||
const DescendantClassName: string;
|
const DescendantClassName: string;
|
||||||
OpenFlags: TOpenFlags;
|
OpenFlags: TOpenFlags;
|
||||||
@ -5744,7 +5745,7 @@ begin
|
|||||||
AnUnitInfo.AddRequiresComponentDependency(AncestorUnitInfo,[ucdtAncestor]);
|
AnUnitInfo.AddRequiresComponentDependency(AncestorUnitInfo,[ucdtAncestor]);
|
||||||
if NewComponent<>nil then begin
|
if NewComponent<>nil then begin
|
||||||
// component loaded, now load the referenced units
|
// component loaded, now load the referenced units
|
||||||
Result:=DoFixupComponentReferences(AnUnitInfo,OpenFlags);
|
Result:=DoFixupComponentReferences(AnUnitInfo.Component,OpenFlags);
|
||||||
if Result<>mrOk then begin
|
if Result<>mrOk then begin
|
||||||
DebugLn(['TMainIDE.DoLoadLFM DoFixupComponentReferences failed']);
|
DebugLn(['TMainIDE.DoLoadLFM DoFixupComponentReferences failed']);
|
||||||
exit;
|
exit;
|
||||||
@ -5856,10 +5857,10 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TMainIDE.DoFixupComponentReferences(AnUnitInfo: TUnitInfo;
|
function TMainIDE.DoFixupComponentReferences(
|
||||||
OpenFlags: TOpenFlags): TModalResult;
|
RootComponent: TComponent; OpenFlags: TOpenFlags): TModalResult;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
AnUnitInfo: TUnitInfo;
|
||||||
UsedUnitFilenames: TStrings;
|
UsedUnitFilenames: TStrings;
|
||||||
ComponentNameToUnitFilename: TStringList;
|
ComponentNameToUnitFilename: TStringList;
|
||||||
|
|
||||||
@ -5984,21 +5985,25 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
RefRootName: string;
|
RefRootName: string;
|
||||||
begin
|
begin
|
||||||
CurRoot:=AnUnitInfo.Component;
|
CurRoot:=RootComponent;
|
||||||
if CurRoot=nil then exit(mrOk);
|
while CurRoot.Owner<>nil do
|
||||||
|
CurRoot:=CurRoot.Owner;
|
||||||
|
AnUnitInfo:=Project1.UnitWithComponent(CurRoot);
|
||||||
|
if AnUnitInfo=nil then exit(mrOk);
|
||||||
|
|
||||||
UsedUnitFilenames:=nil;
|
UsedUnitFilenames:=nil;
|
||||||
ComponentNameToUnitFilename:=nil;
|
ComponentNameToUnitFilename:=nil;
|
||||||
ReferenceRootNames:=TStringList.Create;
|
ReferenceRootNames:=TStringList.Create;
|
||||||
ReferenceInstanceNames:=TStringList.Create;
|
ReferenceInstanceNames:=TStringList.Create;
|
||||||
try
|
try
|
||||||
GetFixupReferenceNames(CurRoot,ReferenceRootNames);
|
GetFixupReferenceNames(RootComponent,ReferenceRootNames);
|
||||||
Result:=mrOk;
|
Result:=mrOk;
|
||||||
for i:=0 to ReferenceRootNames.Count-1 do begin
|
for i:=0 to ReferenceRootNames.Count-1 do begin
|
||||||
RefRootName:=ReferenceRootNames[i];
|
RefRootName:=ReferenceRootNames[i];
|
||||||
ReferenceInstanceNames.Clear;
|
ReferenceInstanceNames.Clear;
|
||||||
GetFixupInstanceNames(CurRoot,RefRootName,ReferenceInstanceNames);
|
GetFixupInstanceNames(RootComponent,RefRootName,ReferenceInstanceNames);
|
||||||
|
|
||||||
DebugLn(['TMainIDE.DoFixupComponentReferences BEFORE loading ',i,' ',dbgsName(CurRoot),' RefRoot=',RefRootName,' Refs="',Trim(ReferenceInstanceNames.Text),'"']);
|
DebugLn(['TMainIDE.DoFixupComponentReferences BEFORE loading ',i,' Root=',dbgsName(RootComponent),' RefRoot=',RefRootName,' Refs="',Trim(ReferenceInstanceNames.Text),'"']);
|
||||||
|
|
||||||
// load the referenced component
|
// load the referenced component
|
||||||
Result:=LoadDependencyHidden(RefRootName);
|
Result:=LoadDependencyHidden(RefRootName);
|
||||||
@ -6013,11 +6018,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
ReferenceInstanceNames.Clear;
|
ReferenceInstanceNames.Clear;
|
||||||
GetFixupInstanceNames(CurRoot,RefRootName,ReferenceInstanceNames);
|
GetFixupInstanceNames(RootComponent,RefRootName,ReferenceInstanceNames);
|
||||||
DebugLn(['TMainIDE.DoFixupComponentReferences AFTER loading ',i,' ',dbgsName(CurRoot),' RefRoot=',RefRootName,' Refs="',Trim(ReferenceInstanceNames.Text),'"']);
|
DebugLn(['TMainIDE.DoFixupComponentReferences AFTER loading ',i,' ',dbgsName(RootComponent),' RefRoot=',RefRootName,' Refs="',Trim(ReferenceInstanceNames.Text),'"']);
|
||||||
|
|
||||||
// forget the rest of the dangling references
|
// forget the rest of the dangling references
|
||||||
RemoveFixupReferences(CurRoot,RefRootName);
|
RemoveFixupReferences(RootComponent,RefRootName);
|
||||||
|
|
||||||
if Result<>mrOk then begin
|
if Result<>mrOk then begin
|
||||||
// ToDo: give a nice error message and give user the choice between
|
// ToDo: give a nice error message and give user the choice between
|
||||||
|
@ -161,6 +161,9 @@ type
|
|||||||
const SrcDirectory, DestDirectory: string
|
const SrcDirectory, DestDirectory: string
|
||||||
): TModalResult; virtual; abstract;
|
): TModalResult; virtual; abstract;
|
||||||
|
|
||||||
|
function DoFixupComponentReferences(RootComponent: TComponent;
|
||||||
|
OpenFlags: TOpenFlags): TModalResult; virtual; abstract;
|
||||||
|
|
||||||
procedure UpdateWindowMenu; virtual; abstract;
|
procedure UpdateWindowMenu; virtual; abstract;
|
||||||
procedure SaveEnvironment; virtual; abstract;
|
procedure SaveEnvironment; virtual; abstract;
|
||||||
procedure UpdateHighlighters(Immediately: boolean = false); virtual; abstract;
|
procedure UpdateHighlighters(Immediately: boolean = false); virtual; abstract;
|
||||||
|
Loading…
Reference in New Issue
Block a user