LCL: TTreeView: fixed crash on painting tree lines

git-svn-id: trunk@17959 -
This commit is contained in:
mattias 2008-12-27 08:43:57 +00:00
parent 60b5ca6f81
commit 9d570a2eba
5 changed files with 54 additions and 6 deletions

View File

@ -98,6 +98,7 @@ type
property Evaluator: TExpressionEvaluator read FEvaluator write SetEvaluator;
property ChangeStamp: integer read FChangeStamp;
procedure IncreaseChangeStamp; inline;
procedure WriteDebugReport;
property ErrorNode: TCompOptCondNode read FErrorNode write FErrorNode;
property ErrorMsg: string read FErrorMsg write FErrorMsg;
end;
@ -362,6 +363,22 @@ begin
FChangeStamp:=Low(Integer);
end;
procedure TCompOptConditionals.WriteDebugReport;
procedure WriteNode(Prefix: string; Node: TCompOptCondNode);
var
i: Integer;
begin
DebugLn([Prefix,'Type=',COCNodeTypeNames[Node.NodeType],' Value=',Node.Value]);
for i:=0 to Node.Count-1 do
WriteNode(Prefix+' ',Node.Childs[i]);
end;
begin
DebugLn(['TCompOptConditionals.WriteDebugReport ']);
WriteNode(' ',Root);
end;
{ TCompilerDiffTool }
procedure TCompilerDiffTool.SetDiff(const AValue: TStrings);

View File

@ -27,7 +27,7 @@ uses
Classes, SysUtils, LCLProc, FileProcs, Controls, LResources, Forms, ComCtrls,
Menus, Dialogs,
ProjectIntf, IDEImagesIntf,
CompOptsModes;
LazarusIDEStrConsts, CompOptsModes;
type
@ -231,13 +231,17 @@ procedure TCompOptsConditionalsFrame.ConsistencyCheck;
RaiseCatchableException('');
if TVNode=nil then
RaiseCatchableException('');
if COCNode<>TCompOptCondNode(TVNode.Data) then
if TVNode.Data=nil then
RaiseCatchableException('');
if COCNode<>TCompOptCondNode(TVNode.Data) then
RaiseCatchableException(TCompOptCondNode(TObject(TVNode.Data)).Value+'<>'+COCNode.Value+' TVNode='+TVNode.Text);
ChildTVNode:=TVNode.GetFirstChild;
for i:=0 to COCNode.Count-1 do begin
CheckNode(COCNode.Childs[i],ChildTVNode);
ChildTVNode:=ChildTVNode.GetNextSibling;
end;
if ChildTVNode<>nil then
RaiseCatchableException('');
end;
begin
@ -310,10 +314,19 @@ begin
if not GetSelectedNode(COCNode,TVNode,true) then exit;
NewCOCNode:=TCompOptCondNode.Create(COCNode.Owner);
s:=NodeToCaption(COCNode);
NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,COCNode);
NewTVNode.MoveTo(TVNode,naAddChildFirst);
NewTVNode:=COCTreeView.Items.AddObject(TVNode,s,NewCOCNode);
NewTVNode.MoveTo(TVNode,AttachMode);
NewTVNode.ImageIndex:=FNodeTypeImageIDs[NewCOCNode.NodeType];
NewTVNode.StateIndex:=NewTVNode.ImageIndex;
case AttachMode of
naAdd: NewCOCNode.Move(COCNode.Parent,COCNode.Parent.Count);
naAddFirst: NewCOCNode.Move(COCNode.Parent,0);
naAddChild: NewCOCNode.Move(COCNode,COCNode.Count);
naAddChildFirst: NewCOCNode.Move(COCNode,0);
naInsert: NewCOCNode.Move(COCNode.Parent,COCNode.Index);
naInsertBehind: NewCOCNode.Move(COCNode.Parent,COCNode.Index+1);
end;
TVNode.Expanded:=true;
ConsistencyCheck;
end;
@ -335,6 +348,16 @@ begin
FNodeTypeImageIDs[cocntElseIf]:=IDEImages.LoadImage(24,'da_elseif');
FNodeTypeImageIDs[cocntElse]:=IDEImages.LoadImage(24,'da_else');
FNodeTypeImageIDs[cocntAddValue]:=IDEImages.LoadImage(24,'da_define');
InsertAboveMenuItem.Caption:=dlgCOCreateNodeAbove;
InsertBelowMenuItem.Caption:=dlgCOCreateNodeBelow;
InsertChildMenuItem.Caption:=dlgCOCreateChildNode;
DeleteMenuItem.Caption:=lisCodeToolsDefsDeleteNode;
PropertiesMenuItem.Caption:=lisCEProperties;
MoveLvlDownMenuItem.Caption:=dlgCOMoveLevelDown;
MoveLvlUpMenuItem.Caption:=dlgCOMoveLevelUp;
MoveDownMenuItem.Caption:=dlgCOMoveDown;
MoveUpMenuItem.Caption:=dlgCOMoveUp;
end;
initialization

View File

@ -3611,6 +3611,10 @@ resourcestring
lisCEConstants = 'Constants';
lisCEProcedures = 'Procedures';
lisCEProperties = 'Properties';
dlgCOMoveLevelDown = 'Move level down';
dlgCOMoveLevelUp = 'Move level up';
dlgCOMoveDown = 'Move down';
dlgCOMoveUp = 'Move up';
lisCEOMode = 'Preferred Exhibition Mode';
lisCEOModeCategory = 'Category';
lisCEOModeSource = 'Source';
@ -3999,6 +4003,9 @@ resourcestring
rsCreatingSymLinkFailed = 'Creating symbolic link "%s" failed!';
rsCreatingSymLinkNotSupported = 'Creating symbolic link is not supported on this platform!';
lisPutLrsFilesInOutputDirectory = 'Save .lrs files in the output directory';
dlgCOCreateNodeAbove = 'Create node above';
dlgCOCreateNodeBelow = 'Create node below';
dlgCOCreateChildNode = 'Create child node';
implementation

View File

@ -128,7 +128,7 @@ type
property Owner: TLazCompOptConditionals read FOwner;
property Parent: TCompOptCondNode read FParent;
property Count: integer read GetCount;
property Childs[Index: integer]: TCompOptCondNode read GetChilds;
property Childs[Index: integer]: TCompOptCondNode read GetChilds; default;
property Index: integer read GetIndex write SetIndex;
end;
@ -1052,6 +1052,7 @@ begin
if (NewIndex<0) or (NewIndex>FParent.Count) then
NewIndex:=FParent.Count;
FParent.fChilds.Insert(NewIndex,Self);
FParent.Changed;
end;
end;

View File

@ -4152,7 +4152,7 @@ var
var
CurMid: integer;
begin
if (CurNode <> nil) and (tvoShowRoot in Options) or (CurNode.Parent<>nil)
if (CurNode <> nil) and ((tvoShowRoot in Options) or (CurNode.Parent<>nil))
then begin
Result := DrawTreeLines(CurNode.Parent);
if ShowLines then