mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 08:09:34 +02:00
lcl: add RegisterRemovedProperty procedure which allows to skip removed properties by TReader and by IDE
ide: use information about removed properties to skip them while loading components git-svn-id: trunk@17739 -
This commit is contained in:
parent
3d0838c488
commit
c9039dd63d
@ -2263,7 +2263,16 @@ end;
|
|||||||
procedure TCustomFormEditor.JITListPropertyNotFound(Sender: TObject;
|
procedure TCustomFormEditor.JITListPropertyNotFound(Sender: TObject;
|
||||||
Reader: TReader; Instance: TPersistent; var PropName: string;
|
Reader: TReader; Instance: TPersistent; var PropName: string;
|
||||||
IsPath: boolean; var Handled, Skip: Boolean);
|
IsPath: boolean; var Handled, Skip: Boolean);
|
||||||
|
var
|
||||||
|
Index: Integer;
|
||||||
begin
|
begin
|
||||||
|
Index := RemovedProperties.IndexOf(TPersistentClass(Instance.ClassType), PropName);
|
||||||
|
if Index >= 0 then
|
||||||
|
begin
|
||||||
|
Skip := True;
|
||||||
|
Handled := True;
|
||||||
|
end
|
||||||
|
else
|
||||||
DebugLn(['TCustomFormEditor.JITListPropertyNotFound ',Sender.ClassName,
|
DebugLn(['TCustomFormEditor.JITListPropertyNotFound ',Sender.ClassName,
|
||||||
' Instance=',Instance.ClassName,' PropName="',PropName,
|
' Instance=',Instance.ClassName,' PropName="',PropName,
|
||||||
'" IsPath=',IsPath]);
|
'" IsPath=',IsPath]);
|
||||||
|
@ -349,6 +349,31 @@ type
|
|||||||
property OnFindComponentClass;
|
property OnFindComponentClass;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TRemovedProperty = record
|
||||||
|
PersistentClass: TPersistentClass;
|
||||||
|
PropertyName: String;
|
||||||
|
Note: String;
|
||||||
|
HelpKeyword: String;
|
||||||
|
end;
|
||||||
|
PRemovedProperty = ^TRemovedProperty;
|
||||||
|
|
||||||
|
{ TRemovedPropertyList }
|
||||||
|
|
||||||
|
TRemovedPropertyList = class(TList)
|
||||||
|
private
|
||||||
|
function GetItem(AIndex: Integer): PRemovedProperty;
|
||||||
|
procedure SetItem(AIndex: Integer; const AValue: PRemovedProperty);
|
||||||
|
protected
|
||||||
|
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
|
||||||
|
procedure DoPropertyNotFound(Reader: TReader; Instance: TPersistent;
|
||||||
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
||||||
|
public
|
||||||
|
function IndexOf(AClass: TPersistentClass; APropertyName: String): Integer;
|
||||||
|
function Add(APersistentClass: TPersistentClass; APropertyName, ANote,
|
||||||
|
AHelpKeyWord: string): Integer; reintroduce;
|
||||||
|
property Items[AIndex: Integer]: PRemovedProperty read GetItem write SetItem;
|
||||||
|
end;
|
||||||
|
|
||||||
const
|
const
|
||||||
ObjStreamMaskInherited = 1;
|
ObjStreamMaskInherited = 1;
|
||||||
ObjStreamMaskChildPos = 2;
|
ObjStreamMaskChildPos = 2;
|
||||||
@ -356,6 +381,7 @@ const
|
|||||||
|
|
||||||
var
|
var
|
||||||
LazarusResources: TLResourceList;
|
LazarusResources: TLResourceList;
|
||||||
|
RemovedProperties: TRemovedPropertyList = nil;
|
||||||
|
|
||||||
LRSObjectReaderClass: TLRSObjectReaderClass=TLRSObjectReader;
|
LRSObjectReaderClass: TLRSObjectReaderClass=TLRSObjectReader;
|
||||||
LRSObjectWriterClass: TLRSObjectWriterClass=TLRSObjectWriter;
|
LRSObjectWriterClass: TLRSObjectWriterClass=TLRSObjectWriter;
|
||||||
@ -483,12 +509,13 @@ function FloatToLFMStr(const Value: extended; Precision, Digits: Integer
|
|||||||
function CompareLRPositionLinkWithLFMPosition(Item1, Item2: Pointer): integer;
|
function CompareLRPositionLinkWithLFMPosition(Item1, Item2: Pointer): integer;
|
||||||
function CompareLRPositionLinkWithLRSPosition(Item1, Item2: Pointer): integer;
|
function CompareLRPositionLinkWithLRSPosition(Item1, Item2: Pointer): integer;
|
||||||
|
|
||||||
|
procedure RegisterRemovedProperty(PersistentClass: TPersistentClass;
|
||||||
|
PropertyName, Note, HelpKeyWord: string);
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
|
||||||
const
|
const
|
||||||
LineEnd: ShortString = LineEnding;
|
LineEnd: ShortString = LineEnding;
|
||||||
|
|
||||||
@ -518,6 +545,67 @@ type
|
|||||||
var Name: string);
|
var Name: string);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TRemovedPropertyList }
|
||||||
|
|
||||||
|
function TRemovedPropertyList.GetItem(AIndex: Integer): PRemovedProperty;
|
||||||
|
begin
|
||||||
|
Result := inherited Get(AIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRemovedPropertyList.SetItem(AIndex: Integer;
|
||||||
|
const AValue: PRemovedProperty);
|
||||||
|
begin
|
||||||
|
inherited Put(AIndex, AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRemovedPropertyList.Notify(Ptr: Pointer; Action: TListNotification);
|
||||||
|
begin
|
||||||
|
if Action = lnDeleted then
|
||||||
|
Dispose(PRemovedProperty(Ptr))
|
||||||
|
else
|
||||||
|
inherited Notify(Ptr, Action);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRemovedPropertyList.DoPropertyNotFound(Reader: TReader; Instance: TPersistent;
|
||||||
|
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
|
||||||
|
begin
|
||||||
|
Skip := IndexOf(TPersistentClass(Instance.ClassType), PropName) >= 0;
|
||||||
|
Handled := Skip;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRemovedPropertyList.IndexOf(AClass: TPersistentClass;
|
||||||
|
APropertyName: String): Integer;
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
APropertyName := LowerCase(APropertyName);
|
||||||
|
for i := 0 to Count - 1 do
|
||||||
|
if AClass.InheritsFrom(Items[i]^.PersistentClass) and
|
||||||
|
(APropertyName = Items[i]^.PropertyName) then
|
||||||
|
begin
|
||||||
|
Result := i;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRemovedPropertyList.Add(APersistentClass: TPersistentClass;
|
||||||
|
APropertyName, ANote, AHelpKeyWord: string): Integer;
|
||||||
|
var
|
||||||
|
Item: PRemovedProperty;
|
||||||
|
begin
|
||||||
|
Result := IndexOf(APersistentClass, APropertyName);
|
||||||
|
if Result = -1 then
|
||||||
|
begin
|
||||||
|
New(Item);
|
||||||
|
Item^.PersistentClass := APersistentClass;
|
||||||
|
Item^.PropertyName := LowerCase(APropertyName);
|
||||||
|
Item^.Note := ANote;
|
||||||
|
Item^.HelpKeyword := AHelpKeyWord;
|
||||||
|
Result := inherited Add(Item);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TReaderUniqueNamer }
|
{ TReaderUniqueNamer }
|
||||||
|
|
||||||
procedure TReaderUniqueNamer.OnSetName(Reader: TReader; Component: TComponent;
|
procedure TReaderUniqueNamer.OnSetName(Reader: TReader; Component: TComponent;
|
||||||
@ -2902,6 +2990,8 @@ begin
|
|||||||
if Assigned(LRSTranslator) then
|
if Assigned(LRSTranslator) then
|
||||||
Result.OnReadStringProperty:=@(LRSTranslator.TranslateStringProperty);
|
Result.OnReadStringProperty:=@(LRSTranslator.TranslateStringProperty);
|
||||||
|
|
||||||
|
Result.OnPropertyNotFound := @(RemovedProperties.DoPropertyNotFound);
|
||||||
|
|
||||||
DestroyDriver:=false;
|
DestroyDriver:=false;
|
||||||
if Result.Driver.ClassType=LRSObjectReaderClass then exit;
|
if Result.Driver.ClassType=LRSObjectReaderClass then exit;
|
||||||
// hack to set a write protected variable.
|
// hack to set a write protected variable.
|
||||||
@ -3358,6 +3448,12 @@ begin
|
|||||||
Result:=0;
|
Result:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure RegisterRemovedProperty(PersistentClass: TPersistentClass;
|
||||||
|
PropertyName, Note, HelpKeyWord: string);
|
||||||
|
begin
|
||||||
|
RemovedProperties.Add(PersistentClass, PropertyName, Note, HelpKeyWord);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
begin
|
begin
|
||||||
RegisterComponents('System',[TLazComponentQueue]);
|
RegisterComponents('System',[TLazComponentQueue]);
|
||||||
@ -5202,14 +5298,15 @@ procedure InternalInit;
|
|||||||
begin
|
begin
|
||||||
LazarusResources := TLResourceList.Create;
|
LazarusResources := TLResourceList.Create;
|
||||||
RegisterInitComponentHandler(TComponent, @InitResourceComponent);
|
RegisterInitComponentHandler(TComponent, @InitResourceComponent);
|
||||||
|
RemovedProperties := TRemovedPropertyList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
InternalInit;
|
InternalInit;
|
||||||
|
|
||||||
finalization
|
finalization
|
||||||
LazarusResources.Free;
|
FreeAndNil(LazarusResources);
|
||||||
LazarusResources := nil;
|
FreeAndNil(RemovedProperties);
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user