Browse Source

Implemented TCollection and TCollectionItem

michael 27 years ago
parent
commit
26797c3480
2 changed files with 118 additions and 2 deletions
  1. 5 1
      fcl/inc/classesh.inc
  2. 113 1
      fcl/inc/collect.inc

+ 5 - 1
fcl/inc/classesh.inc

@@ -269,6 +269,7 @@ type
     function GetItem(Index: Integer): TCollectionItem;
     function GetItem(Index: Integer): TCollectionItem;
     procedure SetItem(Index: Integer; Value: TCollectionItem);
     procedure SetItem(Index: Integer; Value: TCollectionItem);
     procedure SetItemName(Item: TCollectionItem); virtual;
     procedure SetItemName(Item: TCollectionItem); virtual;
+    procedure SetPropName; virtual;
     procedure Update(Item: TCollectionItem); virtual;
     procedure Update(Item: TCollectionItem); virtual;
     property PropName: string read GetPropName write FPropName;
     property PropName: string read GetPropName write FPropName;
   public
   public
@@ -1046,7 +1047,10 @@ function LineStart(Buffer, BufPos: PChar): PChar;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.3  1998-05-06 12:58:35  michael
+  Revision 1.4  1998-05-27 11:41:43  michael
+  Implemented TCollection and TCollectionItem
+
+  Revision 1.3  1998/05/06 12:58:35  michael
   + Added WriteAnsiString method to TStream
   + Added WriteAnsiString method to TStream
 
 
   Revision 1.2  1998/05/04 14:30:11  michael
   Revision 1.2  1998/05/04 14:30:11  michael

+ 113 - 1
fcl/inc/collect.inc

@@ -19,6 +19,10 @@
 function TCollectionItem.GetIndex: Integer;
 function TCollectionItem.GetIndex: Integer;
 
 
 begin
 begin
+  if FCollection<>nil then
+    Result:=FCollection.FItems.IndexOf(Pointer(Self))
+  else
+    Result:=-1;
 end;
 end;
 
 
 
 
@@ -26,6 +30,11 @@ end;
 procedure TCollectionItem.SetCollection(Value: TCollection);
 procedure TCollectionItem.SetCollection(Value: TCollection);
 
 
 begin
 begin
+  IF Value<>FCollection then
+    begin
+    If FCollection<>Nil then FCollection.RemoveItem(Self);
+    if Value<>Nil then Value.InsertItem(Self);
+    end;  
 end;
 end;
 
 
 
 
@@ -33,6 +42,13 @@ end;
 procedure TCollectionItem.Changed(AllItems: Boolean);
 procedure TCollectionItem.Changed(AllItems: Boolean);
 
 
 begin
 begin
+ If (FCollection<>Nil) then
+  begin
+  If AllItems then 
+    FCollection.Update(Nil)
+  else
+    FCollection.Update(Self);
+  end;
 end;
 end;
 
 
 
 
@@ -40,12 +56,17 @@ end;
 function TCollectionItem.GetNamePath: string;
 function TCollectionItem.GetNamePath: string;
 
 
 begin
 begin
+  If FCollection<>Nil then
+    Result:=FCollection.GetNamePath+'['+IntToStr(Index)+']'
+  else
+    Result:=ClassName; 
 end;
 end;
 
 
 
 
 function TCollectionItem.GetOwner: TPersistent;
 function TCollectionItem.GetOwner: TPersistent;
 
 
 begin
 begin
+  Result:=FCollection;
 end;
 end;
 
 
 
 
@@ -53,19 +74,29 @@ end;
 function TCollectionItem.GetDisplayName: string; 
 function TCollectionItem.GetDisplayName: string; 
 
 
 begin
 begin
+  Result:=ClassName;
 end;
 end;
 
 
 
 
 
 
 procedure TCollectionItem.SetIndex(Value: Integer);
 procedure TCollectionItem.SetIndex(Value: Integer);
 
 
+Var Temp : Longint;
+
 begin
 begin
+  Temp:=GetIndex;
+  If (Temp>-1) and (Temp<>Value) then
+    begin
+    FCollection.FItems.Move(Temp,Value);
+    Changed(True);
+    end; 
 end;
 end;
 
 
 
 
 procedure TCollectionItem.SetDisplayName(const Value: string);
 procedure TCollectionItem.SetDisplayName(const Value: string);
 
 
 begin
 begin
+  Changed(False);
 end;
 end;
 
 
 
 
@@ -73,6 +104,8 @@ end;
 constructor TCollectionItem.Create(ACollection: TCollection); 
 constructor TCollectionItem.Create(ACollection: TCollection); 
 
 
 begin
 begin
+  Inherited Create;
+  SetCollection(ACollection);
 end;
 end;
 
 
 
 
@@ -80,6 +113,8 @@ end;
 destructor TCollectionItem.Destroy; 
 destructor TCollectionItem.Destroy; 
 
 
 begin
 begin
+  SetCollection(Nil);
+  Inherited Destroy;
 end;
 end;
 
 
 {****************************************************************************}
 {****************************************************************************}
@@ -91,13 +126,31 @@ end;
 function TCollection.GetCount: Integer;
 function TCollection.GetCount: Integer;
 
 
 begin
 begin
+  If Assigned(FItems) Then
+    Result:=FItems.Count
+  else
+    Result:=0;
 end;
 end;
 
 
 
 
+Procedure TCollection.SetPropName;
+
+begin
+  //!! Should be replaced by the proper routines.
+  FPropName:='';
+end;
+
 
 
 function TCollection.GetPropName: string;
 function TCollection.GetPropName: string;
 
 
+Var TheOWner : TPersistent;
+
 begin
 begin
+  Result:=FPropNAme;
+  TheOWner:=GetOwner;
+  If (Result<>'') or (TheOwner=Nil) Or (TheOwner.Classinfo=Nil) then exit;
+  SetPropName;  
+  Result:=FPropName;
 end;
 end;
 
 
 
 
@@ -105,6 +158,14 @@ end;
 procedure TCollection.InsertItem(Item: TCollectionItem);
 procedure TCollection.InsertItem(Item: TCollectionItem);
 
 
 begin
 begin
+  If Not(Item Is FitemClass) then
+    exit;
+  FItems.add(Pointer(Item));
+  Item.Collection:=Self;
+  Item.FID:=FNextID;
+  inc(FNextID);
+  SetItemName(Item);
+  Changed;
 end;
 end;
 
 
 
 
@@ -112,32 +173,49 @@ end;
 procedure TCollection.RemoveItem(Item: TCollectionItem);
 procedure TCollection.RemoveItem(Item: TCollectionItem);
 
 
 begin
 begin
+  FItems.Remove(Pointer(Item));
+  Item.Collection:=Nil;
+  Changed;
 end;
 end;
 
 
 
 
 function TCollection.GetAttrCount: Integer; 
 function TCollection.GetAttrCount: Integer; 
 
 
 begin
 begin
+  Result:=0;
 end;
 end;
 
 
 
 
 function TCollection.GetAttr(Index: Integer): string; 
 function TCollection.GetAttr(Index: Integer): string; 
 
 
 begin
 begin
+  Result:='';
 end;
 end;
 
 
 
 
 
 
 function TCollection.GetItemAttr(Index, ItemIndex: Integer): string; 
 function TCollection.GetItemAttr(Index, ItemIndex: Integer): string; 
 
 
+
 begin
 begin
+  //!! Not Accepted !!
+  //!! Result:=TCollectionItem(FItems[ItemIndex]).DisplayName;
 end;
 end;
 
 
 
 
 
 
 function TCollection.GetNamePath: string; 
 function TCollection.GetNamePath: string; 
 
 
+Var OwnerName,ThePropName : String;
+
 begin
 begin
+  Result:=ClassName;
+  If GetOwner=Nil then Exit;
+  OwnerName:=GetOwner.GetNamePath;
+  If OwnerName='' then Exit;
+  ThePropName:=PropName;
+  if ThePropName='' then exit;
+  Result:=OwnerName+'.'+PropName;
 end;
 end;
 
 
 
 
@@ -145,6 +223,7 @@ end;
 procedure TCollection.Changed;
 procedure TCollection.Changed;
 
 
 begin
 begin
+  Update(Nil);
 end;
 end;
 
 
 
 
@@ -152,6 +231,7 @@ end;
 function TCollection.GetItem(Index: Integer): TCollectionItem;
 function TCollection.GetItem(Index: Integer): TCollectionItem;
 
 
 begin
 begin
+  //!! Result:=FItems[Index];
 end;
 end;
 
 
 
 
@@ -159,6 +239,7 @@ end;
 procedure TCollection.SetItem(Index: Integer; Value: TCollectionItem);
 procedure TCollection.SetItem(Index: Integer; Value: TCollectionItem);
 
 
 begin
 begin
+ //!! TCollectionItem(FItems[Index]).Assign(Value);
 end;
 end;
 
 
 
 
@@ -180,6 +261,8 @@ end;
 constructor TCollection.Create(AItemClass: TCollectionItemClass);
 constructor TCollection.Create(AItemClass: TCollectionItemClass);
 
 
 begin
 begin
+  FItemClass:=ItemClass;
+  FItems:=TList.Create;
 end;
 end;
 
 
 
 
@@ -187,6 +270,9 @@ end;
 destructor TCollection.Destroy; 
 destructor TCollection.Destroy; 
 
 
 begin
 begin
+  If Assigned(FItems) Then Clear;
+  FItems.Free;
+  Inherited Destroy;
 end;
 end;
 
 
 
 
@@ -194,13 +280,25 @@ end;
 function TCollection.Add: TCollectionItem;
 function TCollection.Add: TCollectionItem;
 
 
 begin
 begin
+  Result:=FItemClass.Create(Self);
 end;
 end;
 
 
 
 
 
 
 procedure TCollection.Assign(Source: TPersistent);
 procedure TCollection.Assign(Source: TPersistent);
 
 
+Var I : Longint;
+
 begin
 begin
+  If Source is TCollection then
+    begin
+    Clear;
+    For I:=0 To TCollection(Source).Count-1 do
+     Add.Assign(TCollection(Source).Items[I]);
+    exit;
+    end
+  else
+    Inherited Assign(Source);
 end;
 end;
 
 
 
 
@@ -215,6 +313,8 @@ end;
 procedure TCollection.Clear;
 procedure TCollection.Clear;
 
 
 begin
 begin
+  //!! If Assigned(FItems) then
+  //!!   While FItems.Count>0 do TCollectionItem(FItems.Last).Free;
 end;
 end;
 
 
 
 
@@ -228,11 +328,23 @@ end;
 
 
 function TCollection.FindItemID(ID: Integer): TCollectionItem;
 function TCollection.FindItemID(ID: Integer): TCollectionItem;
 
 
+Var I : Longint;
+
 begin
 begin
+  Result:=Nil;
+  For I:=0 to Fitems.Count-1 do
+   begin
+   //!! Result:=TCollectionItem(FItems[I]);
+   If Result.Id=Id then exit;
+   end;
 end;
 end;
+
 {
 {
   $Log$
   $Log$
-  Revision 1.1  1998-05-04 14:30:11  michael
+  Revision 1.2  1998-05-27 11:41:41  michael
+  Implemented TCollection and TCollectionItem
+
+  Revision 1.1  1998/05/04 14:30:11  michael
   * Split file according to Class; implemented dummys for all methods, so unit compiles.
   * Split file according to Class; implemented dummys for all methods, so unit compiles.
 
 
 }
 }