summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-12-04 14:41:19 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2007-12-04 14:41:19 +0000
commitf03b596e2a10ca310aa9f0d581ffb6bf8bc4753f (patch)
tree5c0cb0aff215cf0922925253b15bc2706465cc66
parentacbf9e099e49650f880c37cb97d3f8f532e2bdf1 (diff)
downloadfpGUI-f03b596e2a10ca310aa9f0d581ffb6bf8bc4753f.tar.xz
* Fixed a memory leak in TfpgCombobox.
* Fixed a couple of memory leaks in gui_tree.pas
-rw-r--r--examples/gui/filedialog/filedialog.lpi3
-rw-r--r--examples/gui/fontselect/fontselect.lpi3
-rw-r--r--examples/gui/gauges/gaugetest.lpi3
-rw-r--r--examples/gui/gridtest/gridtest.lpi3
-rw-r--r--examples/gui/imgtest/bitmaptest.lpi2
-rw-r--r--examples/gui/stdimages/stdimglist.lpi5
-rw-r--r--examples/gui/treeviewtest/treeviewtest.lpr9
-rw-r--r--src/gui/gui_combobox.pas1
-rw-r--r--src/gui/gui_tree.pas87
9 files changed, 87 insertions, 29 deletions
diff --git a/examples/gui/filedialog/filedialog.lpi b/examples/gui/filedialog/filedialog.lpi
index 93c2d7b0..9908bf52 100644
--- a/examples/gui/filedialog/filedialog.lpi
+++ b/examples/gui/filedialog/filedialog.lpi
@@ -46,7 +46,8 @@
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
- <CustomOptions Value="-FUunits"/>
+ <CustomOptions Value="-FUunits
+"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
diff --git a/examples/gui/fontselect/fontselect.lpi b/examples/gui/fontselect/fontselect.lpi
index d23df471..d97b57fa 100644
--- a/examples/gui/fontselect/fontselect.lpi
+++ b/examples/gui/fontselect/fontselect.lpi
@@ -46,7 +46,8 @@
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
- <CustomOptions Value="-FUunits"/>
+ <CustomOptions Value="-FUunits
+"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
diff --git a/examples/gui/gauges/gaugetest.lpi b/examples/gui/gauges/gaugetest.lpi
index 7c26a800..0baac1c7 100644
--- a/examples/gui/gauges/gaugetest.lpi
+++ b/examples/gui/gauges/gaugetest.lpi
@@ -50,7 +50,8 @@
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
- <CustomOptions Value="-FUunits"/>
+ <CustomOptions Value="-FUunits
+"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
diff --git a/examples/gui/gridtest/gridtest.lpi b/examples/gui/gridtest/gridtest.lpi
index c22c0856..0860255a 100644
--- a/examples/gui/gridtest/gridtest.lpi
+++ b/examples/gui/gridtest/gridtest.lpi
@@ -46,7 +46,8 @@
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
- <CustomOptions Value="-FUunits"/>
+ <CustomOptions Value="-FUunits
+"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
diff --git a/examples/gui/imgtest/bitmaptest.lpi b/examples/gui/imgtest/bitmaptest.lpi
index de1157a5..c318e155 100644
--- a/examples/gui/imgtest/bitmaptest.lpi
+++ b/examples/gui/imgtest/bitmaptest.lpi
@@ -2,7 +2,7 @@
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
- <Version Value="5"/>
+ <Version Value="6"/>
<General>
<Flags>
<SaveOnlyProjectUnits Value="True"/>
diff --git a/examples/gui/stdimages/stdimglist.lpi b/examples/gui/stdimages/stdimglist.lpi
index 1d6f96bb..613a4a70 100644
--- a/examples/gui/stdimages/stdimglist.lpi
+++ b/examples/gui/stdimages/stdimglist.lpi
@@ -2,7 +2,7 @@
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
- <Version Value="5"/>
+ <Version Value="6"/>
<General>
<Flags>
<SaveOnlyProjectUnits Value="True"/>
@@ -45,7 +45,8 @@
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
- <CustomOptions Value="-FUunits"/>
+ <CustomOptions Value="-FUunits
+"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
diff --git a/examples/gui/treeviewtest/treeviewtest.lpr b/examples/gui/treeviewtest/treeviewtest.lpr
index 562ca8bb..68fb9f91 100644
--- a/examples/gui/treeviewtest/treeviewtest.lpr
+++ b/examples/gui/treeviewtest/treeviewtest.lpr
@@ -75,9 +75,12 @@ var
begin
fpgApplication.Initialize;
frm := TMainForm.Create(nil);
- frm.Show;
- fpgApplication.Run;
- frm.Free;
+ try
+ frm.Show;
+ fpgApplication.Run;
+ finally
+ frm.Free;
+ end;
end;
begin
diff --git a/src/gui/gui_combobox.pas b/src/gui/gui_combobox.pas
index 82a10afa..91e422fb 100644
--- a/src/gui/gui_combobox.pas
+++ b/src/gui/gui_combobox.pas
@@ -484,6 +484,7 @@ end;
destructor TfpgAbstractComboBox.Destroy;
begin
FItems.Free;
+ FFont.Free;
inherited Destroy;
end;
diff --git a/src/gui/gui_tree.pas b/src/gui/gui_tree.pas
index b1328b14..0565f0fd 100644
--- a/src/gui/gui_tree.pas
+++ b/src/gui/gui_tree.pas
@@ -167,6 +167,8 @@ type
procedure HScrollbarScroll(Sender: TObject; position: integer);
procedure UpdateScrollbars;
procedure ResetScrollbar;
+ procedure ClearColumnLeft;
+ procedure FreeAllTreeNodes;
protected
FColumnLeft: TList;
procedure HandleResize(awidth, aheight: TfpgCoord); override;
@@ -186,6 +188,7 @@ type
function StepToRoot(aNode: TfpgTreeNode): integer;
public
constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
procedure SetColumnWidth(AIndex, AWidth: word);
function GetColumnWidth(AIndex: word): word; // the width of a column - aIndex of the rootnode = 0
property Font: TfpgFont read FFont;
@@ -317,7 +320,12 @@ destructor TfpgTreeNode.Destroy;
begin
if FParent <> nil then
FParent.UnregisterSubNode(self);
- FData := nil;
+ FData := nil;
+ FParent := nil;
+ FNext := nil;
+ FPrev := nil;
+ FFirstSubNode := nil;
+ FLastSubNode := nil;
inherited Destroy;
end;
@@ -862,8 +870,6 @@ begin
end;
function TfpgTreeview.GetColumnLeft(AIndex: integer): integer;
-var
- AColumnLeft: PColumnLeft;
begin
if FColumnLeft = nil then
PreCalcColumnLeft;
@@ -873,15 +879,9 @@ begin
else
begin
if AIndex > FColumnLeft.Count - 1 then
- begin
- AColumnLeft := FColumnLeft[FColumnLeft.Count - 1];
- result := AColumnLeft^;
- end
+ result := PColumnLeft(FColumnLeft[FColumnLeft.Count - 1])^
else
- begin
- AColumnLeft := FColumnLeft[AIndex];
- result := AColumnLeft^;
- end;
+ result := PColumnLeft(FColumnLeft[AIndex])^;
end;
end;
@@ -926,14 +926,10 @@ begin
writeln('TfpgTreeView.PreCalcColumnWidth');
{$ENDIf}
if FColumnLeft = nil then
- FColumnLeft := TList.Create
- else
- FColumnLeft.Clear;
- for ACounter := 0 to FColumnLeft.Count - 1 do // Freeing Memory
- begin
- AColumnLeft := FColumnLeft[ACounter];
- Dispose(AColumnLeft);
- end;
+ FColumnLeft := TList.Create;
+
+ ClearColumnLeft; // Freeing memory
+
Aleft := 0;
for ACounter := 1 to RootNode.GetMaxDepth do
begin
@@ -988,6 +984,47 @@ begin
FHScrollbar.SetPosition(1, Height - 19, Width - 2, 18);
end;
+procedure TfpgTreeView.ClearColumnLeft;
+var
+ i: integer;
+ AColumnLeft: PColumnLeft;
+begin
+ for i := 0 to FColumnLeft.Count - 1 do // Freeing Memory
+ begin
+ AColumnLeft := FColumnLeft[i];
+ Dispose(AColumnLeft);
+ end;
+ FColumnLeft.Clear;
+end;
+
+procedure TfpgTreeView.FreeAllTreeNodes;
+var
+ n: TfpgTreeNode;
+ i: integer;
+ list: TList;
+begin
+ list := TList.Create;
+ n := RootNode.FirstSubNode;
+ list.Add(n);
+
+ while n <> nil do
+ begin
+ // todo: this only frees of the first level of nodes!!!!
+ n := n.next;
+ list.Add(n);
+ end;
+
+// writeln('NodeCount = ', list.Count);
+ while list.Count > 0 do
+ begin
+ n := TfpgTreeNode(list.Last);
+ list.Remove(n);
+ n.Free;
+ end;
+ list.Clear;
+ list.Free;
+end;
+
procedure TfpgTreeview.HandleResize(awidth, aheight: TfpgCoord);
begin
{$IFDEF DEBUG}
@@ -1661,6 +1698,18 @@ begin
FScrollWheelDelta := 15;
end;
+destructor TfpgTreeView.Destroy;
+var
+ i: integer;
+begin
+ ClearColumnLeft;
+ FFont.Free;
+
+ FreeAllTreeNodes;
+
+ inherited Destroy;
+end;
+
procedure TfpgTreeview.SetColumnWidth(AIndex, AWidth: word);
var
h: PfpgTreeColumnWidth;