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