registered TStrings.Strings as define property

git-svn-id: trunk@8400 -
This commit is contained in:
mattias 2005-12-31 13:45:27 +00:00
parent f37495ee05
commit d36315c0c6

View File

@ -118,7 +118,10 @@ each control that's dropped onto the form
FSelection: TPersistentSelectionList;
FObj_Inspector: TObjectInspector;
FDefineProperties: TAVLTree;
FStandardDefinePropertiesRegistered: Boolean;
function GetPropertyEditorHook: TPropertyEditorHook;
function FindDefinePropertyNode(const APersistentClassName: string
): TAVLTreeNode;
protected
FNonControlForms: TAVLTree; // tree of TNonControlDesignerForm sorted for LookupRoot
procedure SetSelection(const ASelection: TPersistentSelectionList);
@ -212,6 +215,9 @@ each control that's dropped onto the form
procedure FindDefineProperty(const APersistentClassName,
AncestorClassName, Identifier: string;
var IsDefined: boolean);
procedure RegisterDefineProperty(const APersistentClassName,
Identifier: string);
procedure RegisterStandardDefineProperties;
// keys
function TranslateKeyToDesignerCommand(Key: word; Shift: TShiftState): word;
@ -254,7 +260,8 @@ each control that's dropped onto the form
end;
{ TDefinePropertiesPersistent }
{ TDefinePropertiesPersistent
Wrapper class, to call the protected method 'DefineProperties' }
TDefinePropertiesPersistent = class(TPersistent)
private
@ -274,7 +281,6 @@ function ComparePersClassNameAndDefPropCacheItem(Key: Pointer;
Item: TDefinePropertiesCacheItem): integer;
procedure RegisterStandardClasses;
implementation
@ -312,7 +318,7 @@ end;
procedure RegisterStandardClasses;
begin
RegisterClasses([TStrings]);
RegisterClasses([TStringList]);
end;
{ TComponentInterface }
@ -866,7 +872,7 @@ Begin
ANode:=FComponentInterfaces.FindLowest;
while ANode<>nil do begin
Result := TIComponentInterface(ANode.Data);
if AnsiCompareText(TComponentInterface(Result).Component.Name,Name)=0 then
if CompareText(TComponentInterface(Result).Component.Name,Name)=0 then
exit;
ANode:=FComponentInterfaces.FindSuccessor(ANode);
end;
@ -1544,21 +1550,18 @@ var
if (APersistent=nil) and (CompareText(AClassName,'TForm')=0) then begin
if not CreateTempPersistent(TForm) then exit;
end;
Result:=true;
end;
begin
//debugln('TCustomFormEditor.GetDefineProperties ',
// ' APersistentClassName="',APersistentClassName,'"',
// ' AncestorClassName="',AncestorClassName,'"',
// ' AncestorClassName="',AncestorClassName,'"',
// ' Identifier="',Identifier,'"');
IsDefined:=false;
if FDefineProperties=nil then
FDefineProperties:=
TAVLTree.Create(TListSortCompare(@CompareDefPropCacheItems));
ANode:=FDefineProperties.FindKey(PChar(APersistentClassName),
TListSortCompare(@ComparePersClassNameAndDefPropCacheItem));
RegisterStandardDefineProperties;
ANode:=FindDefinePropertyNode(APersistentClassName);
if ANode=nil then begin
// cache component class, try to retrieve the define properties
CacheItem:=TDefinePropertiesCacheItem.Create;
@ -1575,7 +1578,8 @@ begin
end;
if APersistent<>nil then begin
//debugln('TCustomFormEditor.GetDefineProperties Getting define properties for ',APersistent.ClassName);
debugln('TCustomFormEditor.GetDefineProperties Getting define properties for ',APersistent.ClassName);
// try creating a component class and call DefineProperties
DefinePropertiesReader:=nil;
DefinePropertiesPersistent:=nil;
@ -1631,6 +1635,34 @@ begin
IsDefined:=CacheItem.DefineProperties.IndexOf(Identifier)>=0;
end;
procedure TCustomFormEditor.RegisterDefineProperty(const APersistentClassName,
Identifier: string);
var
ANode: TAVLTreeNode;
CacheItem: TDefinePropertiesCacheItem;
begin
//DebugLn('TCustomFormEditor.RegisterDefineProperty ',APersistentClassName,' ',Identifier);
ANode:=FindDefinePropertyNode(APersistentClassName);
if ANode=nil then begin
CacheItem:=TDefinePropertiesCacheItem.Create;
CacheItem.PersistentClassname:=APersistentClassName;
FDefineProperties.Add(CacheItem);
end else begin
CacheItem:=TDefinePropertiesCacheItem(ANode.Data);
end;
if (CacheItem.DefineProperties=nil) then
CacheItem.DefineProperties:=TStringList.Create;
if (CacheItem.DefineProperties.IndexOf(Identifier)<0) then
CacheItem.DefineProperties.Add(Identifier);
end;
procedure TCustomFormEditor.RegisterStandardDefineProperties;
begin
if FStandardDefinePropertiesRegistered then exit;
FStandardDefinePropertiesRegistered:=true;
RegisterDefineProperty('TStrings','Strings');
end;
procedure TCustomFormEditor.JITListReaderError(Sender: TObject;
ErrorType: TJITFormError; var Action: TModalResult);
var
@ -1729,6 +1761,16 @@ begin
Result:=Obj_Inspector.PropertyEditorHook;
end;
function TCustomFormEditor.FindDefinePropertyNode(
const APersistentClassName: string): TAVLTreeNode;
begin
if FDefineProperties=nil then
FDefineProperties:=
TAVLTree.Create(TListSortCompare(@CompareDefPropCacheItems));
Result:=FDefineProperties.FindKey(PChar(APersistentClassName),
TListSortCompare(@ComparePersClassNameAndDefPropCacheItem));
end;
function TCustomFormEditor.CreateUniqueComponentName(AComponent: TComponent
): string;
begin
@ -1754,7 +1796,7 @@ begin
Result:=RightStr(Result,length(Result)-1);
Result:=Result+IntToStr(i);
while (j>=0)
and (AnsiCompareText(Result,OwnerComponent.Components[j].Name)<>0) do
and (CompareText(Result,OwnerComponent.Components[j].Name)<>0) do
dec(j);
if j<0 then exit;
inc(i);
@ -1988,7 +2030,7 @@ end;
procedure TDefinePropertiesPersistent.PublicDefineProperties(Filer: TFiler);
begin
debugln('TDefinePropertiesPersistent.PublicDefineProperties A ',ClassName,' ',dbgsName(FTarget));
debugln('TDefinePropertiesPersistent.PublicDefineProperties START ',ClassName,' ',dbgsName(FTarget));
Target.DefineProperties(Filer);
debugln('TDefinePropertiesPersistent.PublicDefineProperties END ',ClassName,' ',dbgsName(FTarget));
end;