From 185cecd04e211bc81af27bb7485e0956446e8f61 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 2 Dec 2006 17:43:44 +0000 Subject: [PATCH] IDE: when adding designer form child names to source, consider ancestor git-svn-id: trunk@10279 - --- components/codetools/codetoolmanager.pas | 11 ++++++----- components/codetools/eventcodetool.pas | 7 +++++-- ide/main.pp | 19 +++++++++++++++++-- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/components/codetools/codetoolmanager.pas b/components/codetools/codetoolmanager.pas index 0d9cf635b2..51472086cb 100644 --- a/components/codetools/codetoolmanager.pas +++ b/components/codetools/codetoolmanager.pas @@ -527,8 +527,8 @@ type var AncestorClassName: string; DirtySearch: boolean): boolean; // form components - function CompleteComponent(Code: TCodeBuffer; AComponent: TComponent - ): boolean; + function CompleteComponent(Code: TCodeBuffer; + AComponent, AncestorComponent: TComponent): boolean; function PublishedVariableExists(Code: TCodeBuffer; const AClassName, AVarName: string; ErrorOnClassNotFound: boolean): boolean; @@ -3511,15 +3511,16 @@ begin end; function TCodeToolManager.CompleteComponent(Code: TCodeBuffer; - AComponent: TComponent): boolean; + AComponent, AncestorComponent: TComponent): boolean; begin Result:=false; {$IFDEF CTDEBUG} - DebugLn('TCodeToolManager.CompleteComponent A ',Code.Filename,' ',AComponent.Name,':',AComponent.ClassName); + DebugLn('TCodeToolManager.CompleteComponent A ',Code.Filename,' ',AComponent.Name,':',AComponent.ClassName,' ',dbgsName(AncestorComponent)); {$ENDIF} if not InitCurCodeTool(Code) then exit; try - Result:=FCurCodeTool.CompleteComponent(AComponent,SourceChangeCache); + Result:=FCurCodeTool.CompleteComponent(AComponent,AncestorComponent, + SourceChangeCache); except on e: Exception do Result:=HandleException(e); end; diff --git a/components/codetools/eventcodetool.pas b/components/codetools/eventcodetool.pas index 661fb60567..616546dd38 100644 --- a/components/codetools/eventcodetool.pas +++ b/components/codetools/eventcodetool.pas @@ -61,7 +61,7 @@ type function CollectPublishedMethods(Params: TFindDeclarationParams; const FoundContext: TFindContext): TIdentifierFoundResult; public - function CompleteComponent(AComponent: TComponent; + function CompleteComponent(AComponent, AncestorComponent: TComponent; SourceChangeCache: TSourceChangeCache): boolean; function GetCompatiblePublishedMethods(const UpperClassName: string; @@ -831,7 +831,8 @@ begin Result:=ifrProceedSearch; end; -function TEventsCodeTool.CompleteComponent(AComponent: TComponent; +function TEventsCodeTool.CompleteComponent(AComponent, + AncestorComponent: TComponent; SourceChangeCache: TSourceChangeCache): boolean; { - Adds all missing published variable declarations to the class definition in the source @@ -861,6 +862,8 @@ begin DebugLn('[TEventsCodeTool.CompleteComponent] CurComponent=',CurComponent.Name,':',CurComponent.ClassName); VarName:=CurComponent.Name; if VarName='' then continue; + if (AncestorComponent<>nil) + and (AncestorComponent.FindComponent(VarName)<>nil) then continue; UpperCurComponentName:=UpperCaseStr(VarName); VarType:=CurComponent.ClassName; // add missing published variable diff --git a/ide/main.pp b/ide/main.pp index 989ed808f7..52a59ffe56 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -596,7 +596,6 @@ type Flags: TCloseFlags): TModalResult; function UnitComponentIsUsed(AnUnitInfo: TUnitInfo; CheckHasDesigner: boolean): boolean; - function GetAncestorUnit(AnUnitInfo: TUnitInfo): TUnitInfo; // methods for creating a project function CreateProjectObject(ProjectDesc, @@ -748,6 +747,8 @@ type function GetSourceEditorForUnitInfo(AnUnitInfo: TUnitInfo): TSourceEditor; override; function CreateSrcEditPageName(const AnUnitName, AFilename: string; IgnorePageIndex: integer): string; + function GetAncestorUnit(AnUnitInfo: TUnitInfo): TUnitInfo; + function GetAncestorLookupRoot(AnUnitInfo: TUnitInfo): TComponent; // useful file methods function FindUnitFile(const AFilename: string): string; override; @@ -5305,6 +5306,17 @@ begin Result:=AnUnitInfo.FindAncestorUnit; end; +function TMainIDE.GetAncestorLookupRoot(AnUnitInfo: TUnitInfo): TComponent; +var + AncestorUnit: TUnitInfo; +begin + AncestorUnit:=GetAncestorUnit(AnUnitInfo); + if AncestorUnit<>nil then + Result:=AncestorUnit.Component + else + Result:=nil; +end; + function TMainIDE.CreateProjectObject(ProjectDesc, FallbackProjectDesc: TProjectDescriptor): TProject; begin @@ -12436,6 +12448,7 @@ var AComponent: TComponent; ActiveSrcEdit: TSourceEditor; ActiveUnitInfo: TUnitInfo; + Ancestor: TComponent; begin DebugLn('TMainIDE.OnPropHookPersistentAdded A ',dbgsName(APersistent)); ADesigner:=nil; @@ -12480,7 +12493,9 @@ begin ActiveUnitInfo.Modified:=true; // add component definitions to form source - CodeToolBoss.CompleteComponent(ActiveUnitInfo.Source,ADesigner.LookupRoot); + Ancestor:=GetAncestorLookupRoot(ActiveUnitInfo); + CodeToolBoss.CompleteComponent(ActiveUnitInfo.Source,ADesigner.LookupRoot, + Ancestor); end; ObjectInspector1.FillPersistentComboBox;