cody: fixed deleting diagram item

git-svn-id: trunk@40060 -
This commit is contained in:
mattias 2013-01-30 14:51:25 +00:00
parent 1158e7e27a
commit b25736005c

View File

@ -65,6 +65,7 @@ type
procedure SetSize(AValue: single); procedure SetSize(AValue: single);
procedure UpdateLayout; procedure UpdateLayout;
public public
Data: Pointer; // free to use by user
constructor Create(TheCategory: TCircleDiagramCategory); constructor Create(TheCategory: TCircleDiagramCategory);
destructor Destroy; override; destructor Destroy; override;
property Category: TCircleDiagramCategory read FCategory; property Category: TCircleDiagramCategory read FCategory;
@ -83,7 +84,7 @@ type
FDiagram: TCustomCircleDiagramControl; FDiagram: TCustomCircleDiagramControl;
FEndDegree16: single; FEndDegree16: single;
FMinSize: single; FMinSize: single;
fItems: TObjectList; // list of TCircleDiagramItem fItems: TFPList; // list of TCircleDiagramItem
FSize: single; FSize: single;
FStartDegree16: single; FStartDegree16: single;
function GetItems(Index: integer): TCircleDiagramItem; function GetItems(Index: integer): TCircleDiagramItem;
@ -94,8 +95,10 @@ type
procedure Invalidate; procedure Invalidate;
procedure InternalRemoveItem(Item: TCircleDiagramItem); procedure InternalRemoveItem(Item: TCircleDiagramItem);
public public
Data: Pointer; // free to use by user
constructor Create(TheDiagram: TCustomCircleDiagramControl); constructor Create(TheDiagram: TCustomCircleDiagramControl);
destructor Destroy; override; destructor Destroy; override;
procedure Clear;
function InsertItem(Index: integer; aCaption: string): TCircleDiagramItem; function InsertItem(Index: integer; aCaption: string): TCircleDiagramItem;
function AddItem(aCaption: string): TCircleDiagramItem; function AddItem(aCaption: string): TCircleDiagramItem;
property Diagram: TCustomCircleDiagramControl read FDiagram; property Diagram: TCustomCircleDiagramControl read FDiagram;
@ -356,6 +359,7 @@ procedure TCustomCircleDiagramControl.DoSetBounds(ALeft, ATop, AWidth,
AHeight: integer); AHeight: integer);
begin begin
inherited DoSetBounds(ALeft, ATop, AWidth, AHeight); inherited DoSetBounds(ALeft, ATop, AWidth, AHeight);
UpdateLayout;
UpdateScrollBar; UpdateScrollBar;
end; end;
@ -514,6 +518,7 @@ begin
end; end;
end; end;
Invalidate;
WriteDebugReport('TCustomCircleDiagramControl.UpdateLayout'); WriteDebugReport('TCustomCircleDiagramControl.UpdateLayout');
end; end;
@ -629,6 +634,7 @@ end;
procedure TCircleDiagramCategory.InternalRemoveItem(Item: TCircleDiagramItem); procedure TCircleDiagramCategory.InternalRemoveItem(Item: TCircleDiagramItem);
begin begin
Item.FCategory:=nil;
fItems.Remove(Item); fItems.Remove(Item);
UpdateLayout; UpdateLayout;
end; end;
@ -637,7 +643,7 @@ constructor TCircleDiagramCategory.Create(
TheDiagram: TCustomCircleDiagramControl); TheDiagram: TCustomCircleDiagramControl);
begin begin
FDiagram:=TheDiagram; FDiagram:=TheDiagram;
fItems:=TObjectList.Create(true); fItems:=TFPList.Create;
FMinSize:=DefaultCategoryMinSize; FMinSize:=DefaultCategoryMinSize;
end; end;
@ -645,10 +651,25 @@ destructor TCircleDiagramCategory.Destroy;
begin begin
if Diagram<>nil then if Diagram<>nil then
Diagram.InternalRemoveCategory(Self); Diagram.InternalRemoveCategory(Self);
Clear;
FreeAndNil(fItems); FreeAndNil(fItems);
inherited Destroy; inherited Destroy;
end; end;
procedure TCircleDiagramCategory.Clear;
begin
if Count=0 then exit;
if Diagram<>nil then
Diagram.BeginUpdate;
try
while Count>0 do
Items[Count-1].Free;
finally
if Diagram<>nil then
Diagram.EndUpdate;
end;
end;
function TCircleDiagramCategory.InsertItem(Index: integer; aCaption: string function TCircleDiagramCategory.InsertItem(Index: integer; aCaption: string
): TCircleDiagramItem; ): TCircleDiagramItem;
begin begin